{"version":3,"sources":["scripts/app.js"],"names":["forceSelect","$mdUtil","postLink","scope","element","attrs","autoComplete","isSelected","item","matches","indexOf","nextTick","ngModel","find","controller","registerSelectedItemWatcher","selectedItem","$setValidity","$viewChangeListeners","push","link","require","restrict","isString","s","String","config","$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider","authProvider","navigation","state","abstract","url","params","type","views","navigation@app","templateUrl","content@app","data","permission","bodyClass","resolve","$$websource","$http","$stateParams","$rootScope","$q","$state","api","$log","id","name","description","rules","topics","$$rules","content","number","totalPages","websourceId","method","websourceid","then","response","error","console","log","go","templateId","$$topic","topicid","topicId","$inject","angular","module","TopicSettingsController","$scope","vm","this","topic","RuleUploadController","$translate","$mdToast","$document","Upload","SampleService","SampleFactory","user","$interval","showPreview","hasHeader","preview","file","alphaToNum","alpha","i","num","len","length","charCodeAt","numToAlpha","parseInt","fromCharCode","_buildColumnsArray","range","res","rangeNum","split","map","val","replace","start","end","adjustColumnWhitespaces","source","lastColumnName","columns","realIndexOfName","excelColumnsDictionary","newColumns","found","c","title","previewData","processing","previewLoaded","uploadCurrentTab","reason","saveSamplesFile","options","categories","contents","tags","reals","nominals","subCategories","hasHeaders","delimiter","validateOptions","message","parent","querySelector","toast","simple","action","highlightAction","hideDelay","position","theme","show","forEach","uploadSampleFileForm","$error","required","field","$setDirty","$setPristine","$setUntouched","upload","responseType","timeout","resp","Blob","defaultFileName","saveAs","processId","monitoring","reload","status","evt","progressPercentage","loaded","total","processTraces","customCategories","customTags","fileUploaded","msScrollOptions","suppressScrollX","dropifyConfig","columnSize","selectedCategories","selectedCategoryCodes","websource","$on","stopCheck","stop","isDefined","cancel","undefined","WebSourceController","$mdMedia","$mdDialog","$filter","ModuleService","SourceService","RuleAnalysisService","createFilterConditions","query","selector","lowercaseQuery","lowercase","condition","lowercaseName","includes","array","flag","k","setOnBoundedPageChange","increase","boundedTopicLoading","fetchBoundedTopics","boundedTopics","page","changeList","removedTopics","addedTopics","allTopics","selectedWorkspace","boundedTopicPageSize","searchBounded","fillAllBoundedAndUnBoundedTopics","setClassifierCurrentPage","pagination","last","paginationClassifier","current","addTopic","filter","filteredRemovedTopics","searchFilter","filteredAddedTopics","removeTopic","openTopic","showSimpleToast","text","textContent","setTemplateRules","selecteds","conditionTypes","pageRules","addedRules","rule","ruleQuery","payload","updatedRule","updatedRules","j","conditions","values","m","operator","setViewFlexValue","viewFlexValue","permissions","workspaceId","getFullscreenSessionValue","result","value","sessionStorage","getItem","init","toggleFullscreen","fullscreen","getConditions","dragging","itemCountForOnePage","createProcessing","traceAnalysisUrl","traceList","allUnBoundedTopics","allBoundedTopics","order","searchUnBounded","orderDescending","copyTopics","deletedRules","selectedRule","sites","languages","keywords","siteTypes","contentTypes","unBoundedTopics","totalElements","showCat","selectedSites","selectedLanguages","selectedKeywords","selectedSitetypes","selectedContenttypes","emptyRule","JSON","parse","stringify","dropzoneFields","dropzone","lastDraggedSources","filters","sitetypes","saveProcessing","traceSearchProcessing","topicPageSize","onSearchRule","getTemplateRules","onRulePageChange","step","excludeIds","sortableCardOptions","appendTo","connectWith","delay","distance","forcePlaceholderSize","placeholder","tolerance","event","ui","model","sortable","sorting","setTimeout","$apply","update","e","droptarget","classList","removeSite","site","index","splice","removeSiteType","sitetype","removeCategory","category","removeContentType","contenttype","removeLanguage","language","removeKeyword","keyword","saveKeyword","$event","keywordSaveProcessing","selectedKeywordChange","searchSites","def","defer","getSitesByName","promise","results","searchKeywords","addNeyKeyword","question","charAt","substring","getKeywords","concat","onSearchChange","bounded","list","toLowerCase","searchSitetypes","searchContentTypes","searchCategories","searchLanguages","boundChanged","selected","selectedSiteChange","selectedSitetypeChange","selectedContentTypeChange","selectedCategoryChange","selectedLanguageChange","code","document","focus","boundedTopicPageSizeChange","getRuleLookupMap","addRule","unshift","editRule","showDeleteRuleDialog","deferred","useFullScreen","customFullscreen","instant","body","targetEvent","clickOutsideToClose","locals","answer","deleteRule","deleted","currentRules","exportRules","fn","dl","exportTemplateTopics","rows","columnNames","SITE","SITE_TYPE","CATEGORY","CONTENT_TYPE","LANGUAGE","KEYWORD","row","rowItem","cond","columnName","cv","join","wb","XLSX","utils","book_new","ws","json_to_sheet","book_append_sheet","write","bookType","bookSST","writeFile","allIndex","draggingModel","addedTopicsDragOptions","sort","received","allTopicsDragOptions","showInfo","search","searchClassifier","filtersDefaults","copy","copyClipboard","textField","createElement","innerText","appendChild","select","execCommand","remove","sourceUrlRuleTrace","getTransactionRules","saveWebSource","allChangedTopics","copyWebsource","copyWebSource","createTopic","removeWebSource","setItem","searchRule","showRuleAnalysis","CreateTopicController","setTopicRules","getTopicRules","back","added","saveTopic","workspace","SourceController","getIcon","getRoute","getPermission","sources","color","getCurrentUser","$$report","$settings","searchByDate","dates","dateFilter","hasSubscription","hasAlertUserSubscription","dashboardTemplate","selectedDashboard","reportSettingsList","targetReport","r","reportId","template","activeTemplates","hasPermission","efficiencyReport","Object","keys","cumulativeReport","comperativeReport","scoreReport","selectedReportModules","reportModules","d","notDashboard","dashboardModuleId","moduleId","openDashboardModuleId","openModuleId","dashboardModuleName","moduleTypeId","dashboardClassificationModule","err","operationReport","css","controllerProvider","feedback","assignBy","assignTo","drafted","confirmed","pending","noConfirmed","noAssign","documentIds","view","oid","prefix","toUpperCase","fileId","$$reportWebsources","saveItem","translate","weight","hidden","input","lang","direction","percentage","directive","$timeout","attr","$last","$emit","ReportTemplate1ChartParserService","NGAnnotation","parseGaugeChart","aliases","targetData","facets","count","facetList","facet","f","key","max","positive","negative","neutral","insensitive","toFixed","totalSentiment","realNegative","ratioNegative","realPositive","ratioPositive","realNeutral","ratioNeutral","realInsensitive","ratioInsensitive","aliasCategory","full","alias","a","categoryId","aliasName","parseSentimentConfusions","hasSentimentModule","positiveColor","negativeColor","neutralColor","insensitiveColor","totalColor","items","percent","same","service","ReportTemplate1_2ChartParserService","$utils","navigateCategory","categoryName","parentModuleCategory","isNullArray","setMatrixColors","greenyellow","redyellow","maxTotal","positivePercent","negativePercent","percentDifference","positiveRadius","negativeRadius","getRangeResponseByTrendDate","trendDate","filterByDate","catTrendDate","ranges","dateRanges","x","toDate","filterByDateSentiment","sentimentTrendDate","witchMonth","date","dateObject","Date","getMonth","getFullYear","parseByMonthNew","chartData","sd","ed","moment","datePickerStart","clone","ress","v","y","parseSentimentBasedCategoryData","categoryAlieses","moduleFacet","visibleName","label","docCount","hasSubs","subs","b","fillCategorySentimentVarianceBeforeData","beforeTotalData","beforeTotalCategoryData","categorySentimentVarianceData","parentCategoryName","mainCategory","beforeTotal","beforeCategoryTotal","beforeCount","round1Decimal","beforeCategoryCount","positiveBeforeCount","negativeBeforeCount","neutralBeforeCount","insensitiveBeforeCount","nowTotal","nowCount","positiveNowCount","negativeNowCount","neutralNowCount","insensitiveNowCount","fillCategorySentimentVarianceAfterData","afterTotalData","afterTotalCategoryData","findIndex","nowCategoryTotal","nowCategoryCount","setDirections","directions","positiveDirection","negativeDirection","setRatios","maxNowCount","maxNowCountRatio","useRatio","multiplierValue","Math","positiveNowCountRatio","negativeNowCountRatio","positiveBeforeCountRatio","negativeBeforeCountRatio","negativeChange","abs","positiveChange","negativeChangeRatio","positiveChangeRatio","numb","round","Number","EPSILON","getCategoryAlias","catName","cat","localVariable","localVariables","use","userCategoryCountsRecursive","categoryResults","selectedChartCats","uniqueKeys","getCategoryName","selectedChartCat","uniqueIncludes","getCategoryCountsRecursive","dateRange","counts","year","catsTranslate","categoryid","parentLocalVariable","catAlias","parentCateAlias","getNotificationTooltipKey","getNotificationTooltipValue","getNotificationTooltipColor","parseReportAttributeScoreChart","settings","orderedColumns","formulaOrderList","formulaName","oc","columnInfo","formulaDefinition","currentRow","reportAttribute","attributeRow","score","parseAttributeBasedCategoryChart","facetGroup","rowItems","attribute","itemTotal","parseMatrixChart","xValues","yValues","a1","a2","xStack","yStack","parseSentimentTimelineChart","targetFacet","endDate","chart","height","interpolate","margin","top","right","bottom","left","useVoronoi","clipEdge","duration","controlLabels","stacked","expanded","stream","totalLabel","useInteractiveGuideline","xAxis","showMaxMin","tickFormat","d3","time","format","interactiveLayer","tooltip","headerFormatter","yAxis","zoom","enabled","scaleExtent","useFixedDomain","useNiceScale","horizontalOff","verticalOff","unzoomEventType","ff","foundedPositive","p","getTime","positiveCount","0","1","foundedNegative","negativeCount","foundedNeutral","neutralCount","foundedInsensitive","insensitiveCount","v1","v2","node","founded","keyValue","parseNewSentimentTimelineChart","startDate","sD","eD","dayDiff","diff","rotateLabels","ticks","tickValues","_","isSame","isNaN","insufficientTimelineData","selectAll","style","parseCategoryTimelineChart","reportid","catTrendType","reportSettings","temporalCategoryChartState","yScale","scale","base","dispatch","stateChange","saveUserSettings","disabled","changeState","tooltipShow","tooltipHide","contentGenerator","pId","seriesCount","series","header","axisLabelDistance","lines","callback","pointSize","totalRange","parseFloat","docRanges","docRangeValues","docDateValue","l","toISOString","legend","maxKeyLength","startOf","subtract","2","3","4","5","parseBubbleChart","parseMultiBarChart","refreshDataOnly","deepWatchData","wrapLabels","reduceXTicks","grouped","staggerLabels","parseCategorySentimentVarianceChartData","beforeResponse","afterResponse","targetBefore","targetAfter","visibilityOption","filterChips","moduleFacetBefore","facetBefore","moduleFacetAfter","facetAfter","totalBefore","totalNow","positiveBeforeTotal","positiveNowTotal","negativeBeforeTotal","negativeNowTotal","categoryChange","change","visibility","parseNotificationChart","beforeStartDate","beforeEndDate","afterStartDate","afterEndDate","notifications","totalBeforeCount","beforePositive","beforeNegative","beforeNeutral","beforeInsensitive","positiveBeforePercent","floor","neutralBeforePercent","negativeBeforePercent","insensitiveBeforePercent","beforeCategoryDocumentRate","beforeEmptyFullDocumentRate","contentlessDocCount","beforeNonEmptyDocumentCount","totalAfterCount","afterPositive","afterNegative","afterNeutral","afterInsensitive","afterCategoryCount","positiveAfterPercent","neutralAfterPercent","negativeAfterPercent","insensitiveAfterPercent","afterCategoryDocumentRate","afterEmptyFullDocumentRate","afterNonEmptyDocumentCount","sentimentPositiveVarianceChart","area","sentimentNegativeVarianceChart","totalVarianceChart","categoryDocumentRate","emptyFullDocumentRate","isArea","showXAxis","showYAxis","showLegend","gravity","classes","head","toLocaleDateString","setCategoryChangeChartData","level","startsWith","categoryChangesByLevel","categoryChanges","splitedCategoryChange","setChangedUserChartData","setChangerUserChartData","subFacets","resultData","setAiAproveTrendData","readyResponse","Yapay Zeka","draftedFalse","readyDraftedFacet","draftedFalseFacet","draftedFalseRanges","categoryCountFacet","rangeFacet","setAiMarkingTrendData","draftedFacet","draftedTrueFacet","draftedTrueRanges","aiMarkingRateChart","facetQueries","colors","aiAproveRateChart","draftedTrue","aiAproveRateDateChart","setUserCategoryChart","moduleid","categoryFacet","readyCategoryFacets","readyCategoryCount","setCategoryTimelineData","externalCategories","summarizeDataToNCategories","n","groupOrder","beforeTotalDataCount","nowTotalDataCount","slice","isThereAnyOtherOrderWithoutZero","maxOrder","dataNew","dataSummarize","dataSummarized","shortName","countCategory","reduce","sum","types","control","lastPassDate","userType","parentModule","$$module","selectedWorkspaceId","moduleType","hasPipeline","pipeline","hasClassifier","classifier","hideData","selectedTrainId","hidedata","SampleUploadController","setDropifyConfig","changeConstantCategoriesLanguageChange","messages","default","lg","constantCategoryNames","fillConstantCategories","changeSetCategory","t","toString","mc","mainCat","mainCats","maxMainCat","apply","subCat","upCat","changeSetCategoryCode","mcc","mainCatCode","mainCatCodes","minMainCatCode","min","subCatCode","upCatCode","toggleHeader","renderPreview","column","readonly","custom","exists","some","removeColumn","samples","check","lenght","isDisable","hasData","trainStatus","previous","getTrace","enable","findLastProcessTrace","lastProcessTrace","addCategory","addTag","tag","SampleOverviewController","FileReader","msNavigationSidebarService","toggleCategoryFilter","searchSamples","toggleTagFilter","toggleNominalFilter","fieldName","filterValue","nominalAttributes","toggleClusterFilter","clusterId","resetFilters","cattag","saveSamples","save","newsamples","downloadModuleClassification","copyFilters","downloadJquery","jQuery","param","inputs","each","pair","submit","searching","fixQueryQuotes","catPages","clickedCats","recursiveDeleteCategoriesFromSideNav","deleteItem","numericAttributes","clusters","calculatePageCounts","totalNumber","ceil","allTags","allCategories","allNominalAttributes","setCategoriesToSideNav","moreAndMore","searchPageable","children","recursiveSetCategoriesToSideNav","clearCategories","recursiveClearSidenavCategories","lastpage","setCurrentPage","queryCategorySearch","createFilterFor","toggleCheck","checked","toggleCheckAll","allChecked","removeSelectedSamples","group","class","childrenCount","stateParams","click","icon","badge","nominal","facetValues","fieldTitle","moduleFields","totalCount","stopPropagation","getCategoryTitle","alltags","uploadPermission","deletePermission","isOpen","selectedMode","showNewSamples","searchText","showAll","showAddCategoryDialog","ev","toJson","$watch","wantsFullScreen","showAddTagDialog","showAddSampleDialog","deleteSampleData","deleteCategory","deleteCategoryData","toState","toParams","fromState","fromParams","clearNavigationItems","TestUploadController","fieldType","fieldMap","classification","trainId","SentimentTestController","sentimentify","sentiment","single","statisticsChart","previewLoading","extension","getFileExtension","readAsBinaryString","excelPreview","readAsText","csvPreview","workbook","read","excelToJson","first_sheet_name","SheetNames","worksheet","Sheets","XLS","sheet_to_row_object_array","obj","prop","hasOwnProperty","csvToJson","csv","cfg","parsed","Papa","meta","exec","fileTest","multipleData","pie","cumulative","natural","detail","cls","discreteBarChart","sentimentMultiChart","resize","noData","configuration","editable","viewButtonClass","editButtonClass","mode","modes","history","$watchCollection","filtered","donut","cornerRadius","labelType","padAngle","showValues","valueFormat","axisLabel","showItemDetailDialog","deleteModule","NamedEntityTestController","namedentity","ClassificationTestController","findModuleTrains","moduletrain","moduleTrains","findModuleFields","classify","loading","nominalValueMap","realValueMap","moduleTestCompareMode","moduleSelectedTrainValue","trainIds","classifyCompare","moduleTestResult","ClassificationRulesController","$element","DTOptionsBuilder","DTColumnDefBuilder","querySearch","isDisabled","selectedCategory","positiveTerm","negativeTerm","relevantTerm","irrelevantTerm","allTerms","drink","clearSearchTerm","searchTerm","on","dtOptions","newOptions","withPaginationType","withDOM","withDisplayLength","dtColumnDefs","newColumnDef","changeCategory","getClassificationRules","deleteTerm","request","deleteClassificationRule","isActive","addPositiveTerm","operation","addClassificationRule","positiveTerms","addNegativeTerm","negativeTerms","addRelevantTerm","relevantTerms","addIrrelevantTerm","irrelevantTerms","TopicModelingOverviewController","getCounts","topicmodeling","getTopics","get","multiBarHorizontalChart","moduleWorkspace","showControls","transitionDuration","multibar","elementClick","saveClusteringContextMenu","phrase","saveAudit","RootCauseOverviewController","rootcause","getClassifier","toggleSelectCategory","showMultiBarChart","analysis","fishboneData","ClusteringOverviewController","clustering","getClusters","selectedLabel","documentCount","ClassificationOverviewController","dashboard","setCounts","all","getStatistics","statistics","setStatistics","setCategoryRateTableData","accuracy","precision","recall","p1","p2","r1","r2","setAverageStatistics","childrenCategoryStatistics","totalAccuracy","totalPrecision","totalRecall","childCategory","countOfCategory","setKeywords","kw","getConfusions","breadCrumbs","clickCategoryCategory","recursiveSetBreadCrumbs","clickCategoryAverageCategory","confusions","categoryRateTableData","dynamicSort","property","sortOrder","substr","pageableCategories","clearNavigation","clickAverage","no","categorySearch","lastCategoryRateSort","isNavigationActiveControl","isNavigationActive","findConfusionTooltip","sortCategoryRates","ClassificationEvaluationController","evaluationResults","evaluationResultsCount","selectedPage","pageNumber","rowNumber","lastItemIndex","firstItemIndex","searchActualCategory","searchPredictedCategory","orderType","orderField","foldNumber","actual","predicted","predictedRate","orderClick","searchEvaluation","getNumber","Array","changeRowNumber","changeActualCategory","enterKey","keyEvent","which","pageNo","actualCategory","predictedCategory","getEvaluationCount","startPoint","searchEvaluationRowCount","CreateReportController","ReportService","filterWorkspace","filteredWorkspace","filteredModules","modules","preventDefault","createReport","workspaces","report","definition","validation","removeModule","$","info","showIcon","$index","sortableOptions","handle","forceFallback","ghostClass","fallbackClass","fallbackOnBody","addedSentimentModule","addedNerModule","addModule","moduleAdded","selectedAdded","rank","CreateModulePipelineController","PipelineService","createPipeline","stages","rm","stage","addStage","removeStage","CreateModuleController","createModule","callApi","userWorkspaces","createModuleObject","typeId","getModuleTypeId","route","isnew","indicator","pipelines","classifiers","newModuleForm","CreateController","ClassificationCategoryController","ModuleCategoryService","getCategories","addAttribute","attributeTitles","newAttributeTitle","loaders","addAttributeButton","newAttributeType","addField","addCategoryButton","deleteAttribute","deleteWarning","deleteAttributeButton","deleteField","messageCode","refreshModels","deleteMainCategories","deleteSub1Categories","deleteSub2Categories","selectedDeleteMainCategory","selectedDeleteSub1Category","selectedDeleteSub2Category","searchDeleteMainCategory","searchDeleteSub1Category","searchDeleteSub2Category","addMainCategory","addSub1Category","addSub2Category","addCategorySearch","sub1Category","sub2Category","addCategoryRequest","deleteCategoryRequest","selectedReplace","selectedMainOld","selectedSub1Old","selectedSub2Old","selectedMainNew","selectedSub1New","selectedSub2New","categoryCodes","checkChildrenCategories","addCategories","prepareAddCategoryRequest","addHierCategory","_res","successAddCategoryDialog","parentId","changeAddingSelectMainCategory","changeAddingSelectSub1Category","changeAddingSelectSub2Category","changeAddingMainCategoryText","changeAddingSub1CategoryText","changeAddingSub2CategoryText","categoryAddingSearch","deleteCategoryButton","req","deleteHierCategory","changeDeleteSelectMainCategory","changeDeleteSelectSub1Category","changeDeleteSelectSub2Category","deleteMainCategorySearch","deleteSub1CategorySearch","deleteSub2CategorySearch","existsCatId","mappedCatId","existsCategoryId","mappedCategoryId","replaceable","replaceCategory","changeOldSelectCategory","changeOldSelectSub1Category","changeOldSelectSub2Category","changeNewSelectCategory","changeNewSelectSub1Category","changeNewSelectSub2Category","replaceCategoryButton","getCategoryAliases","toLocaleLowerCase","createFilterForCategoryAlias","addCategoryAlias","aliasSelectedCategory","selectedCategoryAlias","enAlias","trAlias","saveCategoryAliasProcessing","categoryAliasRequest","catId","enLocalVariableId","trLocalVariableId","groupCode","groupId","itemCode","itemId","localization","saveLocalVariables","categoryAliases","findLocalVariables","categoryAlias","removeCategoryAlias","removeLocalVariables","aliasSearchCategoryName","showToast","aliasSelectedCategoryChange","AnalysisOverviewController","analyze","basicConfirmDialog","analyzing","similarity","analysisStatus","paramValue","isTrainable","trainable","getLatestAnalysis","findLatestAnalysis","updateDate","toLocaleString","timeZone","analysisUpdateDate","processMessage","getProcessTraces","jobTypeGroupCode","toggleClusterNoFilter","clusterNo","toggleEditMode","isChecked","toggleEditing","editing","moduleCategories","moduleCategoryTree","reject","getCategoryTree","categoryTree","checkAddCategoryButton","selectedItemObj","clusterNumbers","allclusterNumbers","searchSamplesforSelecting","samplesforSelect","findSimilarity","deleteSampleById","selectedItems","doc","selectedItemIds","deleteSamplesById","deleteSampleDataById","documentId","addCategoryDocumentToModule","multiAddCategory","selectedIdIndexes","deleteCategoryDocumentFromModule","checkSelectedItems","multiRemoveCategory","allclusters","locale","mainCategories","feedbackMode","$$state","requestId","getProcesses","editDocument","showEditDocumentDialog","navigationcss","$$user","roles","$$userRegisterRequest","$$userDemoRequest","$$role","$$workspace","WorkspaceService","showDeleteConfirmDialog","showSaveConfirmDialog","showSuccessDialog","account","role","successTitle","successBody","DeleteWorkspaceDialogController","icons","ok","hide","SaveWorkspaceDialogController","BasicSuccessDialogController","WorkspaceListController","myFilter","setNumberOfPages","open","WorkspaceEditController","appSettings","$integration","setRules","systemRules","getSystemRules","integration","isWebSourceActive","saveSystemRules","activeSources","UserService","$window","showDeleteUserRegisterRequestConfirmDialog","showSearchADUserDialog","showUserFilterFieldDialog","userId","filterFields","activation","lockOutEnabled","deleteUserRegisterRequest","changePass","samlActive","activeUser","userRegisterRequestId","isMailActive","registerRequestId","userName","location","searchADUser","fullName","email","updateUserFilterField","promises","findFilters","responses","DeleteUserDialogController","SaveUserDialogController","SearchADUserDialogController","users","groups","SaveUserFilterFieldDialogController","filterCanBeAdded","addFilter","removeFilter","ngModule","env","window","assign","__env","constant","filterByWorkspace","filterByUserType","filterByRole","isArray","itemrole","UsersController","toastService","$location","savefilterFields","setUrlParams","isUserRequests","userRequestType","isUserRegisterRequestFormActive","userRequestTypeOpen","rightBottomSettingsButton","systemAdmin","serverError","openRequests","openDemoRequests","findUserRegisterRequests","userRegisterRequests","findUserDemoRequests","userDemoRequests","webConfiguration","UserEditController","saveUserAudit","loadWorkspaceRoles","workspaceIds","w","updatedRoles","listByWorkspaceIds","createFilterForWorkspace","createFilterForRole","replaceOther","selectedAnalysisDocuments","analysisDocuments","analysisDocumentOther","selectedReasons","reasons","reasonOther","userRegisterRequest","userDemoRequest","isEmailActive","submitting","analysisdocument","saml","workspaceChange","searchWorkspace","autocompleteRequireMatch","searchRole","resetPassword","createNewUserFromUserRegisterRequest","toggle","idx","saveDemoRequest","saveUserDemoRequest","RoleService","showSearchADGroupDialog","searchADGroup","DeleteRoleDialogController","roleId","SaveRoleDialogController","SearchADGroupDialogController","filterByRoleType","RoleListController","RoleEditController","getAllowedPermissions","allowed","scopes","allow","ModuleListController","$mdSidenav","buildToggler","navID","debug","filterModuleType","allModules","backAllModules","filteredModuleType","workspaceTitle","targetFilter","active","desc","localeCompare","updateModule","management","editObject","editMode","findModules","searchingText","moduleIdFilter","docs","moduleList","totalPage","first","reports","filterSidenav","idTitle","nameTitle","descriptionTitle","isActiveTitle","dateTitle","addPart","ToolbarService","changePasswordDialog","usageStatsDialog","showChangePasswordDialog","showUsageStatsDialog","ChangePasswordDialogController","form","newPassword","newPasswordConfirm","oldPassword","UsageStatsDialogController","replaceAll","now","download","endOf","isAfter","BasicDialogController","showCreateTopicDialog","showBasicDeleteDialog","showFailDialog","entity","removeTemplate","wsId","saveTemplate","deferResponse","showRuleAnalysisDialog","RuleAnalysisController","$mdMenu","modelConditions","ruleSearchModel","documents","numFound","changeDate","createDatePickers","isDatePickerCreatorStarted","afterDatePicker","createDateComponentTurkish","createDateComponentEnglish","picker","add","refreshDatePickersFormat","daterangepicker","Bugün","Dün","Son 7 Gün","Son 30 Gün","Bu Ay","Geçen Ay","Q1 (Bu Yıl)","Q2 (Bu Yıl)","Q3 (Bu Yıl)","Q4 (Bu Yıl)","Q1 (Geçen Yıl)","Q2 (Geçen Yıl)","Q3 (Geçen Yıl)","Q4 (Geçen Yıl)","alwaysShowCalendars","applyLabel","cancelLabel","fromLabel","toLabel","customRangeLabel","daysOfWeek","monthNames","firstDay","Today","Yesterday","Last 7 Days","Last 30 Days","This Month","Last Month","Q1 (This Year)","Q2 (This Year)","Q3 (This Year)","Q4 (This Year)","Q1 (Last Year)","Q2 (Last Year)","Q3 (Last Year)","Q4 (Last Year)","collapsed","readyCount","modifiedResponse","searchConditions","openMenu","milliseconds","getNewChipGroupNumber","chipGroupNumber","getChipTitleKey","showCreateReportDialog","workspacePermissions","showReportDataNoteDialog","showAssignDocumentDialog","showUploadFeedbackPromptDialog","showReevaluateReportDialog","documentNickname","showExportPromptDialog","dataCount","clearEditedFlagDocument","showConfirmDialog","showInfoDialog","dialogType","showWarningDialog","problem","showExportDialog","showAddDialog","showSelectUploadMappingsTemplateDialog","templates","showUploadMappingsConfirmDialog","showSelectPreviewTemplateDialog","showSavePreviewTemplateDialog","columnOptions","templateColumns","selectedTemplate","showUpdateConfirmDialog","patternFilters","queries","generateFilterChipsFromFilter","parameters","chips","catFilter","splitedCatFilter","moduleName","catValues","splitedCatValues","catValue","splitSentiment","splitLevels","chip","operand","titleKey","aspectSentiment","parentString","endsWith","splittedFilter","splitKeyValue","isThisFieldType","isThisFieldSubType","isTextNominal","isNumericNominal","isMultiValuedTextNominal","isMultiValuedNumericNominal","isSameValueType","type1","type2","getPatternFilters","patternFilter","setPatternFilters","getFilterChips","defaultFilterChipsString","setFilterChips","getQuery","setQuery","removeQuery","removeAllQueries","getReport","createReportTitle","lastWorkspace","commonSettings","lastWorkspaceId","otherWorkspaces","showReportDataNote","addStopLabel","confirmTitle","confirmBody","addNonVisibleChangeCategory","updateReport","confirmUploadMappings","uploadMappings","saveFileMappings","warning","selectUploadMappingsTemplate","findUploadFileMappingTemplatesByReport","selectPreviewTemplate","savePreviewTemplate","deleteReport","exportInvalidData","path","deleteReportData","removeReportDocuments","showUploadMappings","assignDocument","reevaluatePrompt","exportPrompt","uploadFeedbackPrompt","getReportModulesList","showSaveReportFiltersDialog","BasicExportDialogController","BasicDeleteDialogController","BasicUpdateDialogController","BasicAddDialogController","UploadMappingsDialogController","getDateValue","literalValue","dateString","getDate","literalFieldTypes","findNameOfLiteralFieldType","uploadAndSaveTemplate","saveAsReportTemplate","addUploadFileMappingsTemplate","SelectUploadMappingsTemplateDialogController","SelectPreviewTemplateDialogController","columnFeatureNameMap","nominal_attribute","predefined_sentiment","original_id","predefined_main_category","predefined_sub_category","datePartNameMap","day","month","SavePreviewTemplateDialogController","updateTemplate","setTemplateName","templateName","saveUploadFilePreviewTemplate","WarningDialogController","AssignDialogController","bool","asssignDocument","assignUser","selectedUsername","note","usernameSearch","usernames","createFilterForUsername","bol","changeAssignedUsername","assignToUsers","SaveReportFiltersDialogController","filterChipsString","saveFilterChipsSettings","ReportCreateDialogController","wsp","ReportNoteDialogController","createdDate","createdBy","updatedDate","updatedBy","saveNote","hasNote","removeNote","UploadFeedbackPromptController","setPeriodVariables","periodTypes","weekDays","setTimes","padLeft","times","days","saveFeedbackPeriod","selectedPeriodModule","period","existPeriod","copyFeedbackPeriods","repeatTime","repeatWeekDay","repeatDay","getFeedbackPeriods","feedbackPeriods","deleteFeedbackPeriod","selectFeedbackPeriodModule","confirmUploadFeedback","feedbackUploadPart","requestFeedbackCounts","feedbackCountRequest","uploadFeedback","feedbackCountResponse","getCount","feedbackModule","feedbackDateRangeStartDate","feedbackDateRangeEndDate","setHours","feedbacks","showUploadFeedbackConfirmDialog","uploadPart","feedbackStartDate","feedbackEndDate","evaluateButtonChecker","allSelected","evaluate","prototype","str","getModuleName","getPeriodType","getRepeatWeekday","weekDay","getRepeatTime","approveSendFeedback","errorMessage","feedbackDateRangeCheck","UploadFeedbackConfirmController","feedbackRequest","moduleFeed","ReevaluateReportController","getReportIndicators","selectedItemChange","targetModule","updateSelectableReportModules","filterModulesByType","moduleMap","moduleMappings","mm","fm","setReplicateModes","reportReplicateFeature","evaluatePristine","requestReplicate","evaluatingModes","evaluateReady","evaluateDrafted","evaluateTrashed","evaluatePending","filterClfModuleIds","setReplicateModules","mappedModule","existingModuleIds","mdl","existsModuleId","mappedModuleId","reportIndicators","clfModules","moduleIndicator","groupMap","g","groupName","annotations","replicateReport","reEvaluateReport","ExportPromptController","exportType","exportContent","reportFields","pivotDropdownOpen","pivotDropdown","pivotDropdownClosed","requestExport","pivotFields","pivotModule","optionalPivotModule","match","pivotable","exportReport","clearData","AnnotationController","editCategory","tagList","updateCategory","sameHierCats","selectedModule","exitEditCategory","getAspectSentiment","sentimentTag","textIndex","removeAspectSentiment","$annotation","startIndex","endIndex","removeAspectSentimentDocument","googleAnalyticsSetAction","tagGroup","charts","updateBy","prepareTags","fillAnnotations","addAspectSentimet","selectedAspectSentiment","selectedText","addAspectSentimentDocument","addProcessing","target","selectedMainCategory","selectedSub1Category","selectedSub2Category","textStartIndex","textEndIndex","addCategoryDocument","moduleChange","deleteCategoryDocument","aspectCategorySize","annotateRefresh","$reject","updateCategoryField","returnedTags","strIndex","sub1Categories","sub2Categories","searchMainCategory","searchSub1Category","searchSub2Category","categorySearchInDropdown","mainCategorySearch","sub1CategorySearch","sub2CategorySearch","mainCategoryChange","sub1CategoryChange","classModules","documentContent","findedAnnotation","annotation","addAspectSentiment","sentiments","categoryTags","close","$close","annotationColors","EditDialogController","$compile","highlightText","indexes","highlightColors","arrIndexes","removeDocument","isReady","isTrashed","readyDocument","ready","unassignDocument","addSentiment","selectedSentiment","addSentimentDocument","annotateOnStartTexts","selectedTagGroup","annotationColorsCodes","existsAnnotatedIndexes","colorcode","onAnnotate","onAnnotateError","onPopupShow","onStartHighlightTexts","ReportQueryParserService","setCategoryFacetFilters","allCatFilter","normalCategoryFilters","groupedCategoriesByModuleId","create","allCatFilters","keyM","valuesM","baseCategoryFilter","groupedResult","sentimentFilterString","andFilter","catORfilter","setNormalFacetFilters","normalFilters","normalORFilters","groupedOrResult","keyValues","ReportNoteService","skipHide","showBasicConfirmDialog","showDocumentNote","BasicTagConfirmDialogController","setOriginalDocumentTags","documentUserTags","setDocumentUserTags","documentUserTagsFacets","documentUserTagsFacet","tagFacet","setDefaultTags","defaultDocumentTags","defaultTags","setActionConfirmed","noteReady","newNote","filterTag","userTags","arrayValues","noteEnter","notes","documentNotes","sendNote","noteProcessing","noteBody","username","addNote","searchTags","addNewTag","saveNewTag","saveUserTag","removeTag","removeUserTag","searchTextChange","selectTag","addDefaultTag","defaultTag","formatDate","readyNote","completeAction","ReportAssignmentService","assignee","assignment","assignedTo","assignedBy","createDate","assignments","ReportAspectAnnotationService","ReportDocumentAspectAnnotationDialogController","setUnReadyAudit","setUnPendingAudit","setDraftAudit","changeAspectSentiment","sentimentValue","aspectCategories","foundedAspect","aspect","generateSentimentChart","targetCategoryId","findCategoryId","categoryRequest","categoryIds","insertable","c2","generateCategories","cats","rejectClicked","removeAspectSentimentLoading","targetCategory","sentimentChart","foundedPart","closePopup","removeAspectSentimentPromise","removeCategoryPromise","ReportDocumentAnnotationService","unflag","mdContent","getElementById","setAttribute","showReportDocumentAnnotation","ReportDocumentAnnotationDialogController","ReportDocumentService","closed","setBasicAnnotationParams","documentCategories","dashboardCategories","trashDocument","trash","unTrashDocument","classifierType","isCategoryAssignable","readyPermission","anonationReadonly","regulateRemovingCategoryDocument","aspectSentimentRemove","annotateText","changeBasicAspectSentiment","categoriesOfCurrentModule","notFeedback","highlightedText","isCategoryD","tempCategories","sentimentsWithValues","getHeader","foundedSameIndexInterval","selectBasicMainCategory","selectBasicSub1Category","addBasicCategory","changeDefaultCategorys","categoriesD","defaultModule","isLeafCategory","leafCategoryLevel","sameCategory","ReportSettingsService","showReportSettingsIndicator","showEditReportModuleClassifierSettingsDialog","reportModule","nominalFields","NERReportModule","extractLeafCategories","leafCategories","parents","Set","has","NERModuleCategories","showReportFacetOrderDialog","showEditReputationStateWidget","showEditReputationScoreWidget","formulas","openTopBottomPreview","alertSetting","showReportEditFormulaDialog","formula","settingId","formulaType","settingType","showReportEditRuleDialog","fields","showReportFieldAliasDialog","showReportFieldValueAliasDialog","showReportCategoryThresholdDialog","showReportCategoryLimitDialog","showReportSettingsDialog","askTitle","askBody","showFormulaTableSettingsDialog","showFilterCategoriesDialog","showAddDocumentTagDialog","showAddPeriodFieldDialog","datePeriodSettings","reportSettingsIndicator","reportFacetOrderDialog","editReportModuleClassifierSettingsDialog","reportEditReputationStateWidget","reportEditReputationScoreWidget","reportEditFormulaDialog","reportEditRuleDialog","reportReportFieldAliasDialog","reportReportFieldValueAliasDialog","reportCategoryThresholdDialog","reportCategoryLimitDialog","updateReportSettings","saveReportSettings","updateFormulaTableSettings","filterCategories","addDocumentTag","addPeriodField","getDatePeriodSettings","ReportSettingsReportFieldAliasController","getReportFieldsAndReportFieldAliases","getReportFieldAliases","filterValueSearch","reportFieldAliases","reportFieldAlias","fieldId","reportField","searchFieldName","selectedReportField","selectedReportFieldAlias","saveOrUpdateReportFieldAlias","enFieldAlias","trFieldAlias","saveReportFieldAliasProcessing","reportFieldAliasRequest","selectedReportFieldChange","removeAlias","ReportSettingsReportFieldValueAliasController","getReportFieldsAndReportFieldValueAliases","getReportFieldValueAliases","reportFieldValueAliases","reportFieldValueAlias","fieldValue","itemValue","selectedReportFieldValue","selectedReportFieldValueAlias","saveOrUpdateReportFieldValueAlias","saveReportFieldValueAliasProcessing","reportFieldValueAliasRequest","reportFieldsCategoryValues","reportFieldValues","selectedReportFieldValueChange","ReportSettingsCategoryThresholdController","findReportCategories","findReportCategoryThresholds","thresholdValue","categoryThresholds","setCategoryThresholdInCategory","threshold","searchCategoryName","saveCategoryThresholdProcessing","saveCategoryThreshold","categoryThresholdRequest","removeThreshold","removeCategoryThreshold","ReportSettingsCategoryLimitController","findLimitSettings","findReportLimitSettings","limitSettings","limit","saveCategoryLimit","saveCategoryLimitProcessing","validSettings","checkModules","successText","itemCanBeAdded","addLimit","removeLimit","ReportSettingsIndicatorController","changeSelectedModule","selectedModules","findReportModules","saveIndicators","saveIndicatorsProcessing","feedbackModuleName","setExistsReportModules","selectedDisabled","ReportFacetOrderController","isOrderActive","findFacets","reportFacets","output","goUp","goDown","saveOrder","saveFacetOrders","ReportModuleClassifierSettingsController","saveClassifierSettings","classificationFields","reportFieldName","moduleFieldName","nerSelected","nerMatching","reportv2","saveReportModuleSettings","addClassificationField","moduleField","realModuleFields","numericReportFields","nominalModuleFields","nonNumericReportFields","removeClassificationField","classificationField","setNerMatching","selectedNERcategories","selectedNERMatchingTypes","nerMatchingReportField","nerCategoryNames","nerMatchingTypes","getNerMatchingTypes","matchingTypes","findReportFieldsByType","setNerMatchingReportField","extentionSplit","extention","NERavailable","ReportEditReputationScoreWidgetSettingsController","setColumnOrder","reportAttributeScoreChart","nextItem","reportAttributeScoreSortItem","orderBy","reportAttributeScoreSortItemOrder","formulaSettings","orderTypes","dashboardSettings","cumulativeReportModel","saveReportSettingsLoading","addFormulaToOrderList","selectedFormula","removeFormulaFromOrderList","ReportEditReputationWidgetSettingsController","setAttributeNameSortList","attributeBasedCategoryChart","attributeNameSortList","catText","getCategoryText","filterCategoryIds","attributeNameSortItem","selectedCategorySortItem","createFilter","categoryLevel","categoryFields","catLevels","limits","selectedCategoryChangeSortItem","categoryLevelChanged","addFilterCategory","removeFilterCategory","grandparent","BottomSheetFormulaController","$mdBottomSheet","listItemClick","clickedItem","TopBottomPreviewController","hexToRGB","hex","addopacity","opacity","headerNotes","footerNote","updatedLinkText","ReportEditFormulaController","recursiveFindProbability","probability","dayNames","parseMarkedCategories","marked","generateStringCats","tempCats","markedCategories","caty","newTempCats","setFormulaTypes","formulaTypes","pageHeader","attributeLocked","reportDocumentList","textualComparisonTypes","numericComparisonTypes","categoryOperations","categoryOperationsSingle","resultModuleCategories","regexFlags","attributeFields","showFormulaExplanation","alert","calculatePercentageForCategorySentimentTooltip","markedList","marking","recursiveResult","getFilteredFacetTitle","tr","en","getFacetValueAlias","valueAliases","valueLocalVariable","activateFormula","saveFormula","saveFormulaProcessing","updateFormula","updateRepeatType","testFormula","validateFormula","valid","causeMessage","hidetag","testScoreAttr","testScore","ReportEditRuleController","ruleModules","checkSingle","setModuleCategories","comparisonTypeChange","comparisonType","addCondition","newCondition","fieldUsage","comparisonValue","addResult","newResult","task","ifSingleText","removeCondition","removeResult","setConditionFields","saveRule","saveRuleProcessing","ReportSettingsControlller","ReportFormulaTableControlller","findFormulaTableValues","findFormulaTableSettings","formulTable","fieldX","selectFormulTableXField","fieldY","fieldHierarchy","connectedFieldValues","formulTableXFieldValue","formulTableXFieldValues","formulTableXDefaultField","formulTableXFieldConnectedFields","formulTableYFieldValue","fieldHierarchyXField","fieldHierarchyYField","stringReportFields","categoryReportFields","addFieldHierarchy","getFieldHierarchyFieldTitle","deleteFieldHierarchy","deleteConnectedFieldValues","fieldXValue","selectFormulTableXFieldValue","formulTableConnectedValue","fieldXConnectedFields","defaultXField","selectFormulTableXDefaultField","selectFormulTableXFieldConnectedFields","saveFormulTableSettings","saveFormulaTableSettings","FilterCategoriesControlller","filteredCategoryIds","AddDocumentTagControlller","addTagToList","AddPeriodFieldController","saveDatePeriodSettings","saveDatePeriodSettingsLoading","removeDatePeriodSettings","deleteDatePeriodSettings","ReportHistoryService","showReportHistoryDialog","showDocumentHistory","ReportHistoryController","getReportDocumentAudits","audits","showDetail","setDate","setReadyAudit","setPendingAudit","setUpdateAudit","handleReady","reportWorkspaceId","showWebContentDocumentDialog","singleClassificationModule","showReportWebContentDocument","addCategoryId","sentimentRate","updateSingleModuleCategory","isBasicCategoryAdded","ReportWebContentDocumentDialogController","unReadyDocument","unready","handleReadyButton","isPending","ReportDataOrganizationService","showReportFieldDialog","showMappingReportFieldConfirmDialog","mappingReportFields","replaceCategoryValue","controlResponse","replaceableCount","oldValue","oldFieldValue","newValue","newFieldValue","changeReportFieldCategoryValue","deleteReportField","updateReportField","saveReportField","mapReportField","mapReportFields","deleteCategoryValue","deletableCount","BasicReplaceDialogController","EditReportFieldDialogController","findFormulaValue","selectedFormulaValue","selectedColor","filterable","dashboardField","horizontalComparisionField","verticalComparisionField","userFilterField","selectFormulaValue","mainType","currentType","standartNormalCurve","chartId","refresh","drawChart","am4core","context","am4charts","XYChart","logo","mean","getMean","getSD","calculateChartData","dateAxis","xAxes","ValueAxis","renderer","grid","strictMinMax","range2","axisRanges","stroke","strokeWidth","strokeOpacity","fill","valueAxis","yAxes","cursorTooltipEnabled","visible","LineSeries","dataFields","valueY","valueX","tooltipText","pointerOrientation","background","fillOpacity","padding","valueAxis2","syncWithAxis","opposite","series2","isUserRestricted","circleBullet","bullets","CircleBullet","circle","radius","adapter","dataItem","propertyFields","secondCircle","createChild","Circle","getIndex","events","animateBullet","cursor","XYCursor","maxTooltipDistance","snapToSeries","bullet","dataContext","animation","animate","from","to","ease","circleOut","object","sqrt","sq","pow","NormalDensityZx","Mean","StdDev","exp","PI","minSideDistance","maxSideDistance","extraDistance","curveForValue","dp","verticals","vertical","shuffleProperties","value2","new_obj","getKeys","shuffle","arr","equals","random","useTheme","am4themes_animated","StackedBarChartDirective","am4lang_tr_TR","categoryAxis","CategoryAxis","labels","wrap","maxWidth","axis","cellWidth","pixelWidth","ColumnSeries","categoryX","sequencedInterpolation","width","labelBullet","LabelBullet","locationY","hideOversized","dispose","SentimentCategoryChartDirective","barclick","maxHeight","minVisibleText","maxCategoryCount","floatingPointVisibilityEffect","lighten","positiveTooltipText","negativeTooltipText","columnCount","columnHeightPercent","wBig","wSmall","hBig","hSmall","firstPad","arrowPad","numberFormatter","numberFormat","inversed","minGridDistance","dy","tooltipX","changeX","beforeX","categoryY","tooltipHTML","data_","positiveNowCountLabel","fontSize","fontWeight","truncate","horizontalCenter","dx","arrow_Neg","Triangle","verticalCenter","paddingLeft","arrow_Neg2","positiveNowCountChangeLabel","clustered","negativeNowCountLabel","paddingRight","negativeNowCountChangeLabel","behavior","CategoryChartDirective","maxNowCountCategory","autoTextColor","nowCountLabel","nowCountChangeLabel","RadarChartDirective","RadarChart","filteredData","RadarSeries","nickname","zIndex","ColorSet","general","allDataNickname","RadarCursor","Legend","PieChartDirective","PieChart","valueLabels","textAlign","myColors","innerRadius","pieSeries","PieSeries","getColors","legendSettings","valueText","hiddenState","properties","endAngle","startAngle","alignLabels","ChartDirective","maskBullets","align","defaultState","getFillFromObject","series1","column1","bullet1","interactionsEnabled","bullet2","bullet3","bullet4","LineChartDirective","DateAxis","calculateUniqeuDatesAndAddEmptyValues","createSeries","scrollable","itemContainers","processOver","processOut","dateX","selectedTimelineValue","fieldYNickname","strokeDasharray","tensionX","segment","segments","hoverState","states","dimmed","hoveredSeries","toFront","setState","bulletsContainer","uniqueDates","keywordschartDirective","am4plugins_wordCloud","WordCloud","WordCloudSeries","rotationThreshold","maxCount","minWordLength","angles","maxFontSize","excludeWords","randomness","word","passOptions","rightClickFunc","HorizontalBubbleChartDirective","others","bubbleClick","numberWithCommas","arc_ratio","onArc","arc_space","font_family","font_weight","Point","dist","vect","norm","mult","center","surface","Packer","circles","ratio","solve","compute","in_rect","h","bounding_circle","x0","y0","x1","y1","xm","ym","theta","asin","bounding_r","cos","corner","c1","u","A","B","C","placed","unplaced","lambda","lambda_min","corners","d_min","lambda_max","i_max","tmp_bounds","placement","call","bounds","minRadius","maxRadius","canvas","draw_result","packer","draw_circle","ctx","beginPath","arc","mx","my","closePath","getContext","margin_factor","zx","zy","strokeStyle","fitText","lineHeight","pop","shift","line","words","measureWidth","measureText","lineWidth0","trim","Infinity","lineText1","lineWidth1","textRadius","getData","json","datas","ps","summaryDocCount","summarySentiments","getCircleData","pieData","radiuses","minr","maxr","changeRatio","setMinMaxRadius","numberOfCategories","circleRadiuses","draw","sudodata","packy","sortLevel0","orders","r_s","ind","ind2","nodes","ind_","tip","html","tipText","svg","append","pies","enter","pie_","dat_","dat","layout","dd","newDat","pied","reverse","shiftRight","angleRatio","miny","minX","maxX","pieG","outerRadius","arc2","oo","bubbleChartData","mouseover","mouseout","GaugeChartDirective","chartt","barClick","externalCategoryCount","maxPercent","cursorOverStyle","MouseCursorStyle","pointer","NumberFormatter","RadarColumnSeries","InterfaceColorSet","getFor","cornerRadiusTopLeft","radarColumn","series5","series4","series3","DateStackedBarChartDirective","calculateTotals","calculatePercent","circle_radius","marginTop","axisFills","openValueX","openBullet","locationX","closeBullet","arrow_Pos","arrow_Pos2","arrow_Pos3","arrow_Pos4","filllOpacity","openBullet2","closeBullet2","arrow_Neg3","arrow_Neg4","arrow","arrow2","arrow3","arrow4","ratingChanged","adaptLabelFontSize","diameter","labelAvailableWidth","labelWidth","tickConst","tickSizeDependent","xPadding","getComputedTextLength","ordinal","bubble","pack","size","dataM","offset","arcGs","main","arcEnter","ReportTestController","texts","textCategories","searchedText","test","classifications","generateNers","ners","parseCategories","newCategory","highlightCategoryContent","part","highlightingIsOn","colorCode","textColor","unHighlightCategoryContent","ReportSettingsController","addIndicator","findReportSettingsIndicators","newRule","addFormula","isDocument","newFormula","addSelectedSortField","sortableFields","removeSelectedSortField","removeIndicators","indicators","process","editIndicator","findDashboardTemplates","dashboardTemplates","langValue","findReport","findedTemplates","selectedDashboardTemplate","findSortableFields","f1","allowSort","findReportFields","setReportFields","findThresholdSettings","findReportThresholdSettings","minCategoryProbability","thresholdSettings","minCatProbsByLevel","levelMinCatProbs","thresholdLevelProbability","er","updateThresholdSettings","thresholdSettingsProcessing","requestThresholdSettings","saveOrUpdateThresholdSettings","updateLevelMinCatProbability","thresholdLevel","setThresholdLevelProbability","saveSimilarityRate","saveSimilarityProcessing","similarityRate","getSimilarityRate","horizontalComparisonField","horizontalField","verticalComparisonField","verticalField","dashboardFieldOrder","dashboardFacet","dashboardFacetField","findReportModuleSettings","findNERModule","nerModules","reportModuleSettings","updateReportModule","oldReportModule","notDashboardModules","addDefaultDateUpdatedSettings","updateReportDefaultDateSettings","defaultDate","afterDatePeriod","dateStart","dateEnd","toJSON","beforeDatePeriod","beforeDatePicker","defaultDatesSettingsObject","periodType","beforeDatePeriodType","beforeDatePeriodStartDate","beforeDatePeriodEndDate","afterDatePeriodType","afterDatePeriodStartDate","afterDatePeriodEndDate","findReportDefaultDateSettings","beforeDatePickerPlaceholder","afterDatePickerPlaceholder","findReportDefaultTemporalSentimentOption","defaultTemporalSentimentOption","temporalSentimentOption","updateReportDefaultTemporalSentimentOption","updateReportFacetOrder","oldFacetOrder","selectedFacetOrder","updateReportTemplate","oldReportTemplate","updateHorizontalReportField","updateDashboardFacetField","saveReport","isAnyReportWithSameName","updateVerticalReportField","updateDashboardFilter","oldReportFieldId","reportSettingsIndicators","refreshIndicatorProcessing","indicatorsProcessing","findDeletedDocumentsBatches","findDeletedDocumentsBatch","deletedBatches","filterModulesByPermission","moduleWorkspaceId","permissionWorkspaces","permissionWorkspace","clickable","recycleDeletedDocumentsBatches","batchId","recycleDeletedDocumentsBatch","filterReportsByPermission","findReports","findRules","removeRule","removeFormula","deleteFormula","existingState","findFormulas","createDocumentFormula","createAttributeFormula","isNew","googleAnalyticsSetPageview","googleAnalyticsSetScreenView","userSettings","documentNicknameTr","documentNicknameEn","notSelected","selectedDashboardTemplates","dateFormat","datePickerLanguage","Mon","Tue","Wed","Thu","Fri","Sat","Sun","This Week","January","February","March","April","May","June","July","August","September","October","November","December","facetOrder","openDashboardSettings","dashboardFilter1","dashboardFilter2","dashboardFilter3","saveReportSettingsProcessing","removeIndicatorProcessing","dataProcessPeriods","setInterval","filterReportCategories","openEditReputationStateWidget","openEditReputationScoreWidget","openEditReportModuleClassifierSettingsDialog","selectedReportModule","openFacetOrderDialog","openEditFormulaDialog","openEditRuleDialog","ruleFields","openReportFieldAliasDialog","openReportFieldValueAliasDialog","openCategoryThresholdDialog","openCategoryLimitByModuleDialog","dashboardTemplateSettingsFunc","openModule","saveUserCommonSettings","href","saveFromApply","ReportController","subscription","subscriptionProcessing","func","unsubscribe","subscribe","ReportOverviewController","multiChartGetConfig","classificationNoSentimentChart","classificationSentimentChart","colorMultiBarChart","multiBarCharts","resetChart","changedData","goToCrumb","chartIndex","crumbIndex","newData","chartCrumbs","breadcrumb","chartDatas","depth","changeWhichPie","ix","whichPie","getDashboard","dateField","dateFields","dateEnable","toggleDateChanged","unix","toggleClearDateFilter","chartxs","isLast","is","even","chartbr","changePie","disableChart","classificationChart","sidenav","disable","encodedReportId","filterFieldName","filterFieldValue","myElement","removeClass","findDashboardCategory","myElements","getElementsByName","addClass","renderEnd","showLabels","valueFormatter","ReportDataWebController","getWebsources","topicsInclude","getTemplates","allWebsources","setWebsources","websources","foundInAddedList","showConnectWebsourceToReportDialog","addWebsource","removeWebsource","openSource","topicSortableCardOptions","templateIds","bindTemplate","ReportDataUploadEditController","deleteObject","confirmAll","dataSummary","allConfirmed","addLiteralField","literalField","fieldHeader","mappedName","mappedField","dateValue","middayValue","datePickerFormat","literalFields","removeLiteralField","el","addDeletedField","deletedFields","addFieldMapping","fieldMapping","suffix","mappedType","originalFieldType","mappedValues","mappedValue","fieldMappings","mapToField","mappedObject","resetFieldMapping","manualMap","fieldsSummary","convertFieldType","resetDataSummaryField","initialField","initialDataSummary","openTemplateDialog","applyTemplate","deletedField","fieldToDelete","findField","editedField","findFieldsSummaryValues","fs","extractReportFieldsSummary","fieldInfos","setMappedFields","fieldSummaryOfType","getFieldSummaryOfType","fieldWithSameTitle","relevantFieldType","findFieldTitles","fieldTypes","createReportFieldsAndDataSummary","statFieldTypes","statFields","fieldOfType","searchPromises","facetSearch","getUploadFileSummary","updateSummaryFieldTypes","fieldFacets","foundFieldInfo","setNonEditableFields","createDatePicker","newField","singleDatePicker","showDropdowns","minYear","maxYear","getDatePickerLocale","reportProblem","chosenEditableFields","editableFields","indicatorCount","indicatorModules","existingDateCount","literalDateCount","duplicateFieldName","findDuplicateFieldName","mappedToNumericFields","previewMappings","keyCounter","300","301","302","303","310","311","312","313","400","500","600","findIndicators","setLiteralFieldTypes","facetFieldTypes","numericFieldTypes","dateFieldTypes","stringFieldTypes","ReportDataUploadController","setWebSourceActive","getReportSelectables","useQueue","uploadFileWithQueue","previewWithoutQueue","findDateFormats","dateFormats","findTimeFormats","timeFormats","addDateFormat","newFormat","addFormatMessage","addDateFormatProcessing","addTimeFormat","addTimeFormatProcessing","isMultiValuedCategoryField","reportCategories","selectTemplate","findUploadFilePreviewTemplatesByReport","generateOptions","hasProblem","col","numeric","multiValued","delimeter","timeFormat","reportFieldTitles","reportCategoryTitles","reportTextTitles","reportMainCategoryTitles","reportSubCategoryTitles","reportTexts","reportSelectables","getEditDistance","matrix","previewQueue","previewRows","uploading","rowData","similarityMeasured","measureSimilarities","similarityObjects","closestTypes","closestType","isSimilar","distances","minDist","saveFile","prepareAndValidateFile","isFileValid","uploadDataWithQueue","uploadFileWithoutQueue","isThereAlreadyFieldWithSameName","columnIndex","originalTitle","columnFeature","dateParts","processingMonitor","resultJson","errors","dataOptions","uploadFileDataParams","uploadFileDataQueue","invalidDataCount","firstNRows","editFile","checkDuplicateFieldsWithSameName","columnHeaders","hasMultipleFieldsWithSameFeature","hasMultipleFieldsWithSamePart","columnParts","hasInvalidDatePartCombination","getMessage","indicatorColumns","queueActive","highlight","defaultFacet","showSourceScreen","showSource","processTraceStatus","finished","rr","errorFound","DataSummaryController","findFileUploadInfo","uploadFileInfos","infos","invalidRowCount","uploaded","uploadStatus","uploadedRowCount","totalRowCount","uploadFailedRowCount","uploadRatio","uploadPercentage","fileUploadInfo","pageSize","exportFileData","getReportWebSources","pageNum","webSourceViewPermission","getReportTemplates","reportWebSources","showFileInfo","findFileMappings","filePage","setWebsourceCurrentPage","reportCode","unbindTemplate","ReportDataOverviewController","base64","showReportField","filteredReportField","hideAsTag","uploadReportFeedback","reevaluateReport","removeDocuments","isFlatModeActive","setFilteredFacets","filteredFacets","childs","toggleFacetFilter","child","sideNavEnabled","ctrlKeyPressing","filterChip","foundedFilters","groupCtrlCount","filterCtrlChip","catCtrlFilterChip","sentimentFilter","findChartLevel","foundedSameLevelFilter","catFilterChip","searchFromStart","getChipCat","removeFacetFilter","removingFilters","extraFilters","contentLengthFilter","categoryCountFilter","appylyFilterFlexValue","setPatternFilter","removePatternFilter","postKeys","toggleFeedbackMode","trashed","toggleFlatMode","showSimilar","similarityMode","clickNoConfirmedMode","searchData","clickDraftedMode","clickConfirmedMode","clickTrashedMode","clickPendingMode","clickAssignToMode","clickAssignByMode","clickNoAssignMode","setFeedbackModeFromQuery","feedbackType","assignmentType","showDocumentDetail","focusMdContent","showDocumentAnnotation","untrash","unAssignDocument","unassign","showAssignContent","sortByFieldName","saveLastSortableField","clearDate","setEndDate","setStartDate","datePicker","isDateField","isNotDateField","titleIsNotContent","getIsFlatModeActive","excludedKeys","patternValue","storeFilters","goToParentDocumentClicked","goBackDocumentQuery","filterQueryChip","setFacetFieldsQuery","gap","encodeFilters","setFacetParams","showLogs","periodSearchActive","googleAnalyticsSetTiming","setDocumentsThatDontHaveContents","setupFacets","groupNerFacets","setArrayNominalAttributes","setArrayAttributes","setContentHighlight","parseDocuments","parseDocumentsD","dataCopy","eliminateFacetFilteredValues","measureTimings","highlights","contentKey","generateContentHighlight","limitedHighlightText","limitedText","baseText","strArray","limitArray","nerFacets","sortFacets","attributes","singularizedAttributes","attributeTemp","backgroundColor","getTextColor","valueObj","attributeSingleValueCopy","singularizedNominalAttributes","nominalAttributeTemp","nominalAttributeSingleValueCopy","filteredValue","sidenavQueryFunc","sidenavQuery","sidenavQueryFuncLoading","facetSize","openSaveDefaultReportFiltersDialog","targetChartData","reportModuleIds","foundedFacets","findRecurisiveFacetByValue","chipCat","foundedTarget","ss","cFilter","foundedFacet","foundedChips","currentParent","rf","classificationModules","sentimentField","hideTags","hidecattag","hideCategoryTags","parseNotes","markedListD","isConfirmedAttribute","thumbsUp","categoryModels","moduleCategory","catString","extractSentimentValueInCategoryString","regex","lastIndex","groupIndex","pageCount","contentFields","startContentField","categoryTextTooltip","includedContentFields","contentField","colorsUnhighlight","filterSidenavFacet","facetMultiple","foundedFilter","levels","getSortableFields","date_dt","isReportContainDateField","getSortableFieldName","sortableFieldName","sortableField","toggleSort","sortOrders","setQueryParameters","decode","logs","encodedFilters","encode","saveBookmark","allBookmarks","bookmarks","generalBookmarks","newBookmarkTitle","deleteBookmark","goToBookmark","dateTypes","prepend","paramSearchByDate","languageDatePicker","setUserHaveReadyPermission","userHaveReadyPermission","setSingleClassificationModuleId","getPreviousViewDate","previousViewDate","afterValue","getDatePickerValue","dateRangesEn","getYear","opens","showTags","showCategoryTags","showDocumentSentimentDetailChart","translations","SELECT_ASSIGN_USER_PLACEHOLDER","UNASSIGN_DOCUMENT","hasTrainedModule","orBundle","rangeFilterStartEndValues","selectedRangeFilter","selectedRangeFilterCategory","bookmarkSidenav","pickerModel","feedbackTypeOpen","assignmentTypeOpen","moreAndMoreCount","showField","bind","keyCode","getCategoryChipAlias","getAttributeAlias","addRangeFilter","startValue","endValue","facetMoreAndMore","allFacets","showMoreAndMore","moreAndMoreLoading","moreAndMoreSearch","filterNominalAttribute","openTagUrl","thumbUp","confirmClassification","thumbDown","unconfirmClassification","goToParentDocument","parentIds","getColor","bgColor","goBackToDocument","isUserTagsExist","calculatePercentageForSentimentTooltip","calculatePercentageForTotalSentiment","getContentLimit","span","removePeriodFilter","periods","saveGeneralBookmark","newGeneralBookmarkTitle","showHistories","isLater","str1","str2","Bu Yıl","Geçen Yıl (Tümü)","Bu Yıl (YTD)","Geçen Yıl (YTD)","Önceki Yıl (Tümü)","This Year","Last Year (All)","This Year (YTD)","Last Year (YTD)","Previous Year (All)","DataOrganizationController","changeSelectedCategory","fetchingCategoryValues","categoryValues","changeMapperSelectedCategory","selectedMappingExistsReportField","changeMapperCategory","fetchingMapperCategoryValues","categoryMapperValues","changeMappedSelectedCategory","selectedMappingMappedReportField","changeMappedCategory","categoryMappedValues","queryInCategoryMappedValues","mappingButton","existsValue","defalutMapValue","defaultMapSearchText","defaultMappedValue","existReportFieldName","mappedReportFieldName","mappingFieldValues","deleteExistingReportFieldValues","defaultValue","clickChangeCategoryValue","changingCategoryValue","replaceOperation","selectedCategoryValue","categoryNewValue","selectedNewCategory","categoryNewField","clickDeleteCategoryValue","deletingCategoryValue","deleteOperation","clickChangeTagValue","changingTagValue","selectedTag","tagOldValue","tagNewValue","clickDeleteTagValue","deletingTagValue","fieldTitleA","fieldTitleB","comparison","allReportFields","refreshReportFields","classCategories","manipulatable","removeReportField","removeReportFieldButton","updateReportFieldButton","addReportField","addReportFieldButton","fetchingTagValues","deletingCategoryValues","deletingTagValues","tagValues","defaultMapValue","dataOrganization","calculateFilteredFacets","ReportDashboardTemplate5","changeDashboard","oldDashboard","getCategoryChangeOperationResults","categoryChangeOperationResults","lastResultDate","lastResult","selectedCategoryChangeModule","classificationModulesModules","setAvailableOperationResults","selectedCategoryChangeYear","selectedCategoryChangeMonth","selectAvailableYear","setCategoryChangeChart","generateYearsAndMonths","years","months","readyQuery","setReadyQueryParameters","setCharts","onlyModuleFacets","setAiMarkingRateChart","setAiAproveRateChart","setAiAproveRateDateChart","aiMarkingTrend","aiMarkingTrendData","replicatePrompt","noTrainedModule","activeDashboardTemplates","activeTemplateSize","categoryOperationMode","selectedAiRateChart","selectedAproveRateChart","printPage","print","exportExcel","tableName","elt","table_to_book","sheet","categoryChangeOperationTitles","categoryChangeOperationSuccessTitles","operationSentiments","categoryChangeOperationRateTitles","getCategoryChangeOperationValue","filterModuleAndDate","groupFilter","getCategoryChangeOperationScoreValue","availableOperationResults","availableYears","availableMonths","categoryChangeOperationCats","totalResult","sumSum","sumWF1","sumWPrec","sumWRec","wf1Total","wprecTotal","wrecTotal","calculateCategoryChangeSuccessRate","categorySuccessRateOperation","successRateLoading","saveCategorySuccessRates","downloadAmchart","elementt","tagName","fontFamily","saveSvgAsPng","ReportDashboardTemplate4","setCategoryTimelineChart","setAiAproveTrend","setChangedUserChart","setChangerUserChart","setCategoryChangesChart1","categoryChangesChart1Level","setCategoryChangesChart2","categoryChangesChart2Level","changerUserChartData","changedUserChartData","categoryTimelineData","userCategoryChart","aiAproveTrendData","operationReportModel","selectedDateBasedCategories","selectedTrendChart","selectedUpdateChart","categoryChangesChart1Disabled","categoryChangesChart2Disabled","categoryChangesChart2EnterFunc","categoryChangesChart1EnterFunc","categoryChangesChart2","categoryChangesChart1","addToSelectedChartCats","existChartCat","removeSelectedChartCat","getCatName","catid","saveDateBasedCategorySettings","ReportDashboardTemplate3","searchTimeline","formulaTableXAxisLimit","selectedOtherTimelineValue","selectedStandartNormalCurveValue","findKeywords","beforeQuery","setBreadCrumbs","comparativeSearch","findFilteredTableColumn","beforeResult","afterAllDataResponse","allData","setGaugeChart","setConfusions","radarChartData","allDataTargetChartData","apiResponse","calculateRadarChartData","findNicknameForYField","formulaTable","calculateTableFields","getLastSelectedChartValues","setFormulaTimelineChart","checkContainer","topScroll","leftScroll","calculateStandartDistrubutionCurveData","setStandartNormalCurveChart","reportKeywords","keywordDocumentLimit","addStopLabelGroup","findStopWords","getStopWords","stopWords","getStopWordsProcessing","findStopLabels","getStopLabels","stopLabels","getStopLabelsProcessing","addStopWord","stopWordToAdd","regexp","RegExp","addStopWordProcessing","putStopWords","addSingleStopLabel","stopLabelToAdd","addStopLabelProcessing","postStopLabels","deletedKeywordList","deletedKeywords","addStopLabels","toAdd","stopLabelsToAdd","removeStopLabels","stopLabelsToRemove","deleteStopLabels","removeStopWords","stopWordsToRemove","deleteStopWords","setChartCategoryAliases","isTableColumnFiltered","columnFilteredValues","columnNotFilteredValues","tableColumns","addEventListener","scrollHeight","scrollTop","scrollLeft","nickName","keyFacetGroup","valueFacetGroup","roundNumber","sig","filteredTableColumn","selectableFormulaTableConnectedFields","selectableFormulaTableConnectedFieldsNames","tableRows","tableAfterValues","tableBeforeValues","tableTotalAfterValues","tableTotalBeforeValues","filteredFormulaTableValue","existTableColumnFacetGroup","valueAfterFacet","formulaValue","valueBeforeFacet","valueTotalAfterFacet","valueTotalBeforeFacet","lastValue","valueOtherFacet","filterField","existTableColumnFacet","clickBreadCrumb","breadCrumb","tempLevels","foundedLevels","eliminateSameModuleAndLevel","f2","gaugeCategoryData","gaugeChartNoDataAvailable","sortConfusions","second","clickGaugeChartItem","lastBreadCrumb","gaugeBarRefresh","parentCat","pString","isAllData","isFormulaTableSettingsValid","initializeDateRangesAndSearch","initDateRanges","setPeriodEndDate","Y","M","defaultDateUpdated","afterDate","beforeDate","newestDocumentDate","createDateTypes","createDatePickers2","beforeValue","restricted","categoryTimeline","sentimentTimeline","radarChartFields","selectedTimelineField","confusionSortItem","matrixDataRefresh","quantity","lineChartData","findStopLabelsAndStopWords","isFindStopLabelsAndStopWordsProcessDone","exportFormulaTableExcel","createXLSLFormatObj","xlsHeader","xlsRows","getNameForTableTotalValues","columnkey","columnvalue","innerRowData","filename","ws_name","aoa_to_sheet","formulaTableSetHeightProb","formulaTableRemoveHeightProb","styleObject","removeProperty","isSaveSettings","selectedFormulaTableConnectedField","dateFormulaValues","key1","standartNormalCurveData","tableAllDataValues","dataSize","filterFormulaTable","tableColumn","lastSortedFormulaTableColumn","isSorting","sortFormulaTable","valueA","valueB","changeRadarChartDataSentiment","formulaTableColorValue","value1","lastConfusionSort","ReportDashboardTemplate2","addToNonVisibleCategory","selectedNonVisibleCategory","addNonVisibleCategory","saveCategoryDataCompareSettings","addVisibleCategory","visibleCategories","selectedVisibleCategory","deleteVisibleCategory","nonVisibleCategories","deleteNonVisibleCategory","saveCategoryDataCompareSettingsProcessing","categoryDataCompareSetting","categoryDataCompareThreshold","visibleCategoryIds","nonVisibleCategoryIds","categoryDataCompareResponse","setCategorySentimentVarianceData","getCategoryDataCompareSettings","setMainDashboardFilters","refreshChildrenOfReportFields","foundedDashboardFacet1","foundedFacet1","dashboardFacets1","foundedDashboardFacet2","foundedFacet2","dashboardFacets2","foundedDashboardFacet3","foundedFacet3","dashboardFacets3","targetChartBeforeData","clickBubbleChartItem","searchMatrixData","matrixFields","fetching","findMatrixFields","matrixXfield","matrixYfield","copyParameters","selectedXMatrixs","selectedYMatrixs","matrixXYFields","removeMatrixXValue","removeMatrixYValue","multiBar","setPeriodParams","categorySentimentVariance","setMultiBarChart","setBubbleChart","beforeData","setupBeforeFacets","setNotificationData","timelineResult","setupTimelineFacets","setSentimentTimelineChart","afterQuery","datePeriods","selectedPeriod","afterYear","afterQuarter","beforeYear","beforeQuarter","findTemporalSentimentUseRatio","temporalSentimentUseRatio","timelineFacets","targetChartTimelineData","tempTarget","getRangeResults","rangeSearch","rangeResponse","preparingRangeData","currentQuarter","quarter","upperThresholdSentimentData","multiplierCoefficient","upperThresholdSentimentDataCategoryIds","visibleCategorySentimentData","visibleCategorySentimentDataCategoryIds","sumarizedCategorySentimentData","categorySentimentChangeData","calculateCategoryDataCompareWidths","positiveValue","negativeValue","positiveCategoryChangeWidth","negativeCategoryChangeWidth","categoryResponse","categoryInsufficientTimelineData","sentimentResponse","sentimentInsufficientTimelineData","getNowPeriod","getPreviousPeriod","generateComparationPeriods","periodList","nowPeriod","comparationPeriodActive","temporalCategoryChartFlexValue","dashboardFilterItem1","dashboardFilterItem2","dashboardFilterItem3","filter1SelectedItem","searchFilter1Text","filter2SelectedItem","searchFilter2Text","filter3SelectedItem","searchFilter3Text","comparisonReportModel","flipCategoryDataCompareChart","min-height","changeCategorySentimentVarianceVisibility","option","changeCategorySentimentVarianceUseRatio","downloadChart","downloadD3Chart","chartCode","exporting","filePrefix","searchWhenPeriodSelection","changeCatTrendType","comparationPeriods","app","$parse","ngRightClick","ReportDashboardTemplate1","setGlobalChartSettings","attributeBasedCategory","reportAttributeScore","matrixFacet","attributeBasedCategoryFacet","getReportAttributeScores","setReportAttributeScoreData","setAttributeBasedCategoryData","setRootFacet","rootfacet","findNonCategorizedKeywords","nonCategorizedKeywords","keywordChartFlexValue","deletedNoncategorizedKeywords","defaultSortColumnKey","sortReportAttributeScore","facetKey","sortColumnsByCategory","sortAttributeBasedCategory","columnList","attributeName","itemList","dynamicSortForCategory","isNonCatKeywordRequestIsDone","attributeBasedCategorySortItem","showZeros","setShowZero","allZero","exportExcelReportAttributeScore","numberWithMathFloor","exportExcelAttributeBasedCategory","digit","trunc","attributeFormulItem","formulName","formulItem","ReportAlertController","reportScores","formula_settings","saveKeywords","filteredKeywords","savePeriod","getReportAlertItems","getAlertItems","reportAlertSettings","categoryAlreadyAdded","tresholds","tresholdTypes","alertTypes","sortTypes","addNewWidget","currentSetting","topBottomWidgets","alternateColor","changeColumnName","orderFormula","sortType","formulaCols","removeWidget","periodParams","selectedIndexToEdit","webUrl","protocol","host","port","setDefaultWebUrl","formatPeriod","deleteReportAlert","deleteAlertItem","validateItem","saveAlertItem","errorMsg","updateAlertItem","clear","editSetting","scoreChange","modelChanged","categoryRate","moduleCategoryExists","moduleOpenId","getModuleOpenId","sub","addModuleCategory","rate","removeModelCategory","getModuleNameById","getCategoryTitleById","mainCategoryChanged","sub1CategoryChanged","sub2CategoryChanged","subscriptionList","newSubscription","removeSubscription","addSubscription","getFrequencies","frequencies","$$pipeline","showCreatePipelineDialog","showDeletePipelineConfirmDialog","showSavePipelineConfirmDialog","deletePipeline","savePipeline","DeletePipelineDialogController","hasModules","PipelineCreateDialogController","PipelineSettingsController","definitions","indx","CreatePipelineController","UtilityService","fireResize","createEvent","initEvent","dispatchEvent","documentElement","createEventObject","fireEvent","objectId","objectType","audit","ga","eventCategory","eventAction","eventLabel","tracker","getAll","set","send","screenName","timingCategory","timingVar","timingValue","SampleAddCategoryDialogController","SampleAddTagDialogController","htmlUrl","showSaveSettingDialog","showCreateModuleDialog","showClusteringSettingDialog","removedDocumentCount","deletable","saveModuleSettings","createModuleTitle","saveStopLabel","saveStopWordLabel","duplicateTitle","duplicateBody","nullTitle","nullBody","trainCompletedSuccessfully","trainCompletedFailed","failedTitle","failedBody","getModule","selectTrainAspectDialog","ModuleCreateDialogController","ReplaceCategoryDialogController","moduleCounts","ModuleAddCategoryDialogController","ModuleSaveSettingDialogController","ClusteringSaveSettingDialogController","SelectTrainAspectDialogController","showDeleteCategoryDialog","showReplaceCategoryDialog","categoryAliasDialog","showCategoryAliasDialog","DeleteCategoryDialogController","CategoryAliasController","filterByTypes","filterByTags","filterByName","emptyFilter","filterByCategories","ExcelFactory","DelimitedTextFactory","getPreviewFactory","fileExtension","previewFactory","factory","findActiveSources","xhr","XHR","overrideMimeType","responseText","findQueueActive","findWorkspaceLogos","workspaceLogos","TrainController","auth","findModuleFamily","family","moduleFamily","fillClassifierSources","findSelectedModuleInFamily","classifierSource","foundedSelectedModuleFamily","selectedModuleFamily","foundedParentModule","createSubModule","changeFamilyModule","train","getLatestTrainInfo","latestTrainInfo","taskStatus","trainInfo","generateTrainingMessage","statusDetail","generateTrainingTooltip","ModuleSettingsController","getBaseModules","baseModules","saved","savePermission","classificationTypes","splitterTypes","classificationSources","processUnits","features","scoring","addStopLabelObject","addStopWordObject","addStopWordText","pipelineSearch","classifierSearch","pipelinePagination","classifierPagination","addedPipeline","addedClassifier","withOption","withLanguageSource","sentimentLanguage","splitterType","featureExtractors","feature","scoringType","trainAlgorithmTypes","trainAlgorithm","processUnit","testEvaluateRatio","batchSize","module_batchSize","learningRates","module_learningRates","epochNumbers","module_epochNumbers","maxTokenLength","module_maxTokenLength","testSplitRatio","module_testSplitRatio","pipelineSortableCardOptions","draggingPipeline","dropindex","classifierSortableCardOptions","draggingClassifier","addPipeline","selectedPipeline","settingsForm","removePipeline","addClassifier","selectedClassifier","removeClassifier","saveStopWord","deleteStopLabel","deleteStopWord","setPipelineCurrentPage","showPipelineInfo","showClassifierInfo","saveSettings","baseModuleId","ListModuleController","$cookies","allReports","filterPipelinesByPermission","allPipelines","pipelineWorkspaceId","getModulesPipelinesReports","setWorkspaceLogo","workspaceLogo","showPipelines","isShowModule","openPipeline","openReport","getSourceRoute","sourcetype","viewType","getWebSources","toggleSidenav","sidenavId","toggleFilter","checkFilters","toggleFilterWithEmpty","showAllTasks","filtertedModulesLength","setNumbersOfPages","toggleTypeFilter","isTypeFilterExists","tempModules","nonCollapsedGroup","isSourceActive","avatarColors","enableFooter","onSortChange","onOrderChange","register","ChatTabController","msApi","toggleChat","contact","chatActive","replyMessage","chat","scrollToBottomOfChat","reply","dialog","who","speed","chatDialog","contacts","MsWidgetController","flip","isFlippable","flipped","toggleClass","flippable","msWidgetDirective","transclude","compile","tElement","iElement","iAttrs","MsWidgetCtrl","transcludeFn","empty","msWidgetFrontDirective","flipWidget","msWidgetBackDirective","MsTimelineController","setScrollEl","scrollEl","getScrollEl","msTimelineDirective","loadMore","MsTimelineCtrl","onScroll","loadMoreEl","unregisterOnScroll","registerOnScroll","off","msTimelineItemDirective","args","cardEl","testForImage","itemLoaded","testForVisibility","imgEl","itemInViewport","itemReadyWatcher","old","MsStepperController","registerMainForm","mainForm","registerStep","stepNumber","steps","stepTitle","setupSteps","setCurrentStep","currentStepNumber","resetForm","gotoFirstStep","isStepNumberValid","gotoStep","gotoPreviousStep","gotoNextStep","gotoLastStep","isFirstStep","isLastStep","sn","isStepHidden","isStepCurrent","isStepDisabled","isStepValid","isStepOptional","optionalStep","$valid","isFormValid","currentStep","msStepperDirective","priority","bindToController","ctrls","FormCtrl","MsStepperCtrl","msStepperStepDirective","msSplashScreenDirective","$animate","splashScreenRemoveEvent","leave","msSidenavHelperDirective","MdSidenavCtrl","isLockedOpen","isUndefined","msSearchBarDirective","expanderEl","collapserEl","expand","collapse","escKeyEvent","msResponsiveTableDirective","wrapper","after","msScrollConfigProvider","defaultConfiguration","extend","wheelSpeed","wheelPropagation","swipePropagation","minScrollbarLength","maxScrollbarLength","useBothWheelAxes","useKeyboard","suppressScrollY","scrollXMarginOffset","scrollYMarginOffset","stopPropagationOnClick","$get","getConfig","msScrollDirective","msScrollConfig","msUtils","fuseConfig","isMobile","updateScrollbar","PerfectScrollbar","msScroll","$eval","initialize","destroy","provider","parts","_findOrCreateParent","updateItem","_id","uisref","_getUiSref","isNumber","_path","sortByWeight","_byWeight","createParent","isObject","injector","navigationScope","setActiveItem","activeItem","getActiveItem","getNavigationObject","root","setNavigationScope","setFolded","folded","getFolded","setFoldedOpen","foldedOpen","getFoldedOpen","toggleFolded","MsNavigationController","msNavigationService","toggleHorizontalMobileMenu","msNavigationDirective","$broadcast","bodyEl","setFoldExpander","removeFoldCollapser","foldExpanderEl","onFoldExpanderHover","setFoldCollapser","foldCollapserEl","onFoldCollapserHover","MsNavigationNodeController","hasChildren","collapsable","$evalAsync","givenPathParts","activePathParts","toggleCollapsed","collapseEl","offsetHeight","display","animateHeightClass","expandEl","getClass","isHidden","isFunction","msNavigationNodeDirective","MsNavigationNodeCtrl","msNavigationItemDirective","msNavigationHorizontalDirective","MsNavigationHorizontalNodeController","msNavigationHorizontalNodeDirective","MsNavigationHorizontalNodeCtrl","msNavigationHorizontalItemDirective","onClick","msNavigationVerticalService","MsNavigationControllerVertical","msNavigationDirectiveVertical","MsNavigationNodeControllerVertical","msNavigationNodeDirectiveVertical","msNavigationItemDirectiveVertical","msNavigationSidebarServiceProvider","MsNavigationSidebarController","msNavigationSidebarDirective","MsNavigationSidebarNodeController","collapsableClicked","getNodeTitle","msNavigationSidebarNodeDirective","MsNavigationSidebarNodeCtrl","msNavigationSidebarItemDirective","msNavFoldService","setFoldable","foldable","isNavFoldedOpen","toggleFold","openFolded","closeFolded","msNavIsFoldedDirective","isFoldedOpen","isFolded","fold","unfold","sidenavEl","openOverlay","closeOverlay","msNavIsFolded","MsNavController","setToggleItem","toggleItems","getLockedItems","lockedItems","setLockedItem","clearLockedItems","msNavDirective","$mdComponentRegistry","stateChangeSuccessEvent","when","msNavTitleDirective","msNavButtonDirective","msNavToggleDirective","tAttrs","MsNavCtrl","isCollapsed","isExpanded","elementToExpand","expandAnimation","success","elementToCollapse","collapseAnimation","links","regExp","locked","lockedItem","currentState","shouldExpand","msMaterialColorPicker","$mdColorPalette","fuseGenerator","msModelType","setSelectedColor","$viewValue","palette","hue","updateSelectedColor","bgColorValue","rgba","palettes","fgColorValue","contrast","updateModel","activateHueSelection","$setViewValue","selectedPalette","selectedHues","hues","selectColor","removeColor","msDatepickerFixConfigProvider","formatter","parser","utcOffset","msDatepickerFix","msDatepickerFixConfig","elem","$formatters","$parsers","MsFormWizardController","registerForm","forms","previousStep","selectedIndex","nextStep","firstStep","lastStep","totalSteps","currentStepInvalid","$invalid","previousStepInvalid","formsIncomplete","msFormWizardDirective","msFormWizardFormDirective","formCtrl","MsFormWizardCtrl","msCardDirective","templatePath","card","cardTemplateLoaded","fuseThemingProvider","setRegisteredPalettes","_registeredPalettes","registeredPalettes","setRegisteredThemes","_registeredThemes","registeredThemes","invoke","_$cookies","getRegisteredPalettes","getRegisteredThemes","setActiveTheme","themeName","themes","warn","setThemesList","themeList","$mdThemingProvider","fusePalettes","fuseThemes","customTheme","getObject","alwaysWatchTheme","definePalette","primaryPalette","primary","accentPalette","accent","warnPalette","backgroundPalette","_PALETTES","_THEMES","hue-1","hue-2","hue-3","pink","teal","50","100","200","700","800","900","A100","A200","A400","A700","contrastDefaultColor","contrastDarkColors","contrastStrongLightColors","fuseGeneratorService","fuseTheming","generate","registeredTheme","colorType","colorTypeName","contrast1","contrast2","contrast3","contrast4","hue1","hue2","hue3","processAndStoreThemes","styleVars","colorTypes","colorLevelName","colorName","ucfirst","render","_themes","selectedTheme","cssTemplate","matched","headEl","styleEl","_contrastLevel","contrastLevel","applyContrast","contrastLevels","white","black","string","MsThemeOptionsController","updateLayoutMode","layoutMode","updateLayoutStyle","put","layoutStyle","msThemeOptions","panelOpen","toggleOptionsPanel","closeOptionsPanel","openOptionsPanel","backdropEl","$httpProvider","interceptors","detectBrowser","searchString","dataString","dataProp","versionSearchString","versionSearch","identity","subString","searchVersion","browserInfo","browserData","navigator","userAgent","vendor","opera","osData","platform","browser","version","appVersion","os","mobileDetect","mobile","toggleInArray","MobileDetect","setBaseUrl","baseUrl","getBaseUrl","getApiObject","resource","resourceObj","paramDefaults","actions","$resource","actionParts","apiObject","httpInterceptors","responseError","pathname","onLoad","reader","onError","onProgress","getReader","onload","onerror","onprogress","readAsDataURL","encoding","apiResolverService","resourceParts","escape","toTrustedFilter","$sce","trustAsHtml","htmlToPlainTextFilter","nospaceFilter","humanizeDocFilter","$1","uppercase","ctrl","$isEmpty","formatedValue","turkishToUpper","$render","letters","ş","ğ","ü","ö","ç","ı","letter","ngIfPermission","$attr","$observe","maxlength","ngEnter","hljsDirective","$interpolate","codeElement","firstLineWhitespace","startingWhitespaceRegex","highlightedCode","hljs","shouldInterpolate","contentParent","fuseConfigProvider","fuseConfiguration","disableCustomScrollbars","disableMdInkRippleOnMobile","disableCustomScrollbarsOnMobile","configName","setConfig","configValue","main@","content@app.auth_register","content@app.auth_completed","content@app.auth_confirmed","RegisterController","password","$$uuidUser","content@app.auth_login","content@app.auth_saml","content@app.auth_forgot_password","content@app.auth_forgot_password_info","content@app.auth_change_password","content@app.auth_change_password_info","content@app.auth_account_info","content@app.renew_password","isPassChangeable","content@app.reset_password","content@app.user_request","content@app.user_request.register","content@app.auth_error","LoginSamlController","logoPrefixCode","LoginController","login","loginProcessing","rememberMe","captcha","twoFA","loginV2","show2FA","statusCode","startCountDown","homePath","returnUrl","decodeURIComponent","getInvalidConnectionCount","getCaptcha","saveUserRegisterRequest","kvkk","authority","saveUserRegisterRequestProcessing","userRegisterRequestOther","saveUserRegisterForm","getNewCaptcha","countDown","countDownTimer","company","phone","reasonsOther","saveDemoForm","requestDemo","forgotPassword","changePassword","token","getWebConfigurations","getLoginSettings","isUserRegisterRequestActive","getDemoFormUrl","uuidUsername","changePassButtonText","passwordHash","demoFormUrl","invalidConnectionCount","showRegisterScreen","isExpired","forgetPass","openUserRegisterRequestPage","setLoginDefaults","loginSettings","backgroundImage","webconfigurations","rememberUsername","removeAttr","changePasswordUuid","resetPassUuid","LoginErrorController","ToolbarController","updateLastSeenNotification","toolbar","showed","getNotifications","notificationShowing","findNotifications","allNotifications","calculateNoticationCount","prepareNotifications","openNotification","uniqueIds","reportDocumentIds","noNotification","new","createNotification","newNotifications","notificationCount","userStatus","userStatusOptions","selectedLanguage","preferredLanguage","setJiraHelpDeskVisibility","setUserStatus","logout","checkNotification","homeLogoutPath","samlLogoutPath","isStandardUser","manage","changeWorkspace","any","usageStats","jiraHelpDesk","jiraHelpDeskRestrictedUser","changeLanguage","logoHeight","logoClick","global","translation","allTranslate","$stateful","QuickPanelController","notify","cloud","retro","activities","MainController","targetScope","$id","NavigationController","toggleMsNavigationFolded","runBlock","htmlClass","eventData","defaults","headers","common","run","$ariaProvider","$logProvider","uiGmapGoogleMapApiProvider","$translateProvider","$provide","pickerProvider","debugEnabled","setOkLabel","setCancelLabel","setDayHeader","setDaysNames","setMonthNames","setRangeDefaultList","setRangeCustomStartEnd","toastr","timeOut","positionClass","preventDuplicates","progressBar","configure","libraries","useLoader","urlTemplate","useSanitizeValueStrategy","decorator","taOptions","focussed","toolbarGroup","toolbarButton","toolbarButtonActive","textEditor","htmlEditor","taTools","bold","iconclass","italics","underline","ul","ol","quote","tabindex","findSettings","targetReportSettings","integrationProvider","jiraHelpdesk","jhdScript","src","readyState","onreadystatechange","getElementsByTagName","googleAnalytics","googleAnalyticsScript","googleAnalyticsScript2","innerHTML","hotjar","loadConfigurationalScripts","started","DOMContentLoaded_event","google","currentUser","getCurrentUserFromServer","findUser","isAuthenticated","avatar","environment","pnc","sys","sysParams","isRestricted","checkPermission","$user","wp","user_permission_ws","user_permission","up","pp","insert","authorize","$current","permissionRef","Function","stateChangeStartEvent","loadingProgress","transitionTo","routeConfig","$urlRouterProvider","$locationProvider","html5Mode","otherwise","layouts","verticalNavigation","horizontalNavigation","contentOnly","contentWithToolbar","toolbar@app","IndexController","appTitle","XMLHttpRequest","ActiveXObject","e1","e2","e3","Error","apiService","$httpParamSerializerJQLike","saveModule","post","getPipeline","pipelineId","updatePipeline","addModuleField","deleteModuleField","getModuleReports","getModules","getModuleTypes","getModuleFamily","getClassifierModules","getStages","getDefinitions","getFeatureExtractors","getScoringType","getClassifierType","getClassifierSource","getSplitterType","getLearningRates","getBatchSize","getEpochNumbers","getMaxTokenLength","getTestSplitRatio","getTrainAlgorithm","getProcessUnit","getTestEvaluateRatio","getTrainAlgorithmTypes","getProcessUnits","getSentimentLanguage","getModuleDefinitions","listPipeline","runTrain","getLatestTrain","searchSamplePageable","deleteSamples","startCount","startNumber","getSampleCounts","singleSentiment","findNamedEntities","getTopicSampleCounts","getClusterSampleCounts","stopLabel","stopWord","getRootCauseSampleCounts","getRootCauseResults","getRootCauseAnalysis","samlLogout","loginGitHub","cache","getUsernames","getReportModules","listReport","findDashboardMultiBar","searchReportData","getReportCategories","exportDocuments","getBookmarks","processid","uploadReportFileQueue","uploadReportFileDataQueue","findFileSettings","findReportUploadFileInfos","getReportKeywords","getReportNonCategrizedKeywords","getReportStopWords","putReportStopWords","deleteReportStopWords","getReportStopLabels","postReportStopLabels","names","deleteReportStopLabels","getUsers","saveUser","deleteUser","getRoles","getRoleTypes","getUserTypes","getRolesByWorkspace","getUsersByRole","roleid","getPermissions","getWorkspaces","getRolesByWorkspaceIds","saveRole","deleteRole","saveWorkspace","saveManagementModule","getManagementModules","q","findUserByEmail","findUserFilterFields","findUserFilters","saveUserFilterFields","partialDownloadDocuments","updateReportTemporalSentimentOption","saveReporttSettings","findReportRules","findReportFormulas","validateReportFormula","reportFormula","updateReportFormula","testReportFormula","deleteReportFormula","createDocumentReportFormula","createAttributeReportFormula","saveReportRule","reportRule","checkTrain","reportTest","isJiraHelpDeskActive","getRuleCategories","wsid","getSiteTypes","getContentTypes","getRuleLanguages","getRuleKeywords","saveRuleKeywords","excludeList","templateTopics","bound","getTemplate","workspaceRules","settingsModel","findUserSettings","reportSettingsModel","findReportSettings","findFilterChipsSettings","datePeriodSetting","categoryThreshold","findReportFieldsV2","saveReportFieldV2","updateReportFieldV2","reportFieldId","deleteReportFieldV2","findReportModulesV2","saveReportModuleV2","updateReportModuleV2","reportModuleId","deleteReportModuleV2","findReportModuleSettingsV2","saveReportModuleSettingsV2","updateReportTemplateV2","reportUnReadyDocument","reportReadyDocument","reportDocumentAddNote","reportDocumentUpdateNote","reportDocumentRemoveNote","reportDocumentAssign","reportDocumentUnAssign","reportDocumentFlag","reportDocumentUnFlag","reportDocumentAddSentiment","reportDocumentAddAspectSentiment","reportDocumentRemovoeAspectSentiment","reportDocumentTrash","reportDocumentUnTrash","reportDocumentRemoveCategory","reportDocumentAddCategory","reportDocumentSingleModuleUpdateCategory","defaultDateSettingsObject","saveAlertKeywords","getAlertKeywords","getAlertPeriod","saveAlertPeriod","delete","latestTrain","listByWorkspace","saveReportModule","deleteReportModule","uploadFileQueue","updateNote","getPeriod","getLanguages","$templateCache"],"mappings":"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","file":"scripts/app-5747c2db53.js","sourcesContent":["(function () {\n 'use strict';\n\n angular\n .module('app.sources', [])\n .config(config);\n\n /** @ngInject */\n function config($stateProvider, $translatePartialLoaderProvider, msApiProvider, msNavigationServiceProvider, authProvider) {\n var navigation = 'app/navigation/layouts/horizontal-navigation/navigation.html';\n //var user = authProvider.getCurrentUser();\n // State\n $stateProvider\n .state('app.sources', {\n abstract: true,\n url: '/sources'\n })\n .state('app.sources.create', {\n url: '/create',\n params: {\n type: \"Source\",\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: 'app/main/apps/sources/views/edit/create-source.html',\n controller: 'SourceController as vm'\n }\n },\n data: {\n permission: 'SOURCE/*/UPDATE'\n },\n bodyClass: 'create'\n })\n .state('app.sources.web', {\n abstract: true,\n url: '/web'\n })\n .state('app.sources.web.new', {\n url: '/create',\n resolve: {\n $$websource: function ($http, $stateParams, $rootScope, $q, $state, api, $log) {\n return {\n id: null,\n name: \"\",\n description: \"\",\n rules: [],\n topics: [],\n type: \"PRIVATE\"\n }\n },\n $$rules: function ($http, $stateParams, $rootScope, $q, $state, api, $log) {\n return {\n content: [],\n number: 0,\n totalPages: 1\n }\n }\n },\n views: {\n 'content@app': {\n templateUrl: 'app/main/apps/sources/views/edit/websource.html',\n controller: 'WebSourceController as vm'\n }\n },\n data: {\n permission: 'SOURCE/WEBSOURCE/UPDATE'\n },\n bodyClass: 'create-source'\n })\n .state('app.sources.web.upload', {\n url: '/source-upload?id',\n resolve: {\n $$websource: function ($http, $stateParams, $rootScope, $q, $state, api, $log) {\n return {\n id: $stateParams.id,\n name: \"\",\n description: \"\",\n rules: [],\n topics: [],\n type: \"PRIVATE\"\n }\n },\n },\n views: {\n 'content@app': {\n templateUrl: 'app/main/apps/sources/views/edit/websource-upload.html',\n controller: 'RuleUploadController as vm'\n }\n },\n data: {\n permission: 'SOURCE/WEBSOURCE/UPDATE'\n },\n params: {\n websourceId: \"28\"\n },\n bodyClass: 'upload'\n })\n .state('app.sources.web.edit', {\n url: '/:websourceid',\n resolve: {\n $$websource: function ($http, $stateParams, $rootScope, $q, $state, api, $log) {\n return $http({\n method: 'GET',\n url: '/api/source/template/' + $stateParams.websourceid\n })\n .then(function (response) {\n return response.data;\n },\n function (response) {\n $log.error(response);\n console.log(response)\n $state.go('app.modules.list');\n });\n },\n $$rules: function ($http, $stateParams, $rootScope, $q, $state, api, $log) {\n return $http({\n method: 'POST',\n url: '/api/source/rule/find/0',\n data: { templateId: $stateParams.websourceid }\n })\n .then(function (response) {\n return response.data;\n },\n function (response) {\n $log.error(response);\n $state.go('app.modules.list');\n });\n }\n },\n views: {\n 'content@app': {\n templateUrl: 'app/main/apps/sources/views/edit/websource.html',\n controller: 'WebSourceController as vm'\n }\n },\n data: {\n permission: 'SOURCE/WEBSOURCE/VIEW'\n },\n bodyClass: 'create-source'\n })\n \n .state('app.sources.web.new.topics', {\n abstract: true,\n url: '/topics'\n })\n .state('app.sources.web.new.topics.new', {\n url: '/create',\n resolve: {\n $$topic: function ($http, $stateParams, $rootScope, $q, $state, api, $log) {\n return {\n id: null,\n name: \"\",\n description: \"\",\n rules: [],\n type: \"PRIVATE\"\n }\n },\n $$rules: function ($http, $stateParams, $rootScope, $q, $state, api, $log) {\n return {\n content: [],\n number: 0,\n totalPages: 1\n }\n }\n },\n views: {\n 'content@app': {\n templateUrl: 'app/main/apps/sources/views/edit/topic.html',\n controller: 'CreateTopicController as vm'\n }\n },\n data: {\n permission: 'SOURCE/WEBSOURCE/UPDATE'\n },\n bodyClass: 'create-topic'\n })\n .state('app.sources.web.new.topics.edit', {\n url: '/:topicid',\n resolve: {\n $$topic: function ($http, $stateParams, $rootScope, $q, $state, api, $log) {\n return $http({\n method: 'GET',\n url: '/api/source/topic/' + $stateParams.topicid\n })\n .then(function (response) {\n //var topic = Object.assign({}, response.data);\n //if(topic.rules != null && topic.rules != undefined){\n // for(var i =0;i 0;\n vm.processing = false;\n //Methods\n vm.preview = showPreview;\n vm.saveSamplesFile = saveSamplesFile;\n\n console.log('Rule Upload Contoller!!!')\n\n function showPreview() {\n vm.hasHeader = true;\n preview(vm.file);\n }\n\n function alphaToNum(alpha) {\n\n var i = 0,\n num = 0,\n len = alpha.length;\n\n for (; i < len; i++) {\n num = num * 26 + alpha.charCodeAt(i) - 0x40;\n }\n\n return num - 1;\n }\n\n function numToAlpha(num) {\n\n var alpha = '';\n\n for (; num >= 0; num = parseInt(num / 26, 10) - 1) {\n alpha = String.fromCharCode(num % 26 + 0x41) + alpha;\n }\n\n return alpha;\n }\n\n function _buildColumnsArray(range) {\n\n var i,\n res = [],\n rangeNum = range.split(':').map(function (val) {\n return alphaToNum(val.replace(/[0-9]/g, ''));\n }),\n start = rangeNum[0],\n end = rangeNum[1] + 1;\n\n for (i = start; i < end; i++) {\n res.push(numToAlpha(i));\n }\n\n return res;\n }\n\n function adjustColumnWhitespaces(source) {\n var lastColumnName = source.columns[source.columns.length - 1].name;\n var realIndexOfName = vm.excelColumnsDictionary.indexOf(lastColumnName);\n var newColumns = [];\n var i;\n for (i = 0; i <= realIndexOfName; i++) {\n if (vm.hasHeader) {\n var found = source.columns.find(function (c) {\n return c.name === vm.excelColumnsDictionary[i]\n });\n if (found && found.title) {\n newColumns.push({\n \"name\": vm.excelColumnsDictionary[i],\n \"title\": found.title\n });\n } else\n newColumns.push({\n \"name\": vm.excelColumnsDictionary[i],\n \"title\": null\n });\n } else {\n newColumns.push({\n \"name\": vm.excelColumnsDictionary[i]\n });\n }\n }\n return newColumns;\n }\n\n \n\n function preview(file) {\n if (!file) return;\n vm.previewData = [];\n vm.processing = true;\n SampleFactory.preview($scope, vm.file, vm.hasHeader)\n .then(function (data) {\n if (data.columns && data.columns.length > 0)\n data.columns = adjustColumnWhitespaces(data);\n vm.previewData = data;\n vm.previewLoaded = true;\n vm.processing = false;\n vm.uploadCurrentTab = 1;\n }, function (reason) {\n $log.error('Failed: ' + reason);\n vm.uploadCurrentTab = 0;\n });\n };\n \n $scope.$on('$destroy', function () {\n // Make sure that the interval is destroyed too\n vm.stopCheck();\n });\n\n var stop;\n\n var getTrace = function getTrace() {\n if (vm.processId && vm.monitoring) {\n api.samples.findLastProcessTrace(vm.processId)\n .then(function (response) {\n if (response) {\n vm.processTraces = response;\n if (vm.processTraces && vm.processTraces.length > 0) {\n var lastProcessTrace = vm.processTraces[vm.processTraces.length - 1];\n if (lastProcessTrace.status == 201) {\n vm.monitoring = false;\n vm.stopCheck();\n $state.go('app.module.test', {\n id: vm.moduleId\n }, {\n reload: true\n });\n }\n }\n }\n }, function (error) {\n $log.error('Error status: ' + resp.status);\n })\n }\n }\n\n // vm.check = function () {\n // // Don't start a new fight if we are already fighting\n // if (angular.isDefined(stop)) return;\n // stop = $interval(function () {\n // if (vm.monitoring) {\n // getTrace();\n // } else {\n // vm.stopCheck();\n // }\n // vm.enable = !isDisable();\n // }, 2000);\n // };\n\n vm.stopCheck = function () {\n if (angular.isDefined(stop)) {\n $interval.cancel(stop);\n stop = undefined;\n }\n };\n\n //Samples File Save\n function saveSamplesFile(file) {\n var options = {\n categories: [],\n contents: [],\n tags: [],\n reals: [],\n nominals: [],\n subCategories: [],\n hasHeaders: vm.hasHeader,\n delimiter: vm.previewData.delimiter\n };\n\n if (!validateOptions(options)) {\n var message = \"The file must have one column with the text sample.\";\n var parent = $document[0].querySelector('#toastBounds');\n var toast = $mdToast.simple()\n .content(message)\n .action('OK')\n .highlightAction(true)\n .hideDelay(0)\n .position('fit')\n .theme(\"error-toast\")\n .parent(parent);\n\n $mdToast.show(toast);\n angular.forEach(vm.uploadSampleFileForm.$error.required, function (field) {\n field.$setDirty();\n });\n return;\n }\n\n vm.uploadSampleFileForm.$setPristine();\n vm.uploadSampleFileForm.$setUntouched();\n vm.processing = true;\n Upload.upload({\n responseType:'arraybuffer',\n timeout: 240000,\n url: api.source.url + \"/\" + vm.websourceId + '/upload/excel',\n data: {\n file: file\n }\n }).then(function (resp) {\n // $log.log('Success ' + resp.config.data.file.name + 'uploaded. Response: ' + resp.data);\n var file = new Blob([ resp.data ], { type : 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=UTF-8'});\n var defaultFileName = resp.config.data.file.name.replace('.xlsx','_imported.xlsx');\n saveAs(file,defaultFileName);\n \n vm.processing = false;\n vm.processId = resp.data.processId;\n vm.monitoring = true;\n //vm.check();\n vm.file = null;\n vm.previewData = {};\n vm.uploadCurrentTab = 0;\n \n $state.go('app.sources.web.edit', {\n websourceid: vm.websourceId\n }, {\n reload: true\n });\n\n }, function (resp) {\n $log.error('Error status: ' + resp.status);\n vm.processing = false;\n }, function (evt) {\n var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);\n $log.log('progress: ' + progressPercentage + '% ' + evt.config.data.file.name);\n });\n }\n\n function validateOptions(options) {\n return true;\n }\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.sources')\n .controller('WebSourceController', WebSourceController);\n\n /** @ngInject */\n function WebSourceController($scope, $state, $stateParams, $mdMedia, $mdDialog, $http, $log, $filter, api, user, ModuleService, $mdToast, $$websource, $$rules, SourceService, $q, $translate, RuleAnalysisService, Upload) {\n var vm = this;\n vm.user = user;\n vm.fullscreen = getFullscreenSessionValue();\n vm.msScrollOptions = {\n suppressScrollX: true\n };\n vm.websource = $$websource;\n vm.pageRules = $$rules;\n vm.dragging = false;\n vm.itemCountForOnePage = 10;\n vm.pagination = {};\n vm.createProcessing = false;\n vm.pagination.allTopics = {\n current: 0,\n last: 1\n };\n //trace tab\n vm.traceAnalysisUrl = '';\n vm.traceList = [];\n //stores all data for user actions. \n vm.addedTopics = [];\n vm.removedTopics = [];\n vm.allUnBoundedTopics = [];\n vm.allBoundedTopics = [];\n vm.allTopics = [];\n //to use for search filters\n vm.filteredAddedTopics = [];\n vm.filteredRemovedTopics = [];\n vm.order = 'createdDate';\n vm.searchBounded = \"\";\n vm.searchUnBounded = \"\";\n vm.orderDescending = false;\n vm.copyTopics = [];\n vm.rules = [];\n vm.addedRules = [];\n vm.updatedRules = [];\n vm.deletedRules = [];\n vm.selectedRule = {};\n vm.categories = [];\n vm.sites = [];\n vm.languages = [];\n vm.keywords = [];\n vm.siteTypes = [];\n vm.contentTypes = [];\n vm.unBoundedTopics = {\n number: 0,\n totalPages: 0,\n content: [],\n totalElements: 0,\n }\n vm.boundedTopics = {\n number: 0,\n totalPages: 0,\n content: [],\n totalElements: 0,\n }\n vm.rule = {\n name: \"\",\n showCat: false,\n type: \"INCLUDE\",\n payload: \"\",\n selectedCategories: {\n values: [],\n operator: \"OR\"\n },\n selectedSites: {\n values: [],\n operator: \"OR\"\n },\n selectedLanguages: {\n values: [],\n operator: \"OR\"\n },\n selectedKeywords: {\n values: [],\n operator: \"OR\"\n },\n selectedSitetypes: {\n values: [],\n operator: \"OR\"\n },\n selectedContenttypes: {\n values: [],\n operator: \"OR\"\n }\n }\n vm.emptyRule = JSON.parse(JSON.stringify(vm.rule));\n vm.dropzoneFields = [];\n vm.dropzone = {\n cancel: \".unsortable\"\n }\n vm.dragging = false;\n vm.lastDraggedSources = [];\n vm.filters = {\n sites: \"\",\n sitetypes: \"\",\n categories: \"\",\n keywords: \"\",\n contentTypes: \"\",\n languages: \"\"\n }\n vm.saveProcessing = false;\n vm.traceSearchProcessing = false;\n vm.topicPageSize = \"10\";\n vm.boundedTopicPageSize = \"10\";\n\n vm.onSearchRule = function () {\n var page = 0;\n var query = vm.ruleQuery != null && vm.ruleQuery.length > 2 ? vm.ruleQuery : null;\n if (vm.ruleQuery.length == 0 || vm.ruleQuery.length > 2)\n vm.getTemplateRules(query, page);\n }\n\n vm.onRulePageChange = function (step) {\n var page = vm.pageRules.number + step;\n if (page < 0)\n page = 0;\n var query = vm.ruleQuery != null && vm.ruleQuery.length > 2 ? vm.ruleQuery : null;\n vm.getTemplateRules(query, page);\n }\n\n vm.getTemplateRules = function(query, page) {\n if (vm.websource.id != null) {\n var excludeIds = []\n vm.deletedRules.forEach(function (rule) {\n if (rule.id != null)\n excludeIds.push(rule.id);\n });\n $http({\n method: 'POST',\n url: '/api/source/rule/find/' + page,\n data: { query:query, templateId: vm.websource.id, excludeIds: excludeIds }\n })\n .then(function (response) {\n vm.pageRules = response.data;\n setTemplateRules();\n },\n function (response) {\n $log.error(response);\n });\n }\n }\n\n vm.sortableCardOptions = {\n cancel: \".unsortable\",\n appendTo: 'body',\n connectWith: '.dropzone',\n delay: 75,\n distance: 7,\n forcePlaceholderSize: true,\n placeholder: '.dragitem',\n tolerance: 'pointer',\n start: function (event, ui) {\n vm.dragging = true;\n var model = ui.item.sortable.model;\n angular.forEach(vm.addedTopics, function (item) {\n if (item.name == model.name) {\n item.sorting = true;\n }\n });\n //$scope.$apply();\n setTimeout(function () { $scope.$apply(); }, 10);\n //$('.dropzone').sortable('refresh');\n //$log.info(model.name + \" start | \" + vm.dragging);\n },\n update: function (e, ui) {\n if (ui.item.sortable.droptarget[0].classList[0] !== \"dropzone\")\n ui.item.sortable.cancel();\n },\n stop: function (e, ui) {\n if (ui.item.sortable.droptarget == undefined) {\n $scope.$apply(vm.dragging = false);\n return;\n } else if (ui.item.sortable.droptarget[0].classList[0] == \"dropzone\") {\n // run code when item is dropped in the dropzone\n vm.rule = ui.item.sortable.model;\n $scope.$apply(vm.dragging = false);\n } else {\n $scope.$apply(vm.dragging = false);\n }\n\n\n }\n };\n\n function createFilterConditions(query, selector) {\n if(selector == undefined){\n selector = 'name';\n }\n var lowercaseQuery = angular.lowercase(query);\n return function filterFn(condition) {\n var lowercaseName = angular.lowercase(condition[selector]);\n return lowercaseName.includes(lowercaseQuery)\n };\n }\n\n \n vm.removeSite = function (site) {\n vm.rule.selectedSites.values.forEach(function (k, index) {\n if (k === site) {\n vm.rule.selectedSites.values.splice(index, 1);\n }\n })\n }\n vm.removeSiteType = function (sitetype) {\n vm.rule.selectedSitetypes.values.forEach(function (k, index) {\n if (k === sitetype) {\n vm.rule.selectedSitetypes.values.splice(index, 1);\n }\n })\n }\n vm.removeCategory = function (category) {\n vm.rule.selectedCategories.values.forEach(function (k, index) {\n if (k === category) {\n vm.rule.selectedCategories.values.splice(index, 1);\n }\n })\n }\n vm.removeContentType = function (contenttype) {\n vm.rule.selectedContenttypes.values.forEach(function (k, index) {\n if (k === contenttype) {\n vm.rule.selectedContenttypes.values.splice(index, 1);\n }\n })\n }\n vm.removeLanguage = function (language) {\n vm.rule.selectedLanguages.values.forEach(function (k, index) {\n if (k === language) {\n vm.rule.selectedLanguages.values.splice(index, 1);\n }\n })\n }\n vm.removeKeyword = function (keyword) {\n vm.rule.selectedKeywords.values.forEach(function (k, index) {\n if (k === keyword) {\n vm.rule.selectedKeywords.values.splice(index, 1);\n }\n })\n }\n\n vm.saveKeyword = function (keyword, $event) {\n vm.keywordSaveProcessing = true;\n api.source.saveKeyword(vm.user.selectedWorkspace.id, keyword.name)\n .then(function (response) {\n vm.keywordSaveProcessing = false;\n vm.selectedKeywordChange(response);\n },\n function (response) {\n vm.keywordSaveProcessing = false;\n $log.error(response);\n });\n }\n\n ///////////// AUTOCOMPLETE START /////////////////\n\n vm.searchSites = function (query) {\n var def = $q.defer();\n if (query.length == 3) {\n api.source.getSitesByName(vm.user.selectedWorkspace.id, query)\n .then(function (response) {\n def.resolve(response);\n vm.sites = response;\n },\n function (response) {\n $log.error(response);\n });\n return def.promise;\n } else {\n var results = query ? vm.sites.filter(createFilterConditions(query)) : vm.sites;\n return results;\n }\n }\n\n vm.searchKeywords = function (query) {\n var def = $q.defer();\n var addNeyKeyword = [{ name: query, question: true }]\n if(query.length != 0 && query.charAt(query.length - 1) == ','){\n vm.saveKeyword({name: query.substring(0,query.length - 1)});\n return;\n }\n if (query.length == 3) {\n api.source.getKeywords(vm.user.selectedWorkspace.id, query)\n .then(function (response) {\n var flag = response.filter(function (m) { return m.name == query });\n if (flag.length < 1) {\n response = addNeyKeyword.concat(response);\n }\n def.resolve(response);\n vm.keywords = response;\n },\n function (response) {\n $log.error(response);\n });\n return def.promise;\n } else {\n vm.keywords = vm.keywords.filter(function (k) { return !k.question; })\n var results = query ? vm.keywords.filter(createFilterConditions(query, 'keyword')) : vm.keywords;\n var flag = results.filter(function (m) { return m.keyword == query });\n if (flag.length < 1) {\n results = addNeyKeyword.concat(results);\n }\n return results;\n }\n }\n\n vm.onSearchChange = function(bounded){\n vm.lastDraggedSources = [];\n fetchBoundedTopics(0); \n vm.filteredAddedTopics = vm.searchFilter(true);\n vm.filteredRemovedTopics = vm.searchFilter(false);\n } \n //use for search filter for addedTopics and removedTopics.\n vm.searchFilter = function searchFilter(bounded){\n var list = null; \n var keyword = null;\n var response = [];\n if(bounded){\n list = vm.addedTopics;\n keyword = vm.searchBounded;\n }else if(bounded == false){\n list = vm.removedTopics;\n keyword = vm.searchUnBounded;\n }\n if(keyword == null || keyword == ''){\n //duplicate the list.\n for(var i =0;i 0 && page <= vm.pagination.last)\n vm.paginationClassifier.current = page;\n }\n\n /*** Use this function to make it active */\n function addTopic(item) {\n \n if(item.status == 'deleted') {\n item.status = undefined;\n // remove from removed list\n vm.removedTopics = vm.removedTopics.filter(function (k) {\n return k.id != item.id\n }); \n }\n else {\n // remove from original list\n item.status = 'new';\n vm.addedTopics.push(item);\n }\n vm.filteredRemovedTopics = vm.searchFilter(false);\n vm.filteredAddedTopics = vm.searchFilter(true);\n }\n\n\n /*** Use this function when fetchin it to passive */\n function removeTopic(item) {\n // added and then removed ?\n if(item.status == 'new') {\n item.status = undefined;\n // remove from added list\n vm.addedTopics = vm.addedTopics.filter(function (k) {\n return k.id != item.id\n }); \n }\n else {\n // remove from original list\n item.status = 'deleted';\n vm.removedTopics.push(item);\n }\n vm.filteredRemovedTopics = vm.searchFilter(false);\n vm.filteredAddedTopics = vm.searchFilter(true);\n }\n\n function openTopic(item) {\n if (vm.websource.id != null) {\n $state.go('app.sources.web.edit.topics.edit', {\n websourceid: vm.websource.id,\n topicid: item.id\n });\n } else {\n $state.go('app.sources.web.new.topics.edit', {\n topicid: item.id\n });\n }\n }\n function showSimpleToast(text) {\n $mdToast.show($mdToast.simple().textContent(text));\n }\n vm.copyClipboard = function ($event) {\n var textField = document.createElement('textarea');\n textField.innerText = JSON.stringify(vm.traceList);\n document.body.appendChild(textField);\n textField.select();\n document.execCommand('copy');\n textField.remove();\n showSimpleToast($translate.instant(\"SOURCE.RULE.COPIED_CLIPBOARD\"))\n }\n vm.sourceUrlRuleTrace = function ($event) {\n if(!vm.traceAnalysisUrl){\n return;\n }\n vm.traceSearchProcessing = true;\n SourceService.sourceUrlRuleTrace($scope, $state, $event, vm.traceAnalysisUrl, vm.user.selectedWorkspace.id, vm.websource.id)\n .then(function(response) {\n vm.traceSearchProcessing = false;\n if(response != 'CANCEL'){\n //show error dialog\n vm.traceList = response;\n }\n })\n\n };\n\n vm.getTransactionRules = function() {\n var rules = [];\n vm.addedRules.forEach(function (rule) {\n rules.push(rule);\n });\n vm.updatedRules.forEach(function (rule) {\n rules.push(rule);\n });\n vm.deletedRules.forEach(function (rule) {\n rules.push(rule);\n });\n return rules;\n }\n\n vm.saveWebSource = function ($event) {\n //vm.createProcessing = true;\n //vm.websource.rules = [];\n vm.websource.topics = [];\n if (!vm.websource.name) {\n vm.saveProcessing = false;\n return;\n }\n vm.saveProcessing = true;\n //added topics should be changed to added + removed with deleted dto.\n var allChangedTopics = [];\n for(var i =0;i 2) {\n if (rule.name.includes(vm.ruleQuery))\n rules.push(rule);\n } else {\n rules.push(rule);\n }\n });\n }\n\n for (var i = 0; i < vm.pageRules.content.length; i++) {\n var rule = {\n id: vm.pageRules.content[i].id,\n name: vm.pageRules.content[i].name,\n type: vm.pageRules.content[i].type,\n payload: vm.pageRules.content[i].payload\n }\n var updatedRule = vm.updatedRules.filter(function (k) {\n return k.id == rule.id;\n });\n if (updatedRule.length > 0) {\n rules.push(updatedRule[0]);\n } else {\n for (var j = 0; j < selecteds.length; j++) {\n var condition = vm.pageRules.content[i].conditions.filter(function (k) {\n return k.type == conditionTypes[j];\n })[0]\n rule[selecteds[j]] = {};\n rule[selecteds[j]].values = [];\n if (condition != null) {\n condition.values.forEach(function (m) {\n rule[selecteds[j]].values.push(m);\n })\n rule[selecteds[j]].operator = condition.operator;\n } else {\n rule[selecteds[j]].operator = \"OR\";\n }\n }\n rules.push(rule);\n }\n }\n vm.rules = rules;\n }\n\n vm.createTopic = function () {\n if (vm.websource.id != null) {\n $state.go('app.sources.web.edit.topics.new', {\n websourceid: vm.websource.id\n });\n } else {\n $state.go('app.sources.web.new.topics.new');\n }\n }\n vm.cancel = function () {\n $state.go('app.modules.list');\n }\n\n vm.delete = function ($event) {\n vm.saveProcessing = true;\n SourceService.removeWebSource($scope, $state, $event, vm.websource.id)\n .then(function (response) {\n if (response == \"CANCEL\") {\n vm.saveProcessing = false;\n }\n });\n }\n\n vm.toggleFullscreen = function (value) {\n vm.fullscreen = value;\n sessionStorage.setItem('websource:topics:fullscreen', vm.fullscreen);\n if (vm.fullscreen) {\n vm.viewFlexValue = 100;\n } else\n setViewFlexValue();\n }\n\n function setViewFlexValue() {\n vm.viewFlexValue = 100;\n var permissions = vm.user.permissions.filter(function (k) {\n return k.workspaceId == vm.user.selectedWorkspace.id;\n })[0].permissions;\n if (permissions.includes('SOURCE/WEBSOURCE/UPDATE')) {\n vm.viewFlexValue = 45;\n }\n }\n\n function getFullscreenSessionValue() {\n var result = false;\n var value = sessionStorage.getItem('websource:topics:fullscreen');\n if (value && value == 'true')\n result = true;\n return result;\n }\n\n vm.searchRule = function (rule, $event) {\n RuleAnalysisService.showRuleAnalysis($scope, $state, $event, rule, vm.siteTypes, vm.categories, vm.contentTypes, vm.languages);\n }\n\n function init() {\n vm.toggleFullscreen(vm.fullscreen);\n fetchBoundedTopics(0);\n vm.getConditions();\n setTemplateRules();\n }\n init();\n }\n\n function BasicDialogController($mdDialog, title, body, $state) {\n var vm = this;\n vm.title = title;\n vm.body = body;\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.sources')\n .controller('CreateTopicController', CreateTopicController);\n\n /** @ngInject */\n\n function CreateTopicController($scope, $log, api, $q, user, $$topic, $$rules, $translate, $mdMedia, $mdDialog, $state, $stateParams, $http, SourceService, RuleAnalysisService) {\n var vm = this;\n vm.user = user;\n //Methods\n vm.topic = $$topic;\n vm.pageRules = $$rules;\n vm.websourceid = null;\n //console.log('vm.pageRules');\n //console.log(vm.pageRules);\n vm.rules = [];\n vm.addedRules = [];\n vm.updatedRules = [];\n vm.deletedRules = [];\n vm.selectedRule = {};\n vm.categories = [];\n vm.sites = [];\n vm.languages = [];\n vm.keywords = [];\n vm.siteTypes = [];\n vm.contentTypes = [];\n vm.rule = {\n id:null,\n name: \"\",\n showCat: false,\n type: \"INCLUDE\",\n selectedCategories: {\n values: [],\n operator: \"OR\"\n },\n selectedSites: {\n values: [],\n operator: \"OR\"\n },\n selectedLanguages: {\n values: [],\n operator: \"OR\"\n },\n selectedKeywords: {\n values: [],\n operator: \"OR\"\n },\n selectedSitetypes: {\n values: [],\n operator: \"OR\"\n },\n selectedContenttypes: {\n values: [],\n operator: \"OR\"\n }\n }\n vm.emptyRule = JSON.parse(JSON.stringify(vm.rule));\n vm.dropzoneFields = [];\n vm.dropzone = {\n cancel: \".unsortable\"\n }\n vm.keywordSaveProcessing = false\n vm.dragging = false;\n vm.filters = {\n sites: \"\",\n sitetypes: \"\",\n categories: \"\",\n keywords: \"\",\n contentTypes: \"\",\n languages: \"\"\n }\n vm.saveProcessing = false;\n\n vm.onSearchRule = function () {\n var page = 0;\n var query = vm.ruleQuery != null && vm.ruleQuery.length > 2 ? vm.ruleQuery : null;\n if (vm.ruleQuery.length == 0 || vm.ruleQuery.length > 2)\n vm.getTopicRules(query, page);\n }\n\n vm.onRulePageChange = function (step) {\n var page = vm.pageRules.number + step;\n if (page < 0)\n page = 0;\n var query = vm.ruleQuery != null && vm.ruleQuery.length > 2 ? vm.ruleQuery : null;\n vm.getTopicRules(query, page);\n }\n\n vm.getTopicRules = function(query, page) {\n if (vm.topic.id != null) {\n var excludeIds = []\n vm.deletedRules.forEach(function (rule) {\n if (rule.id != null)\n excludeIds.push(rule.id);\n });\n $http({\n method: 'POST',\n url: '/api/source/rule/find/' + page,\n data: { query:query, topicId: vm.topic.id, excludeIds: excludeIds }\n })\n .then(function (response) {\n vm.pageRules = response.data;\n setTopicRules();\n },\n function (response) {\n $log.error(response);\n });\n }\n }\n\n vm.cancel = function () {\n $state.go('app.modules.list');\n }\n\n vm.back = function () {\n $state.go('app.sources.web.edit', {\n websourceid: $stateParams.websourceid\n });\n }\n\n vm.sortableCardOptions = {\n cancel: \".unsortable\",\n appendTo: 'body',\n connectWith: '.dropzone',\n delay: 75,\n distance: 7,\n forcePlaceholderSize: true,\n placeholder: '.dragitem',\n tolerance: 'pointer',\n start: function (event, ui) {\n vm.dragging = true;\n var model = ui.item.sortable.model;\n angular.forEach(vm.added, function (item) {\n if (item.name == model.name) {\n item.sorting = true;\n }\n });\n //$scope.$apply();\n setTimeout(function () { $scope.$apply(); }, 10);\n //$('.dropzone').sortable('refresh');\n //$log.info(model.name + \" start | \" + vm.dragging);\n },\n update: function (e, ui) {\n if (ui.item.sortable.droptarget[0].classList[0] !== \"dropzone\")\n ui.item.sortable.cancel();\n },\n stop: function (e, ui) {\n if (ui.item.sortable.droptarget == undefined) {\n $scope.$apply(vm.dragging = false);\n return;\n } else if (ui.item.sortable.droptarget[0].classList[0] == \"dropzone\") {\n // run code when item is dropped in the dropzone\n vm.rule = ui.item.sortable.model;\n $scope.$apply(vm.dragging = false);\n } else {\n $scope.$apply(vm.dragging = false);\n }\n\n\n }\n };\n\n function createFilterConditions(query, selector) {\n if(selector == undefined){\n selector = 'name';\n }\n var lowercaseQuery = angular.lowercase(query);\n return function filterFn(condition) {\n var lowercaseName = angular.lowercase(condition[selector]);\n return lowercaseName.includes(lowercaseQuery)\n };\n }\n\n\n vm.removeSite = function (site) {\n vm.rule.selectedSites.values.forEach(function (k, index) {\n if (k === site) {\n vm.rule.selectedSites.values.splice(index, 1);\n }\n })\n }\n vm.removeSiteType = function (sitetype) {\n vm.rule.selectedSitetypes.values.forEach(function (k, index) {\n if (k === sitetype) {\n vm.rule.selectedSitetypes.values.splice(index, 1);\n }\n })\n }\n vm.removeCategory = function (category) {\n vm.rule.selectedCategories.values.forEach(function (k, index) {\n if (k === category) {\n vm.rule.selectedCategories.values.splice(index, 1);\n }\n })\n }\n vm.removeContentType = function (contenttype) {\n vm.rule.selectedContenttypes.values.forEach(function (k, index) {\n if (k === contenttype) {\n vm.rule.selectedContenttypes.values.splice(index, 1);\n }\n })\n }\n vm.removeLanguage = function (language) {\n vm.rule.selectedLanguages.values.forEach(function (k, index) {\n if (k === language) {\n vm.rule.selectedLanguages.values.splice(index, 1);\n }\n })\n }\n vm.removeKeyword = function (keyword) {\n vm.rule.selectedKeywords.values.forEach(function (k, index) {\n if (k === keyword) {\n vm.rule.selectedKeywords.values.splice(index, 1);\n }\n })\n }\n\n vm.saveKeyword = function (keyword, $event) {\n vm.keywordSaveProcessing = true;\n api.source.saveKeyword(vm.user.selectedWorkspace.id, keyword.name)\n .then(function (response) {\n vm.keywordSaveProcessing = false;\n vm.selectedKeywordChange(response)\n },\n function (response) {\n vm.keywordSaveProcessing = false;\n $log.error(response);\n });\n }\n\n ///////////// AUTOCOMPLETE START /////////////////\n\n vm.searchSites = function (query) {\n var def = $q.defer();\n if (query.length == 3) {\n api.source.getSitesByName(vm.user.selectedWorkspace.id, query)\n .then(function (response) {\n def.resolve(response);\n vm.sites = response;\n },\n function (response) {\n $log.error(response);\n });\n return def.promise;\n } else {\n var results = query ? vm.sites.filter(createFilterConditions(query)) : vm.sites;\n return results;\n }\n }\n\n vm.searchKeywords = function (query) {\n \n var def = $q.defer();\n var addNeyKeyword = [{ name: query, question: true }]\n if(query.length != 0 && query.charAt(query.length - 1) == ','){\n vm.saveKeyword({name: query.substring(0,query.length - 1)});\n return;\n }\n if (query.length == 3) {\n api.source.getKeywords(vm.user.selectedWorkspace.id, query)\n .then(function (response) {\n var flag = response.filter(function (m) { return m.name == query });\n if (flag.length < 1) {\n response = addNeyKeyword.concat(response);\n }\n def.resolve(response);\n vm.keywords = response;\n },\n function (response) {\n $log.error(response);\n });\n return def.promise;\n } else {\n vm.keywords = vm.keywords.filter(function (k) { return !k.question; })\n var results = query ? vm.keywords.filter(createFilterConditions(query, 'keyword')) : vm.keywords;\n var flag = results.filter(function (m) { return m.keyword == query });\n if (flag.length < 1) {\n results = addNeyKeyword.concat(results);\n }\n return results;\n }\n }\n\n vm.searchSitetypes = function (query) {\n var results = query ? vm.siteTypes.filter(createFilterConditions(query)) : vm.siteTypes;\n return results;\n }\n\n vm.searchContentTypes = function (query) {\n var results = query ? vm.contentTypes.filter(createFilterConditions(query)) : vm.contentTypes;\n return results;\n }\n\n vm.searchCategories = function (query) {\n var results = query ? vm.categories.filter(createFilterConditions(query)) : vm.categories;\n return results;\n }\n\n vm.searchLanguages = function (query) {\n var results = query ? vm.languages.filter(createFilterConditions(query)) : vm.languages;\n return results;\n }\n\n vm.selectedSiteChange = function (item) {\n if (item == undefined) return;\n if (!includes(vm.rule.selectedSites.values,item.name) && item != undefined) {\n vm.rule.selectedSites.values.push(item);\n }\n vm.filters.sites = \"\";\n }\n\n vm.selectedSitetypeChange = function (item) {\n if (item == undefined) return;\n if (!includes(vm.rule.selectedSitetypes.values,item.name) && item != undefined) {\n vm.rule.selectedSitetypes.values.push(item);\n }\n vm.filters.sitetypes = \"\";\n }\n\n vm.selectedContentTypeChange = function (item) {\n if (item == undefined) return;\n if (!includes(vm.rule.selectedContenttypes.values,item.name) && item != undefined) {\n vm.rule.selectedContenttypes.values.push(item);\n }\n vm.filters.contentTypes = \"\";\n }\n\n vm.selectedCategoryChange = function (item) {\n if (item == undefined) return;\n if (!includes(vm.rule.selectedCategories.values,item.name) && item != undefined) {\n vm.rule.selectedCategories.values.push(item);\n }\n vm.filters.categories = \"\";\n }\n\n vm.selectedLanguageChange = function (item) {\n if (item == undefined) return;\n if (!includes(vm.rule.selectedLanguages.values,item.name) && item != undefined) {\n vm.rule.selectedLanguages.values.push(item);\n }\n vm.filters.languages = \"\";\n }\n\n vm.selectedKeywordChange = function (item) {\n if (item == undefined || item.question==true) return;\n if (!includes(vm.rule.selectedKeywords.values, item.keyword) && item != undefined) {\n vm.rule.selectedKeywords.values.push({\n id: item.id,\n name: item.keyword,\n code: item.keyword,\n });\n }\n vm.filters.keywords = \"\";\n // timeout required to focus on auto-complete.\n setTimeout(function() {\n document.querySelector(\"#keywordAutoComplete\").focus();\n }, 0);\n }\n\n function includes(array, item) {\n var flag = false;\n array.forEach(function (k) {\n if (k.name == item) flag = true;\n })\n return flag;\n }\n //////////////// AUTOCOMPLETE END ////////////////////\n\n\n vm.getConditions = function () {\n api.source.getRuleLookupMap(vm.user.selectedWorkspace.id)\n .then(function(response){\n vm.siteTypes = response[\"SITE_TYPES\"];\n vm.categories = response[\"CATEGORIES\"];\n vm.contentTypes = response[\"CONTENT_TYPES\"];\n vm.languages= response[\"LANGUAGES\"];\n }, function(response){\n $log.error(response);\n //TODO handle error.\n });\n }\n\n vm.addRule = function () {\n if (vm.rule.name == \"\" || (vm.rule.selectedCategories.values.length == 0 &&\n vm.rule.selectedSites.values.length == 0 &&\n vm.rule.selectedLanguages.values.length == 0 &&\n vm.rule.selectedKeywords.values.length == 0 &&\n vm.rule.selectedSitetypes.values.length == 0 &&\n vm.rule.selectedContenttypes.values.length == 0)) {\n return;\n }\n \n if (vm.rule.id == null) {\n vm.addedRules.push(vm.rule);\n } else {\n vm.updatedRules.push(vm.rule);\n }\n vm.rules.unshift(vm.rule);\n vm.rule = JSON.parse(JSON.stringify(vm.emptyRule));\n }\n\n vm.editRule = function (item) {\n //vm.addRule();\n vm.rule = item;\n vm.rules.forEach(function (k, index) {\n if (k == item)\n vm.rules.splice(index, 1);\n });\n vm.addedRules.forEach(function (k, index) {\n if (k == item)\n vm.addedRules.splice(index, 1);\n });\n vm.updatedRules.forEach(function (k, index) {\n if (k == item)\n vm.updatedRules.splice(index, 1);\n });\n }\n\n vm.showDeleteRuleDialog = function($scope, $event, item) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n var title = $translate.instant('RULE.CONFIRM.DELETE_RULE_TITLE');\n var body = $translate.instant('RULE.CONFIRM.DELETE_RULE_BODY', {\n name: item.name\n });\n $mdDialog.show({\n controller: 'BasicDialogController as vm',\n templateUrl: 'app/main/apps/pipelines/services/basic-confirmation-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body\n }\n })\n .then(function (answer) {\n if (answer)\n vm.deleteRule(item);\n else\n deferred.resolve(\"CANCEL\");\n }, function (error) {\n deferred.resolve(\"CANCEL\");\n });\n return deferred.promise;\n }\n\n vm.deleteRule = function (item) {\n if (item.id != null) {\n vm.updatedRules.forEach(function (k, index) {\n if (k == item)\n vm.updatedRules.splice(index, 1);\n });\n item.deleted = true;\n vm.deletedRules.push(item);\n var currentRules = vm.rules.filter(function(rule) { return rule.deleted == false; });\n if (currentRules.length == 0) {\n vm.onRulePageChange(-1);\n }\n } else {\n vm.rules.forEach(function (k, index) {\n if (k == item)\n vm.rules.splice(index, 1);\n });\n vm.addedRules.forEach(function (k, index) {\n if (k == item)\n vm.addedRules.splice(index, 1);\n });\n }\n }\n\n vm.getTransactionRules = function() {\n var rules = [];\n vm.addedRules.forEach(function (rule) {\n rules.push(rule);\n });\n vm.updatedRules.forEach(function (rule) {\n rules.push(rule);\n });\n vm.deletedRules.forEach(function (rule) {\n rules.push(rule);\n });\n return rules;\n }\n\n vm.saveTopic = function ($event) {\n vm.saveProcessing = true;\n if (!vm.topic.name) {\n vm.saveProcessing = false;\n return;\n }\n if (vm.topic.workspace == null) vm.topic.workspace = vm.user.selectedWorkspace.id;\n var rules = vm.getTransactionRules();\n SourceService.saveTopic($scope, $state, $event, rules, vm.topic)\n .then(function (response) {\n /* if (response == \"CANCEL\") {\n vm.saveProcessing = false;\n } */\n vm.saveProcessing = false;\n vm.rules = [];\n vm.addedRules = [];\n vm.updatedRules = [];\n vm.deletedRules = [];\n vm.onRulePageChange(0);\n });\n }\n\n function setTopicRules() {\n var rules = [];\n var selecteds = [\"selectedCategories\", \"selectedSites\", \"selectedLanguages\", \"selectedKeywords\", \"selectedSitetypes\", \"selectedContenttypes\"];\n //TODO put this and same array in source.service.js\n var conditionTypes = [\"CATEGORY\", \"SITE\", \"LANGUAGE\", \"KEYWORD\", \"SITE_TYPE\", \"CONTENT_TYPE\"];\n\n if (vm.pageRules.number == 0) {\n vm.addedRules.forEach(function (rule) {\n if (vm.ruleQuery != null && vm.ruleQuery.length > 2) {\n if (rule.name.includes(vm.ruleQuery))\n rules.push(rule);\n } else {\n rules.push(rule);\n }\n });\n }\n\n for (var i = 0; i < vm.pageRules.content.length; i++) {\n var rule = vm.pageRules.content[i];\n var updatedRule = vm.updatedRules.filter(function (k) {\n return k.id == rule.id;\n });\n if (updatedRule.length > 0) {\n rules.push(updatedRule[0]);\n } else {\n for (var j = 0; j < selecteds.length; j++) {\n var condition = vm.pageRules.content[i].conditions.filter(function (k) {\n return k.type == conditionTypes[j];\n })[0]\n rule[selecteds[j]] = {};\n rule[selecteds[j]].values = [];\n if (condition != null) {\n condition.values.forEach(function (m) {\n rule[selecteds[j]].values.push(m);\n })\n rule[selecteds[j]].operator = condition.operator;\n } else {\n rule[selecteds[j]].operator = \"OR\";\n }\n }\n rules.push(rule);\n }\n }\n vm.rules = rules;\n }\n\n vm.delete = function ($event) {\n vm.saveProcessing = true;\n SourceService.removeTopic($scope, $state, $event, vm.topic.id)\n .then(function (response) {\n if (response == \"CANCEL\") {\n vm.saveProcessing = false;\n }\n });\n }\n\n vm.searchRule = function (rule, $event) {\n RuleAnalysisService.showRuleAnalysis($scope, $state, $event, rule, vm.siteTypes, vm.categories, vm.contentTypes, vm.languages);\n }\n\n function setViewFlexValue() {\n vm.viewFlexValue = 100;\n var permissions = vm.user.permissions.filter(function (k) {\n return k.workspaceId == vm.user.selectedWorkspace.id;\n })[0].permissions;\n if (permissions.includes('SOURCE/WEBSOURCE/UPDATE')) {\n vm.viewFlexValue = 45;\n }\n }\n\n function init() {\n setViewFlexValue();\n vm.getConditions();\n setTopicRules();\n if ($stateParams.websourceid)\n vm.websourceid = $stateParams.websourceid;\n }\n\n init();\n }\n\n function BasicDialogController($mdDialog, title, body, $state) {\n var vm = this;\n vm.title = title;\n vm.body = body;\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.sources')\n .controller('SourceController', SourceController);\n\n /** @ngInject */\n\n function SourceController($scope, $log, api) {\n var vm = this;\n //Methods\n vm.getIcon = getIcon;\n vm.getRoute = getRoute;\n vm.getPermission = getPermission;\n vm.createProcessing = false;\n\n\n vm.sources = [{\n id: 1,\n name: \"WEB\",\n color: \"#388E3C\"\n }]\n\n \n\n\n ///////\n\n function getIcon(type) {\n switch (type.id) {\n case 1:\n return \"icon-web\";\n }\n }\n\n function getRoute(type) {\n switch (type.id) {\n case 1:\n return \"app.sources.web.new\";\n }\n };\n\n function getPermission(type) {\n switch (type.id) {\n case 1:\n return \"SOURCE/WEBSOURCE/UPDATE\";\n }\n };\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.report', ['ngAnnotateText', 'ab-base64'])\n .filter('formatTreshold', function(){\n return function(input, lang, direction) {\n if (lang == \"en\") {\n return direction + \"
\" + input.percentage + \" %\";\n }else{//default lang tr\n return direction + \"
\" + \" % \" + input.percentage ;\n }\n }\n })\n .filter('formatPeriod', function(){\n return function(input) {\n if(input && input.type) {\n if(input.type == \"DAILY\")\n return 'REPORT.ALERT.DAILYTEXT';\n else if(input.type == 'WEEKLY')\n return \"REPORT.ALERT.WEEKLYTEXT\";\n else if(input.type == 'MONTHLY')\n return \"REPORT.ALERT.MONTHLYTEXT\";\n else if(input.type == 'HOURLY')\n return \"REPORT.ALERT.HOURLYTEXT\";\n else \n return \"\";\n }\n else {\n return \"\";\n }\n }\n })\n .directive('onFinishRender', function($timeout) {\n return {\n restrict: 'A',\n link: function(scope, element, attr) {\n if (scope.$last === true) {\n $timeout(function() {\n scope.$emit('ngRepeatFinished');\n });\n }\n }\n }\n })\n .config(config);\n\n /** @ngInject */\n function config($stateProvider, msNavigationServiceProvider, authProvider) {\n var navigation = 'app/navigation/layouts/horizontal-navigation/navigation.html';\n var user = authProvider.getCurrentUser();\n // State\n $stateProvider\n .state('app.report', {\n abstract: true,\n url: '/report/:id'\n })\n .state('app.report.overview', {\n url: '/overview',\n resolve: {\n $$report: function ($http, $stateParams, $settings, $state, user) {\n return $http({\n method: 'GET',\n url: '/api/report/' + $stateParams.id\n })\n .then(function (response) {\n $stateParams.searchByDate = (response.data.dates.dateFilter == undefined || response.data.dates.dateFilter == null || response.data.dates.dateFilter == 0 ) ? 1 : response.data.dates.dateFilter;\n $stateParams.type = \"Report\";\n $stateParams.hasSubscription = response.data.hasAlertUserSubscription;\n $stateParams.name = response.data.name;\n $stateParams.color = \"#ffca28\";\n $stateParams.dashboardTemplate = response.data.dashboardTemplate;\n if ($stateParams.selectedDashboard) {\n response.data[\"selectedDashboard\"] = $stateParams.selectedDashboard;\n } else if ($settings.reportSettingsList) {\n var targetReport = $settings.reportSettingsList.filter(function (r) { return r.reportId == $stateParams.id; })[0];\n if (targetReport && targetReport.template) {\n $stateParams.selectedDashboard = targetReport.template;\n response.data[\"selectedDashboard\"] = targetReport.template;\n }\n }\n if (response.data.activeTemplates) {\n if (!user.hasPermission(\"REPORT/DATA/ADMIN\")) {\n response.data.activeTemplates.efficiencyReport = false;\n }\n }\n\n //Active template değerleri hem stateParams hem de report nesnesi üzerinde olması gerekmektedir. Değiştirmek sorun yaratabilir.\n //(css ve templateUrl'e $report nesnesi geçemediğim için)\n response.data.activeTemplates = response.data.activeTemplates && (Object.keys(response.data.activeTemplates).length > 0) ? response.data.activeTemplates : { cumulativeReport: true, comperativeReport: true, scoreReport: false };\n $stateParams.activeTemplates = response.data.activeTemplates;\n\n //$stateParams.categoryAliases = response.data.categoryAliases;\n //$stateParams.reportFields = response.data.reportFields;\n var selectedReportModules = response.data.reportModules.filter(function (d) { return d.notDashboard != 1; })\n if (selectedReportModules && selectedReportModules.length > 0) {\n $stateParams.dashboardModuleId = selectedReportModules[0].moduleId;\n $stateParams.openDashboardModuleId = selectedReportModules[0].openModuleId;\n $stateParams.dashboardModuleName = selectedReportModules[0].module.name;\n for (var i = 0; i < selectedReportModules.length; i++) {\n if (selectedReportModules[i].moduleTypeId == 1) {\n $stateParams.dashboardClassificationModule = selectedReportModules[i];\n break;\n }\n }\n }\n return response.data;\n }, function (err) {\n console.log(err)\n $state.go('app.modules.list');\n });\n\n }\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: function ($stateParams) {\n if ($stateParams && $stateParams.activeTemplates) {\n if ($stateParams.selectedDashboard == 2 && $stateParams.activeTemplates.comperativeReport) {\n return 'app/main/apps/reports/views/dashboard/dashboard.template2.html';\n } else if ($stateParams.selectedDashboard == 3 && $stateParams.activeTemplates.scoreReport) {\n return 'app/main/apps/reports/views/dashboard/dashboard.template3.html';\n } else if ($stateParams.selectedDashboard == 4 && $stateParams.activeTemplates.operationReport) {\n return 'app/main/apps/reports/views/dashboard/dashboard.template4.html';\n } else if ($stateParams.selectedDashboard == 5 && $stateParams.activeTemplates.efficiencyReport) {\n return 'app/main/apps/reports/views/dashboard/dashboard.template5.html';\n } else {\n if ($stateParams.activeTemplates.cumulativeReport) {\n $stateParams.selectedDashboard = 1;\n return 'app/main/apps/reports/views/dashboard/dashboard.template1.html';\n } else if ($stateParams.activeTemplates.comperativeReport) {\n $stateParams.selectedDashboard = 2;\n return 'app/main/apps/reports/views/dashboard/dashboard.template2.html';\n } else if ($stateParams.activeTemplates.scoreReport) {\n $stateParams.selectedDashboard = 3;\n return 'app/main/apps/reports/views/dashboard/dashboard.template3.html';\n } else if ($stateParams.activeTemplates.operationReport) {\n $stateParams.selectedDashboard = 4;\n return 'app/main/apps/reports/views/dashboard/dashboard.template4.html';\n } else if ($stateParams.activeTemplates.efficiencyReport) {\n $stateParams.selectedDashboard = 5;\n return 'app/main/apps/reports/views/dashboard/dashboard.template5.html';\n } else {\n $stateParams.selectedDashboard = 1;\n return 'app/main/apps/reports/views/dashboard/dashboard.template1.html';\n }\n }\n }\n },\n css: function ($stateParams) {\n if ($stateParams && $stateParams.activeTemplates){\n if ($stateParams.selectedDashboard == 2 && $stateParams.activeTemplates.comperativeReport) {\n return 'app/main/apps/reports/style/dashboard.template2.scss';\n } else if ($stateParams.selectedDashboard == 3 && $stateParams.activeTemplates.scoreReport) {\n return 'app/main/apps/reports/style/dashboard.template3.scss';\n } else if ($stateParams.selectedDashboard == 4 && $stateParams.activeTemplates.operationReport) {\n return 'app/main/apps/reports/style/dashboard.template4.scss';\n } else if ($stateParams.selectedDashboard == 5 && $stateParams.activeTemplates.efficiencyReport) {\n return 'app/main/apps/reports/style/dashboard.template5.scss';\n } else {\n if ($stateParams.activeTemplates.cumulativeReport)\n return 'app/main/apps/reports/style/dashboard.template1.scss';\n else if ($stateParams.activeTemplates.comperativeReport)\n return 'app/main/apps/reports/style/dashboard.template2.scss';\n else if ($stateParams.activeTemplates.scoreReport)\n return 'app/main/apps/reports/style/dashboard.template3.scss';\n else if ($stateParams.activeTemplates.operationReport)\n return 'app/main/apps/reports/style/dashboard.template4.scss';\n else if ($stateParams.activeTemplates.efficiencyReport)\n return \"app/main/apps/reports/style/dashboard.template5.scss\";\n else\n return 'app/main/apps/reports/style/dashboard.template1.scss';\n }\n }\n },\n controllerProvider: function ($stateParams, $$report) {\n if ($stateParams){\n if ($stateParams.selectedDashboard == 2 && $$report.activeTemplates.comperativeReport) {\n return 'ReportDashboardTemplate2 as vm';\n } else if ($stateParams.selectedDashboard == 3 && $$report.activeTemplates.scoreReport) {\n return 'ReportDashboardTemplate3 as vm';\n } else if ($stateParams.selectedDashboard == 4 && $$report.activeTemplates.operationReport) {\n return 'ReportDashboardTemplate4 as vm';\n } else if ($stateParams.selectedDashboard == 5 && $stateParams.activeTemplates.efficiencyReport) {\n return 'ReportDashboardTemplate5 as vm';\n } else {\n if ($stateParams.activeTemplates.cumulativeReport)\n return 'ReportDashboardTemplate1 as vm';\n else if ($stateParams.activeTemplates.comperativeReport)\n return 'ReportDashboardTemplate2 as vm';\n else if ($stateParams.activeTemplates.scoreReport)\n return 'ReportDashboardTemplate3 as vm';\n else if ($stateParams.activeTemplates.operationReport)\n return 'ReportDashboardTemplate4 as vm';\n else if ($stateParams.activeTemplates.efficiencyReport)\n return 'ReportDashboardTemplate5 as vm'\n else\n return 'ReportDashboardTemplate1 as vm';\n }\n }\n }\n }\n },\n data: {\n permission: 'REPORT/VIEW'\n },\n bodyClass: 'overview',\n params:{\n query : null,\n selectedDashboard:null\n }\n })\n .state('app.report.data', {\n url: '/data',\n params: {\n feedback:null,\n assignBy:null,\n assignTo:null,\n drafted:null,\n confirmed: null,\n pending: null,\n noConfirmed:null,\n noAssign:null,\n documentIds:[],\n view:[],\n query: null,\n oid: null,\n url: null\n },\n resolve: {\n $$report: function ($http, $stateParams, $state) {\n return $http({\n method: 'GET',\n url: '/api/report/' + $stateParams.id\n })\n .then(function (response) {\n $stateParams.searchByDate = (response.data.dates.dateFilter == undefined || response.data.dates.dateFilter == null || response.data.dates.dateFilter == 0 ) ? 1 : response.data.dates.dateFilter;\n $stateParams.type = \"Report\";\n $stateParams.hasSubscription = response.data.hasAlertUserSubscription;\n $stateParams.name = response.data.name;\n $stateParams.workspaceId = response.data.workspaceId;\n $stateParams.color = \"#F34336\";\n $stateParams.dashboardTemplate = response.data.reportModules.dashboardTemplate;\n\n //$stateParams.reportFields = response.data.reportFields;\n var selectedReportModules = response.data.reportModules.filter(function (d) { return d.notDashboard != 1; })\n if (selectedReportModules && selectedReportModules.length > 0) {\n $stateParams.dashboardModuleId = selectedReportModules[0].moduleId;\n }\n return response.data;\n }, function (err) {\n console.log(err);\n $state.go('app.modules.list');\n });\n }\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: function ($$report) {\n return 'app/main/apps/reports/views/data/dataoverview.html';\n },\n controllerProvider: function ($$report) {\n return 'ReportDataOverviewController as vm';\n },\n css: 'app/main/apps/reports/style/overview.scss'\n /*templateUrl: 'app/main/apps/reports/views/data/overview.html',\n controller: 'ReportDataOverviewController as vm'*/\n }\n },\n data: {\n permission: 'REPORT/DATA/VIEW'\n },\n bodyClass: 'data'\n })\n .state('app.report.settings', {\n url: '/settings',\n resolve: {\n $$report: function ($http, $stateParams, $state) {\n return $http({\n method: 'GET',\n url: '/api/report/' + $stateParams.id\n })\n .then(function (response) {\n $stateParams.searchByDate = (response.data.dates.dateFilter == undefined || response.data.dates.dateFilter == null || response.data.dates.dateFilter == 0 ) ? 1 : response.data.dates.dateFilter;\n $stateParams.type = \"Report\";\n $stateParams.hasSubscription = response.data.hasAlertUserSubscription;\n $stateParams.name = response.data.name;\n $stateParams.color = \"#ffca28\";\n return response.data;\n }, function (err) {\n console.log(err);\n $state.go('app.modules.list');\n });\n }\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: 'app/main/apps/reports/views/settings/settings.html',\n controller: 'ReportSettingsController as vm',\n css : 'app/main/apps/reports/style/settings.scss'\n }\n },\n data: {\n permission: function ($stateParams) {\n var prefix = $stateParams.type.toUpperCase();\n return prefix + '/SETTINGS/VIEW';\n }\n },\n bodyClass: 'overview'\n })\n .state('app.report.alert', {\n url: '/alert',\n resolve: {\n $$report: function ($http, $stateParams, $state) {\n return $http({\n method: 'GET',\n url: '/api/report/' + $stateParams.id\n })\n .then(function (response) {\n $stateParams.searchByDate = (response.data.dates.dateFilter == undefined || response.data.dates.dateFilter == null || response.data.dates.dateFilter == 0 ) ? 1 : response.data.dates.dateFilter;\n $stateParams.type = \"Report\";\n $stateParams.hasSubscription = response.data.hasAlertUserSubscription;\n $stateParams.name = response.data.name;\n $stateParams.color = \"#ffca28\";\n return response.data;\n }, function (err) {\n console.log(err);\n $state.go('app.modules.list');\n });\n }\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: 'app/main/apps/reports/views/alert/alert.html',\n controller: 'ReportAlertController as vm',\n css: 'app/main/apps/reports/style/alert.scss'\n }\n },\n data: {\n permission: 'REPORT/ALERT/VIEW'\n },\n bodyClass: 'overview'\n })\n .state('app.report.dataorganization', {\n url: '/datamanipulation',\n resolve: {\n $$report: function ($http, $stateParams, $state) {\n return $http({\n method: 'GET',\n url: '/api/report/' + $stateParams.id\n })\n .then(function (response) {\n $stateParams.searchByDate = (response.data.dates.dateFilter == undefined || response.data.dates.dateFilter == null || response.data.dates.dateFilter == 0 ) ? 1 : response.data.dates.dateFilter;\n $stateParams.type = \"Report\";\n $stateParams.hasSubscription = response.data.hasAlertUserSubscription;\n $stateParams.name = response.data.name;\n $stateParams.color = \"#ffca28\";\n return response.data;\n }, function (err) {\n console.log(err);\n $state.go('app.modules.list');\n });\n }\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: 'app/main/apps/reports/views/data-organization/data-organization.html',\n controller: 'DataOrganizationController as vm'\n }\n },\n data: {\n permission: function ($stateParams) {\n var prefix = $stateParams.type.toUpperCase();\n return prefix + '/DATAORGANIZATION/VIEW';\n }\n },\n bodyClass: 'overview'\n })\n .state('app.report.datasummary', {\n url: '/datasummary',\n resolve: {\n $$report: function ($http, $stateParams, $state) {\n return $http({\n method: 'GET',\n url: '/api/report/' + $stateParams.id\n })\n .then(function (response) {\n $stateParams.searchByDate = (response.data.dates.dateFilter == undefined || response.data.dates.dateFilter == null || response.data.dates.dateFilter == 0 ) ? 1 : response.data.dates.dateFilter;\n $stateParams.type = \"Report\";\n $stateParams.hasSubscription = response.data.hasAlertUserSubscription;\n $stateParams.name = response.data.name;\n $stateParams.color = \"#ffca28\";\n return response.data;\n }, function (err) {\n console.log(err);\n $state.go('app.modules.list');\n });\n }\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: 'app/main/apps/reports/views/data-summary/data-summary.html',\n controller: 'DataSummaryController as vm'\n }\n },\n data: {\n permission: function ($stateParams) {\n var prefix = $stateParams.type.toUpperCase();\n return prefix + '/DATA/ADD';\n }\n },\n bodyClass: 'overview'\n })\n .state('app.report.reporttest', {\n url: '/test',\n resolve: {\n $$report: function ($http, $stateParams, $state) {\n return $http({\n method: 'GET',\n url: '/api/report/' + $stateParams.id\n })\n .then(function (response) {\n $stateParams.searchByDate = (response.data.dates.dateFilter == undefined || response.data.dates.dateFilter == null || response.data.dates.dateFilter == 0 ) ? 1 : response.data.dates.dateFilter;\n $stateParams.type = \"Report\";\n $stateParams.hasSubscription = response.data.hasAlertUserSubscription;\n $stateParams.name = response.data.name;\n $stateParams.color = \"#ffca28\";\n return response.data;\n }, function (err) {\n console.log(err);\n $state.go('app.modules.list');\n });\n }\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: 'app/main/apps/reports/views/test/reporttest.html',\n controller: 'ReportTestController as vm'\n }\n },\n data: {\n permission: function ($stateParams) {\n var prefix = $stateParams.type.toUpperCase();\n return prefix + '/TEST/VIEW';\n }\n },\n bodyClass: 'overview'\n })\n .state('app.report.data.source', {\n url: '/source',\n resolve: {\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: 'app/main/apps/reports/views/data/source.html',\n controller: 'ReportDataUploadController as vm'\n }\n },\n data: {\n permission: 'REPORT/DATA/ADD'\n },\n bodyClass: 'upload'\n })\n .state('app.report.data.source.excel', {\n url: '/excel',\n params:{\n fileId:null\n },\n resolve: {\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: 'app/main/apps/reports/views/data/upload.html',\n controller: 'ReportDataUploadController as vm'\n }\n },\n data: {\n permission: 'REPORT/DATA/ADD'\n },\n bodyClass: 'upload'\n })\n .state('app.report.data.source.excel.edit', {\n url: '/edit',\n resolve: {\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: 'app/main/apps/reports/views/data/upload-edit.html',\n controller: 'ReportDataUploadEditController as vm' \n }\n },\n data: {\n permission: 'REPORT/DATA/ADD'\n },\n bodyClass: 'upload'\n })\n .state('app.report.data.source.web', {\n url: '/web',\n resolve: {\n $$reportWebsources: function ($http, $stateParams) {\n return $http({\n method: 'GET',\n url: '/api/source/template/report/' + $stateParams.id +\"/workspace/\"+user.selectedWorkspace.id+\"?page=0&size=250\"\n })\n .then(function (response) {\n return response.data.content;\n });\n }\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: 'app/main/apps/reports/views/data/websource.html',\n controller: 'ReportDataWebController as vm'\n }\n },\n data: {\n permission: 'REPORT/DATA/ADD'\n },\n bodyClass: 'upload'\n })\n\n\n // Translation\n //$translatePartialLoaderProvider.addPart('app/main/apps/classification');\n\n msNavigationServiceProvider.saveItem('report_create', {\n title: 'Report',\n translate: \"SHARED.REPORT\",\n state: 'app.report.create',\n weight: 1,\n hidden: function($scope, $state) {\n var result = true;\n if ($state)\n result = !$state.includes(\"**.report.create\");\n if (result) return result;\n var permission = \"REPORT/CREATE\";\n if (!user.hasPermission(permission))\n return true;\n return result;\n }\n\n });\n // Navigation\n\n msNavigationServiceProvider.saveItem('report_overview', {\n title: 'overview',\n translate: \"SHARED.SUMMARY\",\n state: 'app.report.overview',\n weight: 1,\n hidden: function($scope, $state) {\n var result = true;\n if ($state)\n result = !$state.includes(\"**.report.**\");\n if (result) return result;\n var permission = \"REPORT/VIEW\";\n if (!user.hasPermission(permission))\n return true;\n return result;\n }\n\n });\n\n msNavigationServiceProvider.saveItem('report_data', {\n title: 'data',\n translate: \"SHARED.DETAIL\",\n state: 'app.report.data',\n weight: 2,\n hidden: function($scope, $state) {\n var result = true;\n if ($state)\n result = !$state.includes(\"**.report.**\");\n if (result) return result;\n var permission = \"REPORT/DATA/VIEW\";\n if (!user.hasPermission(permission))\n return true;\n return result;\n }\n\n });\n\n msNavigationServiceProvider.saveItem('report_settings', {\n title: 'settings',\n translate: \"SHARED.SETTINGS\",\n state: 'app.report.settings',\n weight: 3,\n hidden: function ($scope, $state) {\n var result = true;\n if ($state)\n result = !$state.includes(\"**.report.**\");\n if (result) return result;\n var permission = \"REPORT/SETTINGS/VIEW\";\n if (!user.hasPermission(permission))\n return true;\n return result;\n }\n\n });\n\n msNavigationServiceProvider.saveItem('report_alert', {\n title: 'alert',\n translate: \"SHARED.ALERT\",\n state: 'app.report.alert',\n weight: 5,\n hidden: function ($scope, $state) {\n var result = true;\n if ($state)\n result = !$state.includes(\"**.report.**\");\n if (result) return result;\n var permission = \"REPORT/ALERT/VIEW\";\n if (!user.hasPermission(permission))\n return true;\n return result;\n }\n\n });\n\n msNavigationServiceProvider.saveItem('report_data_organization', {\n title: 'data_organization',\n translate: \"SHARED.DATA_ORGANIZATION\",\n state: 'app.report.dataorganization',\n weight: 4,\n hidden: function ($scope, $state) {\n var result = true;\n if ($state)\n result = !$state.includes(\"**.report.**\");\n if (result) return result;\n var permission = \"REPORT/DATAORGANIZATION/VIEW\";\n if (!user.hasPermission(permission))\n return true;\n return result;\n }\n\n });\n\n msNavigationServiceProvider.saveItem('report_data_summary', {\n title: 'data_summary',\n translate: \"SHARED.DATA_SUMMARY\",\n state: 'app.report.datasummary',\n weight: 5,\n hidden: function ($scope, $state) {\n var result = true;\n if ($state)\n result = !$state.includes(\"**.report.**\");\n if (result) return result;\n var permission = \"REPORT/DATA/ADD\";\n if (!user.hasPermission(permission))\n return true;\n return result;\n }\n\n });\n\n msNavigationServiceProvider.saveItem('report_module_test', {\n title: 'report_test',\n translate: \"SHARED.TEST\",\n state: 'app.report.reporttest',\n weight: 6,\n hidden: function ($scope, $state) {\n var result = true;\n if ($state)\n result = !$state.includes(\"**.report.**\");\n if (result) return result;\n var permission = \"REPORT/TEST/VIEW\";\n if (!user.hasPermission(permission))\n return true;\n return result;\n }\n\n });\n }\n\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.report')\n .service('ReportTemplate1ChartParserService', ReportTemplate1ChartParserService);\n\n /** @ngInject */\n function ReportTemplate1ChartParserService($q, $log, $translate, $mdMedia, $mdDialog, api, $stateParams, NGAnnotation, user) {\n\n\n function isNullArray(array) {\n if (!array || array.length < 1)\n return true;\n else\n return false;\n }\n\n this.parseGaugeChart = function (data, moduleId, aliases, targetData) {\n var facets = [];\n var count = 0;\n if (!targetData) {\n var facet = data.facets.filter(function (f) {\n return f.key === moduleId;\n })[0];\n if (!facet) return;\n count = facet.count;\n facets = facet.facetList;\n } else {\n facets = targetData.facetList;\n count = targetData.count;\n }\n if (!facets) return;\n var result = [];\n var max = 0;\n facets.forEach(function (f) {\n f.positive = f.positive ? f.positive : 0.00;\n f.negative = f.negative ? f.negative : 0.00;\n f.neutral = f.neutral ? f.neutral : 0.00;\n f.insensitive = f.insensitive ? f.insensitive : 0.00;\n var value = parseInt(((f.count * 100) / count).toFixed(0));\n var totalSentiment = f.positive + f.negative + f.neutral + f.insensitive;\n var negative = value * (f.negative / totalSentiment);\n var realNegative = negative;\n var ratioNegative = 100 * f.negative/totalSentiment; \n var positive = value * (f.positive / totalSentiment) + negative;\n var realPositive = positive - negative;\n var ratioPositive = 100 * f.positive/totalSentiment; \n var neutral = value * (f.neutral / totalSentiment) + positive;\n var realNeutral = neutral - positive;\n var ratioNeutral = 100 * f.neutral/totalSentiment; \n var insensitive = value * (f.insensitive / totalSentiment)+ neutral;\n var realInsensitive = insensitive - neutral;\n var ratioInsensitive = 100 * f.insensitive/totalSentiment; \n\n var item = {\n category: f.value,\n aliasCategory: f.value,\n full: 50,\n value: parseInt(((f.count * 100) / count).toFixed(0)),\n negative: negative,\n positive: positive,\n neutral: neutral,\n insensitive: insensitive,\n realPositive: realPositive,\n realNeutral: realNeutral,\n realNegative: realNegative,\n realInsensitive: realInsensitive,\n ratioPositive: ratioPositive,\n ratioNeutral: ratioNeutral,\n ratioNegative: ratioNegative,\n ratioInsensitive: ratioInsensitive,\n facet: {\n value: f.value,\n count: f.count,\n positive: f.positive,\n neutral: f.neutral,\n negative: f.negative,\n insensitive: f.insensitive,\n order: f.order\n }\n };\n if(aliases && aliases.length > 0){\n var alias = aliases.filter(function(a){ return a.categoryId == f.categoryId;})[0];\n if(alias){\n item.aliasCategory = alias.aliasName;\n }\n }\n if (item.value >= max)\n max = item.value;\n result.push(item);\n });\n result.forEach(function (r) {\n r.full = max;\n })\n\n /*result = result.sort(function (a, b) {\n return a.value - b.value;\n })*/\n return result;\n }\n\n this.parseSentimentConfusions = function (data, moduleId, targetData,hasSentimentModule,aliases) {\n var result = {\n columns: [],\n rows: []\n }\n var facets = [];\n if (!targetData) {\n var facet = data.facets.filter(function (f) {\n return f.key == moduleId;\n })[0];\n if (!facet) return;\n facets = facet.facetList;\n } else {\n facets = targetData.facetList;\n }\n if (!facets) return;\n var positiveColor = \"#4CAF50\";\n var negativeColor = \"#F44336\";\n var neutralColor = \"#ddd\";\n var insensitiveColor = \"#03A9F4\";\n var totalColor = \"#03A9F4\";\n var columns = [{\n name: \"POSITIVE\",\n color: positiveColor\n }, {\n name: \"NEGATIVE\",\n color: negativeColor\n }, {\n name: \"NEUTRAL\",\n color: neutralColor\n }];\n if(!hasSentimentModule){\n columns.push({\n name: \"INSENSITIVE\",\n color: insensitiveColor\n });\n }\n columns.push({\n name: \"TOTAL\",\n color: totalColor\n });\n var rows = [];\n var total = 0;\n facets.forEach(function (f) {\n f.positive = f.positive ? f.positive : 0.00;\n f.negative = f.negative ? f.negative : 0.00;\n f.neutral = f.neutral ? f.neutral : 0.00;\n f.insensitive = f.insensitive ? f.insensitive : 0.00;\n total += f.positive + f.negative + f.neutral + (!hasSentimentModule ? f.insensitive : 0);\n });\n facets.forEach(function (f) {\n var key = f.value;\n if(aliases && aliases.length > 0){\n var alias = aliases.filter(function(a){ return a.categoryId == f.categoryId;})[0];\n if(alias){\n key = alias.aliasName;\n }\n }\n \n var row = {\n name: key,\n items: [{\n name: \"POSITIVE\",\n value: f.positive,\n percent: f.positive > 0 ? (f.positive / (f.positive + f.negative + f.neutral + (!hasSentimentModule ? f.insensitive : 0))).toFixed(4) : (f.positive).toFixed(4),\n same: false\n }, {\n name: \"NEGATIVE\",\n value: f.negative,\n percent: f.negative > 0 ? (f.negative / (f.positive + f.negative + f.neutral + (!hasSentimentModule ? f.insensitive : 0))).toFixed(4) : (f.negative).toFixed(4),\n same: true\n }, {\n name: \"NEUTRAL\",\n value: f.neutral,\n percent: f.neutral > 0 ? (f.neutral / (f.positive + f.negative + f.neutral + (!hasSentimentModule ? f.insensitive : 0))).toFixed(4) : (f.neutral).toFixed(4),\n same: false\n }],\n order: f.order\n };\n if(!hasSentimentModule){\n row.items.push({\n name: \"INSENSITIVE\",\n value: f.insensitive,\n percent: f.insensitive > 0 ? (f.insensitive / (f.positive + f.negative + f.neutral + f.insensitive)).toFixed(4) :(f.insensitive).toFixed(4),\n same: false\n });\n }\n row.items.push({\n name: \"TOTAL\",\n value: (f.positive + f.negative + f.neutral + (!hasSentimentModule ? f.insensitive : 0)),\n percent: total > 0 ? ((f.positive + f.negative + f.neutral + (!hasSentimentModule ? f.insensitive : 0)) / total).toFixed(4) : (total).toFixed(4),\n same: false\n });\n rows.push(row);\n });\n\n result.columns = columns;\n result.rows = rows;\n return result;\n }\n\n }\n\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.report')\n .service('ReportTemplate1_2ChartParserService', ReportTemplate1_2ChartParserService);\n\n /** @ngInject */\n function ReportTemplate1_2ChartParserService($q, $log, $translate, $mdMedia, $mdDialog, api, $stateParams, NGAnnotation, user, $utils, $settings) {\n var vm = this;\n\n this.parseReportAttributeScoreChart = function(data, settings) {\n if (isNullArray(data)) return;\n\n var result = { columns: [], rows: [] };\n //TODO: order should be configurable in settings\n var orderedColumns = [];\n if(settings && settings.formulaOrderList && settings.formulaOrderList.length > 0) {\n orderedColumns = settings.formulaOrderList;\n } else {\n data.forEach(function (d) {\n orderedColumns.push(d.formulaName);\n })\n }\n \n orderedColumns.forEach(function(oc){\n var columnInfo = data.filter(function(c) {return c.formulaName == oc});\n if(columnInfo && columnInfo.length > 0) {\n result.columns.push({name: columnInfo[0].formulaDefinition, key: oc});\n columnInfo[0].values.forEach(function(v){\n var currentRow = result.rows.filter(function (row) {\n return row.name == v.reportAttribute;\n });\n var attributeRow = null;\n if (isNullArray(currentRow)) {\n result.rows.push({name: v.reportAttribute, order: 0, items: [{key: oc, value: v.score}] }); \n } else {\n attributeRow = currentRow[0];\n attributeRow.items.push({key: oc, value: v.score});\n }\n });\n }\n })\n\n return result;\n }\n\n this.parseAttributeBasedCategoryChart = function (data, key) {\n if (isNullArray(data.facets)) return;\n var f = data.facets.filter(function (x) {\n return x.key == key;\n });\n if (isNullArray(f)) return;\n var facetGroup = f[0];\n if (isNullArray(facetGroup.facetList)) return;\n var result = { columns: [], rows: [] };\n var rowItems = [];\n facetGroup.facetList.forEach(function (facet) {\n var navigation = navigateCategory(facet.category, null);\n result.columns.push({name: facet.value, key: navigation});\n rowItems.push({key: navigation, name: facet.value, value: 0, percent: 0});\n });\n result.columns.push({name: 'TOTAL', key: 'TOTAL'});\n rowItems.push({key: 'TOTAL', name: 'TOTAL', value: 0, percent: 0});\n facetGroup.facetList.forEach(function (facet) {\n facet.subs = facet.subs ? facet.subs : [];\n facet.subs.forEach(function (attribute) {\n var currentRow = result.rows.filter(function (row) {\n return row.name == attribute.value;\n });\n var attributeRow = null;\n if (isNullArray(currentRow)) {\n attributeRow = {name: attribute.value, order: 0, items: JSON.parse(JSON.stringify(rowItems))};\n result.rows.push(attributeRow);\n } else {\n attributeRow = currentRow[0];\n }\n var key = navigateCategory(facet.category, null);\n attributeRow.items.forEach(function (item) {\n if (item.key == key) {\n item.value += attribute.count;\n }\n });\n });\n });\n var total = 0;\n result.rows.forEach(function (row) {\n var itemTotal = 0;\n row.items.forEach(function (item) {\n itemTotal += item.value;\n });\n total += itemTotal;\n row.items.forEach(function (item) {\n if (item.key == 'TOTAL')\n item.value = itemTotal;\n else {\n item.percent = item.value / itemTotal;\n item.percent = item.percent.toFixed(4);\n }\n });\n });\n result.rows.forEach(function (row) {\n row.items.forEach(function (item) {\n if (item.key == 'TOTAL') {\n item.percent = item.value / total;\n item.percent = item.percent.toFixed(4);\n }\n });\n });\n return result;\n }\n\n function navigateCategory(category, categoryName) {\n if (category == null)\n return categoryName;\n if (categoryName == null)\n categoryName = category.name;\n else\n categoryName = category.name + categoryName\n if (category.parentModuleCategory != null)\n categoryName = ' -> ' + categoryName;\n return navigateCategory(category.parentModuleCategory, categoryName);\n }\n\n this.parseMatrixChart = function (data, key, xValues, yValues) {\n //if (isNullArray(data.facets) && key.indexOf(\"|\") == -1) return;\n if (isNullArray(data.facets)) return;\n var f = data.facets.filter(function (x) {\n //return x.key.indexOf(key.replace(\"|\", \",\")) != -1;\n return x.key == key;\n });\n if (isNullArray(f)) return;\n var facet = f[0];\n if (isNullArray(facet.facetList)) return;\n var result = [];\n facet.facetList.forEach(function (a1) {\n a1.subs = a1.subs ? a1.subs : [];\n a1.subs.forEach(function (a2) {\n var total = a2.positive + a2.neutral + a2.negative;\n var positivePercent = (a2.positive * 100) / total;\n var negativePercent = (a2.negative * 100) / total;\n var item = {\n x: a1.value,\n y: a2.value,\n positive: a2.positive,\n positivePercent: positivePercent.toFixed(0),\n negative: a2.negative,\n negativePercent: negativePercent.toFixed(0),\n neutral: a2.neutral,\n total: total,\n color: positivePercent > negativePercent ? \"#66BB6A\" : \"#ef5350\"\n };\n result.push(item);\n })\n });\n result.sort(function (a, b) {\n return b.total - a.total;\n });\n var xStack = [];\n var yStack = [];\n if (!isNullArray(xValues)) {\n xValues.forEach(function (i) {\n xStack.push(i.value);\n })\n }\n if (!isNullArray(yValues)) {\n yValues.forEach(function (i) {\n yStack.push(i.value);\n })\n }\n\n if (isNullArray(xStack)) {\n result.forEach(function (i) {\n if (xStack.filter(function (s) {\n return s == i.x;\n }).length == 0 && xStack.length < 6) {\n xStack.push(i.x);\n }\n });\n }\n\n if (isNullArray(yStack)) {\n result.forEach(function (i) {\n if (yStack.filter(function (s) {\n return s == i.y;\n }).length == 0 && yStack.length < 6) {\n yStack.push(i.y);\n }\n });\n }\n\n result = result.filter(function (r) {\n return xStack.indexOf(r.x) != -1 && yStack.indexOf(r.y) != -1;\n });\n setMatrixColors(result);\n return result;\n }\n\n function isNullArray(array) {\n if (!array || array.length < 1)\n return true;\n else\n return false;\n }\n\n function setMatrixColors(result) {\n var greenyellow = [\n \"#FFEB3B\",\n \"#DBDF3F\",\n \"#B7D343\",\n \"#93C747\",\n \"#6FBB4B\",\n \"#4CAF50\"\n ];\n var redyellow = [\n \"#FFEB3B\",\n \"#FCC93A\",\n \"#FAA739\",\n \"#F88638\",\n \"#F66437\",\n \"#F44336\"\n ];\n var maxTotal = 0;\n result.forEach(function (r) {\n if (maxTotal < r.positivePercent)\n maxTotal = r.positivePercent;\n if (maxTotal < r.negativePercent)\n maxTotal = r.negativePercent;\n r.color = greenyellow[1];\n var percentDifference = r.positivePercent - r.negativePercent;\n r[\"opacity\"] = 1;\n if (percentDifference > 70) r.color = greenyellow[5];\n if (percentDifference >= 50 && percentDifference < 70) r.color = greenyellow[4];\n if (percentDifference >= 30 && percentDifference < 50) r.color = greenyellow[3];\n if (percentDifference >= 10 && percentDifference < 30) r.color = greenyellow[2];\n if (percentDifference >= 0 && percentDifference < 10) r.color = greenyellow[1];\n if (percentDifference < 0 && percentDifference > -10) r.color = redyellow[1];\n if (percentDifference <= -10 && percentDifference > -30) r.color = redyellow[2];\n if (percentDifference <= -30 && percentDifference > -50) r.color = redyellow[3];\n if (percentDifference <= -50 && percentDifference > -70) r.color = redyellow[4];\n if (percentDifference <= -70) r.color = redyellow[5];\n });\n result.forEach(function (r) {\n var positiveRadius = r.positivePercent * 15 / 100;\n r[\"positiveRadius\"] = 10 + positiveRadius;\n var negativeRadius = r.negativePercent * 15 / 100;\n r[\"negativeRadius\"] = 10 + negativeRadius;\n });\n }\n\n function arrangeSentimentTimelineRanges(targetFacet,endDate){\n var diffOneDay = 86400000;\n try{\n if(diffOneDay == new Date(targetFacet[0].ranges[0].counts[1].date) - new Date(targetFacet[0].ranges[0].counts[0].date)){\n return targetFacet;\n }else{//if range difference is by months\n targetFacet.forEach(function(categoryFacet){\n var counts = categoryFacet.ranges[0].counts;\n counts.sort(function(a,b){return new Date(a.date) - new Date(b.date);});\n var countsNew = [];\n countsNew.push(JSON.parse(JSON.stringify(counts[0])));\n var tempDate = \"\";\n var i;\n for(i = 0; i 0) {\n foundedPositive = foundedPositive[0];\n foundedPositive[\"1\"] = foundedPositive[\"1\"] + range.positiveCount;\n } else {\n positive.values.push({\n \"0\": date,\n \"1\": range.positiveCount\n })\n }\n var foundedNegative = negative.values.filter(function (p) {\n return p[\"0\"].getTime() === range.date;\n });\n if (foundedNegative && foundedNegative.length > 0) {\n foundedNegative = foundedNegative[0];\n foundedNegative[\"1\"] = foundedNegative[\"1\"] + range.negativeCount;\n } else {\n negative.values.push({\n \"0\": date,\n \"1\": range.negativeCount\n })\n }\n var foundedNeutral = neutral.values.filter(function (p) {\n return p[\"0\"].getTime() === range.date;\n });\n if (foundedNeutral && foundedNeutral.length > 0) {\n foundedNeutral = foundedNeutral[0];\n foundedNeutral[\"1\"] = foundedNeutral[\"1\"] + range.neutralCount;\n } else {\n neutral.values.push({\n \"0\": date,\n \"1\": range.neutralCount\n })\n }\n if (!hasSentimentModule) {\n var foundedInsensitive = insensitive.values.filter(function (p) {\n return p[\"0\"].getTime() === range.date;\n });\n if (foundedInsensitive && foundedInsensitive.length > 0) {\n foundedInsensitive = foundedInsensitive[0];\n foundedInsensitive[\"1\"] = foundedInsensitive[\"1\"] + range.insensitiveCount;\n } else {\n insensitive.values.push({\n \"0\": date,\n \"1\": range.insensitiveCount\n })\n }\n\n }\n if (dates.filter(function (d) {\n return d.getTime() === range.date;\n }).length == 0)\n dates.push(date);\n })\n }\n }\n }\n })\n\n\n dates.sort(function (v1, v2) {\n return v1 - v2;\n });\n result.data.forEach(function (node) {\n dates.forEach(function (date) {\n var founded = node.values.filter(function (keyValue) {\n return keyValue[\"0\"].getTime() === date.getTime();\n });\n if (isNullArray(founded)) {\n node.values.push({\n 0: date,\n 1: 0\n });\n }\n });\n node.values = node.values.sort(function (v1, v2) {\n return v1[\"0\"] - v2[\"0\"];\n });\n });\n return result;\n }\n\n this.parseNewSentimentTimelineChart = function (data, moduleId, targetFacet, hasSentimentModule, startDate, endDate, sentimentTrendDate) {\n if (data == null) return;\n var sD = moment(startDate);\n var eD = moment(endDate);\n var dayDiff = getRangeResponseByTrendDate(sentimentTrendDate);\n if (!dayDiff) dayDiff = eD.diff(sD, 'months', true);\n var result = {\n config: {\n config: {},\n options: {\n chart: {\n dayDiff: dayDiff,\n type: 'stackedAreaChart',\n height: 400,\n interpolate: 'monotone',\n margin: {\n top: 20,\n right: 20,\n bottom: 50,\n left: 58\n },\n x: function (d) {\n return d[0];\n },\n y: function (d) {\n return d[1];\n },\n useVoronoi: false,\n clipEdge: true,\n duration: 100,\n controlLabels: {\n \"stacked\": $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_2.CONFIG.STACKED\"),\n \"expanded\": $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_2.CONFIG.EXPANDED\"),\n \"stream\": $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_2.CONFIG.STREAM\")\n },\n totalLabel: $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_2.CONFIG.TOTAL\"),\n useInteractiveGuideline: true,\n xAxis: {\n rotateLabels: -25,\n showMaxMin: false,\n ticks: 10,\n tickFormat: function (d) {\n var sD = moment(startDate);\n var eD = moment(endDate);\n var dayDiff = getRangeResponseByTrendDate(sentimentTrendDate);\n if (!dayDiff) dayDiff = eD.diff(sD, 'months', true);\n if (dayDiff <= 2) {\n return d3.time.format('%d/%m/%Y')(new Date(d));\n } else {\n return witchMonth(d);\n }\n },\n tickValues: function (values) {\n var sD = moment(startDate);\n var eD = moment(endDate);\n var dayDiff = getRangeResponseByTrendDate(sentimentTrendDate);\n if (!dayDiff) dayDiff = eD.diff(sD, 'months', true);\n if (dayDiff > 18 || dayDiff <= 2) {\n return values;\n }\n return _.map(values[0].values, function (v) {\n return v[0];\n });\n }\n },\n interactiveLayer: {\n tooltip: {\n headerFormatter: function (d) {\n var dayDiff = getRangeResponseByTrendDate(sentimentTrendDate);\n if (!dayDiff) dayDiff = eD.diff(sD, 'months', true);\n if (dayDiff <= 2) {\n return d3.time.format('%d/%m/%Y')(new Date(d));\n } else {\n return witchMonth(d);\n }\n }\n }\n },\n yAxis: {\n tickFormat: function (d) {\n return d3.format(',.0f')(d);\n }\n },\n zoom: {\n enabled: false,\n scaleExtent: [1, 2],\n useFixedDomain: false,\n useNiceScale: false,\n horizontalOff: false,\n verticalOff: true,\n unzoomEventType: 'dblclick.zoom'\n }\n }\n }\n },\n data: []\n };\n var dates = [];\n var positive = {\n key: $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_2.CONFIG.POSITIVE\"),\n values: [],\n color: \"#4CAF50\"\n };\n var negative = {\n key: $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_2.CONFIG.NEGATIVE\"),\n values: [],\n color: \"#f44336\"\n };\n var neutral = {\n key: $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_2.CONFIG.NEUTRAL\"),\n values: [],\n color: \"#9e9e9e\"\n };\n var insensitive = {\n key: $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_2.CONFIG.INSENSITIVE\"),\n values: [],\n color: \"#03A9F4\"\n };\n result.data.push(positive);\n result.data.push(negative);\n result.data.push(neutral);\n if (!hasSentimentModule) {\n result.data.push(insensitive);\n }\n if (isNullArray(data.facets) && !targetFacet) return;\n if (!targetFacet) {\n targetFacet = data.facets.filter(function (f) {\n return f.key === moduleId;\n })[0];\n if (!targetFacet) return;\n else {\n targetFacet = targetFacet.facetList;\n }\n } else {\n targetFacet = targetFacet.facetList;\n }\n //targetFacet = arrangeSentimentTimelineRanges(targetFacet,endDate);\n\n targetFacet.forEach(function (ff) {\n if (!isNullArray(ff.ranges)) {\n var dateRange = ff.ranges.filter(function (r) { return r.name === \"date_dt\"; })[0];\n if (dateRange) {\n if (!isNullArray(dateRange.counts)) {\n dateRange.counts.forEach(function (range) {\n range.positiveCount = range.positiveCount ? range.positiveCount : 0;\n range.neutralCount = range.neutralCount ? range.neutralCount : 0;\n range.negativeCount = range.negativeCount ? range.negativeCount : 0;\n range.insensitiveCount = range.insensitiveCount ? range.insensitiveCount : 0;\n var date = new Date(range.date);\n var foundedPositive = positive.values.filter(function (p) {\n return moment(p[\"0\"]).isSame(moment(date));\n });\n if (foundedPositive && foundedPositive.length > 0) {\n foundedPositive = foundedPositive[0];\n foundedPositive[\"1\"] = foundedPositive[\"1\"] + range.positiveCount;\n } else {\n positive.values.push({\n \"0\": date,\n \"1\": range.positiveCount\n })\n }\n var foundedNegative = negative.values.filter(function (p) {\n return moment(p[\"0\"]).isSame(moment(date));\n });\n if (foundedNegative && foundedNegative.length > 0) {\n foundedNegative = foundedNegative[0];\n foundedNegative[\"1\"] = foundedNegative[\"1\"] + range.negativeCount;\n } else {\n negative.values.push({\n \"0\": date,\n \"1\": range.negativeCount\n })\n }\n var foundedNeutral = neutral.values.filter(function (p) {\n return moment(p[\"0\"]).isSame(moment(date));\n });\n if (foundedNeutral && foundedNeutral.length > 0) {\n foundedNeutral = foundedNeutral[0];\n foundedNeutral[\"1\"] = foundedNeutral[\"1\"] + range.neutralCount;\n } else {\n neutral.values.push({\n \"0\": date,\n \"1\": range.neutralCount\n })\n }\n if (!hasSentimentModule) {\n var foundedInsensitive = insensitive.values.filter(function (p) {\n return moment(p[\"0\"]).isSame(moment(date));;\n });\n if (foundedInsensitive && foundedInsensitive.length > 0) {\n foundedInsensitive = foundedInsensitive[0];\n foundedInsensitive[\"1\"] = foundedInsensitive[\"1\"] + range.insensitiveCount;\n } else {\n insensitive.values.push({\n \"0\": date,\n \"1\": range.insensitiveCount\n })\n }\n\n }\n if (dates.filter(function (d) {\n return moment(d).isSame(moment(date));\n }).length == 0)\n dates.push(date);\n })\n }\n }\n }\n })\n\n if (isNaN(dayDiff) || dayDiff > 18 || dayDiff <= 2) {\n delete result.config.options.chart.xAxis.tickValues;\n if (dayDiff <= 2) {\n result.config.options.chart.xAxis.tickFormat = function (d) {\n return d3.time.format('%d/%m/%Y')(new Date(d));\n }\n result.config.options.chart.interactiveLayer.tooltip.headerFormatter = function (d) {\n return d3.time.format('%d/%m/%Y')(new Date(d));\n }\n }\n }\n\n dates.sort(function (v1, v2) {\n return v1 - v2;\n });\n result.data.forEach(function (node) {\n dates.forEach(function (date) {\n var founded = node.values.filter(function (keyValue) {\n return keyValue[\"0\"].getTime() === date.getTime();\n });\n if (isNullArray(founded)) {\n node.values.push({\n 0: date,\n 1: 0\n });\n }\n });\n node.values = node.values.sort(function (v1, v2) {\n return v1[\"0\"] - v2[\"0\"];\n });\n });\n if (result.data.length > 0 && result.data[0] != null && result.data[0].values != null && result.data[0].values.length > 1) {\n result.insufficientTimelineData = false;\n } else {\n result.insufficientTimelineData = true;\n }\n d3.selectAll('.nvtooltip').style('opacity', 0);\n\n if (sentimentTrendDate) {\n result = filterByDateSentiment(result, sentimentTrendDate)\n }\n \n return result;\n }\n\n this.parseCategoryTimelineChart = function (data, moduleId, targetFacet, startDate, endDate, aliases, reportid, catTrendType, catTrendDate) {\n if (data == null) return;\n //var stateCookie = $cookies.get(\"state\") ? JSON.parse($cookies.get(\"state\")).filter(function (r) { return r.id == reportid; })[0] : null;\n var reportSettings = $settings.reportSettingsList ? $settings.reportSettingsList.filter(function (r) { return r.reportId == reportid; })[0] : null;\n var temporalCategoryChartState = reportSettings ? reportSettings.temporalCategoryChartState : null;\n var sD = moment(startDate);\n var eD = moment(endDate);\n var dayDiff = getRangeResponseByTrendDate(catTrendDate);\n if (!dayDiff) dayDiff = eD.diff(sD, 'months', true);\n var result = {\n config: {\n options: {\n chart: {\n dayDiff: dayDiff,\n catTrendType: catTrendType,\n type: 'lineChart',\n height: 400,\n margin: {\n top: 20,\n right: 40,\n bottom: 50,\n left: 58\n },\n x: function (d) {\n return d.x;\n },\n y: function (d) {\n return d.y;\n },\n yScale: d3.scale.log().base(2),\n useInteractiveGuideline: true,\n dispatch: {\n stateChange: function (state) {\n //addTemplateReportCookie(\"state\", state.disabled, reportid);\n $settings.saveUserSettings(\"temporalCategoryChartState\", state.disabled, reportid);\n console.log(\"stateChange\");\n },\n changeState: function () {\n console.log(\"changeState\");\n },\n tooltipShow: function () {\n console.log(\"tooltipShow\");\n },\n tooltipHide: function () {\n console.log(\"tooltipHide\");\n }\n },\n xAxis: {\n rotateLabels: -25,\n showMaxMin: false,\n ticks: 10,\n tickFormat: function (d) {\n var sD = moment(startDate);\n var eD = moment(endDate);\n var dayDiff = getRangeResponseByTrendDate(catTrendDate);\n if (!dayDiff) dayDiff = eD.diff(sD, 'months', true);\n if (dayDiff <= 2) {\n return d3.time.format('%d/%m/%Y')(new Date(d));\n } else {\n return witchMonth(d);\n }\n },\n tickValues: function (values) {\n var sD = moment(startDate);\n var eD = moment(endDate);\n var dayDiff = getRangeResponseByTrendDate(catTrendDate);\n if (!dayDiff) dayDiff = eD.diff(sD, 'months', true);\n if (dayDiff > 18 || dayDiff <= 2) {\n return values;\n }\n return _.map(values[0].values, function (v) {\n return v.x;\n });\n }\n },\n interactiveLayer: {\n tooltip: {\n headerFormatter: function (d) {\n var dayDiff = getRangeResponseByTrendDate(catTrendDate);\n if (!dayDiff) dayDiff = eD.diff(sD, 'months', true);\n if (dayDiff <= 2) {\n return d3.time.format('%d/%m/%Y')(new Date(d));\n } else {\n return witchMonth(d);\n }\n },\n contentGenerator: function (e) {\n var pId = e.value;\n var seriesCount = e.series.length;\n var header = \"\";\n var dayDiff = getRangeResponseByTrendDate(catTrendDate);\n if (!dayDiff) dayDiff = eD.diff(sD, 'months', true);\n if (dayDiff <= 2) {\n header = d3.time.format('%d/%m/%Y')(new Date(pId));\n } else {\n header = witchMonth(pId);\n }\n var header =\n \"\" +\n \"\" +\n \"\" +\n \"\" + header + \"\" +\n \"\" +\n \"\" +\n \"\";\n\n // var series = e.series[0];\n // if (series.value === null) return;\n\n var rows = \"\";\n for (var i = 0; i < seriesCount; i++) {\n var d = e.series[i];\n rows +=\n \"\" +\n \"
\" +\n \"\" + d.key + \"\";\n if (catTrendType == \"docPercent\") {\n rows += \"\" + d3.format(\".2%\")(d.value) + \"\";\n } else {\n rows += \"\" + (d.value) + \"\";\n }\n rows += \"\";\n }\n return \"\" +\n header +\n \"\" +\n rows +\n \"\" +\n \"
\";\n }\n }\n },\n yAxis: {\n tickFormat: function (d) {\n if (catTrendType == \"docPercent\") {\n return d3.format(\".2%\")(d);\n } else if (catTrendType == \"docCatPercent\") {\n return d3.format(\".1f\")(d);\n }\n return d3.format(',.00f')(d);\n },\n axisLabelDistance: -10\n },\n lines: {\n interpolate: 'basis'\n },\n callback: function () {\n\n },\n pointSize: function () {\n return 0;\n }\n }\n }\n },\n data: []\n };\n\n var dates = [];\n if (isNullArray(data.facets) && !targetFacet) return;\n if (!targetFacet) {\n targetFacet = data.facets.filter(function (f) {\n return f.key === moduleId;\n })[0];\n if (!targetFacet)\n return;\n else\n targetFacet = targetFacet.facetList;\n } else {\n targetFacet = targetFacet.facetList;\n }\n targetFacet.forEach(function (ff) {\n var r = {\n key: ff.value,\n values: []\n }\n if (aliases && aliases.length > 0) {\n var alias = aliases.filter(function (a) { return a.categoryId == ff.categoryId; })[0];\n if (alias) {\n r.key = alias.aliasName;\n }\n }\n if (!isNullArray(ff.ranges)) {\n var dateRanges = ff.ranges.filter(function (r) {\n return r.name === \"date_dt\";\n });\n if (!isNullArray(dateRanges)) {\n var dateRange = catTrendType == \"docCount\" || catTrendType == \"docPercent\" ? dateRanges[1] : dateRanges[0];\n if (!isNullArray(dateRange.counts)) {\n dateRange.counts.forEach(function (range) {\n var totalRange = data.ranges.filter(function (p) {\n return p.date == range.date;\n })[0];\n var total = totalRange ? totalRange.count : -1;\n var date = new Date(range.date);\n var value = {\n x: date,\n y: range.count\n }\n if (catTrendType == \"docCount\" || catTrendType == \"catCount\") {\n value.y = range.count;\n } else if (catTrendType == \"docPercent\") {\n value.y = parseFloat(((range.count / total)))\n }\n r.values.push(value);\n if (dates.filter(function (d) {\n return d.getTime() === range.date;\n }).length == 0)\n dates.push(date);\n })\n }\n var docRanges = dateRanges[1];\n var docRangeValues = [];\n if (!isNullArray(docRanges.counts) && catTrendType == \"docCatPercent\") {\n docRanges.counts.forEach(function (range) {\n var date = new Date(range.date);\n var value = {\n x: date,\n y: range.count\n }\n docRangeValues.push(value);\n })\n r.values.forEach(function (a) {\n var docDateValue = docRangeValues.filter(function (l) {\n return l.x.toISOString() == a.x.toISOString();\n })\n a.y = parseFloat((a.y / docDateValue[0].y).toFixed(2));\n })\n delete result.config.options.chart.yScale;\n }\n }\n }\n result.data.push(r);\n });\n dates.sort(function (v1, v2) {\n return v1 - v2;\n });\n result.data.forEach(function (node) {\n dates.forEach(function (date) {\n var founded = node.values.filter(function (keyValue) {\n return keyValue.x.getTime() === date.getTime();\n });\n if (isNullArray(founded)) {\n node.values.push({\n x: date,\n y: 0\n });\n }\n });\n node.values = node.values.sort(function (v1, v2) {\n return v1.x - v2.x;\n });\n });\n var sD = moment(startDate);\n var eD = moment(endDate);\n var dayDiff = getRangeResponseByTrendDate(catTrendDate);\n if (!dayDiff) dayDiff = eD.diff(sD, 'months', true); \n if (isNaN(dayDiff) || dayDiff > 18 || dayDiff <= 2) {\n //parseByWeek(result.data,sD.clone(),eD.clone());\n delete result.config.options.chart.xAxis.tickValues;\n if (dayDiff <= 2) {\n result.config.options.chart.xAxis.tickFormat = function (d) {\n return d3.time.format('%d/%m/%Y')(new Date(d));\n }\n result.config.options.chart.interactiveLayer.tooltip.headerFormatter = function (d) {\n return d3.time.format('%d/%m/%Y')(new Date(d));\n }\n }\n } else {\n parseByMonthNew(result.data, sD.clone(), eD.clone());\n }\n if (result.data.length > 0 && result.data[0] != null && result.data[0].values != null && result.data[0].values.length > 1) {\n result.insufficientTimelineData = false;\n } else {\n result.insufficientTimelineData = true;\n }\n if (temporalCategoryChartState != null && result.data.length == temporalCategoryChartState.length) {\n for (var i = 0; i < result.data.length; i++) {\n result.data[i][\"disabled\"] = temporalCategoryChartState[i];\n }\n }\n d3.selectAll('.nvtooltip').style('opacity', 0);\n\n if (result.data.length > 18) {\n result.config.options.chart.legend = {};\n result.config.options.chart.legend.maxKeyLength = 5;\n }\n if (catTrendDate)\n result = filterByDate(result, catTrendDate);\n return result;\n }\n\n function getRangeResponseByTrendDate(trendDate) {\n if (trendDate) {\n switch (trendDate) {\n case \"1\":\n case \"2\":\n case \"3\":\n return 1;\n case \"4\":\n case \"5\":\n return 3;\n }\n } else {\n return null;\n }\n }\n\n function filterByDate(result, catTrendDate) {\n var ranges = vm.dateRanges[catTrendDate];\n for (var i = 0; i < result.data.length; i++) {\n result.data[i].values = result.data[i].values.filter(function (k) {\n if (k.x > ranges[0].toDate() && k.x < ranges[1].toDate()) {\n return true;\n } else {\n return false;\n }\n })\n }\n return result;\n }\n\n function filterByDateSentiment(result, sentimentTrendDate) {\n var ranges = vm.dateRanges[sentimentTrendDate];\n for (var i = 0; i < result.data.length; i++) {\n result.data[i].values = result.data[i].values.filter(function (k) {\n if (ranges && k[0] > ranges[0].toDate() && k[0] < ranges[1].toDate()) {\n return true;\n } else {\n return false;\n }\n })\n }\n return result;\n }\n\n vm.dateRanges = {\n '1': [moment().startOf('day').subtract(6, 'days'), moment()],\n '2': [moment().startOf('day').subtract(29, 'days'), moment()],\n '3': [moment().startOf('day').subtract(2, 'month'), moment()],\n '4': [moment().startOf('day').subtract(6, 'month'), moment()],\n '5': [moment().startOf('day').subtract(12, 'month'), moment()]\n }\n\n function witchMonth(date) {\n var dateObject = new Date(date);\n switch (dateObject.getMonth() + 1) {\n case 1:\n return $translate.instant('REPORT.CATEGORY_TREND_CHART.MONTHS.JANUARY') + \" \" + dateObject.getFullYear();\n case 2:\n return $translate.instant('REPORT.CATEGORY_TREND_CHART.MONTHS.FEBRUARY') + \" \" + dateObject.getFullYear();\n case 3:\n return $translate.instant('REPORT.CATEGORY_TREND_CHART.MONTHS.MARCH') + \" \" + dateObject.getFullYear();\n case 4:\n return $translate.instant('REPORT.CATEGORY_TREND_CHART.MONTHS.APRIL') + \" \" + dateObject.getFullYear();\n case 5:\n return $translate.instant('REPORT.CATEGORY_TREND_CHART.MONTHS.MAY') + \" \" + dateObject.getFullYear();\n case 6:\n return $translate.instant('REPORT.CATEGORY_TREND_CHART.MONTHS.JUNE') + \" \" + dateObject.getFullYear();\n case 7:\n return $translate.instant('REPORT.CATEGORY_TREND_CHART.MONTHS.JULY') + \" \" + dateObject.getFullYear();\n case 8:\n return $translate.instant('REPORT.CATEGORY_TREND_CHART.MONTHS.AUGUST') + \" \" + dateObject.getFullYear();\n case 9:\n return $translate.instant('REPORT.CATEGORY_TREND_CHART.MONTHS.SEPTEMBER') + \" \" + dateObject.getFullYear();\n case 10:\n return $translate.instant('REPORT.CATEGORY_TREND_CHART.MONTHS.OCTOBER') + \" \" + dateObject.getFullYear();\n case 11:\n return $translate.instant('REPORT.CATEGORY_TREND_CHART.MONTHS.NOVEMBER') + \" \" + dateObject.getFullYear();\n case 12:\n return $translate.instant('REPORT.CATEGORY_TREND_CHART.MONTHS.DECEMBER') + \" \" + dateObject.getFullYear();\n }\n return date;\n }\n\n\n function parseByMonth(chartData,sd,ed){\n var datePickerStart = sd.clone();\n chartData.forEach(function(d){\n var ress = [];\n var values = d.values;\n var cDate = datePickerStart.clone();\n //var startMonth = datePickerStart.month();\n var sum = 0;\n values.forEach(function (v,index){\n var m = cDate.month();\n var cMonth = moment(v.x).month();\n if(m == cMonth){\n sum = sum + v.y;\n if( index == values.length - 1){\n ress.push({\n x: ed.toDate(),\n y:sum\n });\n sum = 0;\n cDate.startOf('month').add(1,'month'); \n }\n }else if(m != cMonth){\n if(ress.length == 0){\n ress.push({\n x: sd.toDate(),\n y:sum\n }); \n }\n \n if(index == values.length - 1){\n ress.push({\n x: ed.toDate(),\n y:sum\n });\n }else{\n ress.push({\n x: cDate.clone().startOf('month').add(1,'month').toDate(),\n y:sum\n });\n }\n sum = 0;\n cDate.startOf('month').add(1,'month');\n }\n });\n d.values = ress;\n })\n }\n\n function parseByMonthNew(chartData,sd,ed){\n if(chartData && chartData.length > 0 && chartData[0] && chartData[0].values && chartData[0].values.length > 0){\n sd = moment(chartData[0].values[0].x);\n }\n var datePickerStart = sd.clone();\n chartData.forEach(function(d){\n var ress = [];\n var values = d.values;\n var cDate = datePickerStart.clone();\n //var startMonth = datePickerStart.month();\n values.forEach(function (v,index){\n ress.push({\n x: v.x,\n y:v.y\n });\n /*if(index == 0){\n ress.push({\n x: sd.toDate(),\n y:v.y\n });\n\n ress.push({\n x: sd.clone().add(1,'month').toDate(),\n y:v.y\n });\n cDate.add(2,'month');\n }else if(index == values.length - 1){\n ress.push({\n x: cDate.clone().toDate(),\n y:v.y\n });\n ress.push({\n x: ed.toDate(),\n y:v.y\n });\n }else{\n ress.push({\n x: cDate.clone().toDate(),\n y:v.y\n });\n cDate.add(1 ,'month');\n }*/\n });\n d.values = ress;\n })\n }\n \n function parseByWeek(chartData,sd,ed){\n var datePickerStart = sd.clone();\n chartData.forEach(function(d){\n var ress = [];\n var values = d.values;\n var cDate = datePickerStart.clone();\n var sum = 0;\n values.forEach(function (v,index){\n var w = cDate.weeks();\n var cWeek = moment(v.x).weeks();\n if(w == cWeek){\n sum = sum + v.y;\n if( index == values.length - 1){\n ress.push({\n x: ed.toDate(),\n y:sum\n });\n sum = 0;\n cDate.startOf('week').add(1,'week'); \n }\n }else if(w != cWeek){\n if(ress.length == 0){\n ress.push({\n x: cDate.clone().toDate(),\n y:sum\n }); \n }\n if(index == values.length - 1){\n ress.push({\n x: ed.toDate(),\n y: v.y\n });\n }else{\n ress.push({\n x: cDate.clone().startOf('week').add(1,'week').toDate(),\n y:sum\n });\n }\n sum = 0;\n cDate.startOf('week').add(1,'week');\n }\n });\n d.values = ress;\n })\n }\n\n this.parseBubbleChart = function (data, moduleId, categoryAlieses, targetData,hasSentimentModule) {\n var result = {\n config: {},\n data: {\n items: parseSentimentBasedCategoryData(data, moduleId, categoryAlieses, targetData,hasSentimentModule)\n }\n }\n return result;\n }\n\n this.parseMultiBarChart = function (data, moduleId, categoryAlieses, targetData,hasSentimentModule) {\n var result = {\n config: {\n config: {\n refreshDataOnly: true,\n deepWatchData: true\n },\n options: {\n chart: {\n type: 'multiBarChart',\n height: 400,\n wrapLabels: true,\n margin: {\n top: 30,\n right: 10,\n bottom: 80,\n left: 58\n },\n x: function (d) {\n return d.visibleName;\n },\n clipEdge: true,\n reduceXTicks: true,\n duration: 500,\n stacked: true,\n controlLabels: {\n \"grouped\": $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_2.CONFIG.GROUPED\") ,\n \"stacked\": $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_2.CONFIG.STACKED\")\n },\n tooltip: {\n headerFormatter: function (d) {\n return d;\n }\n },\n xAxis: {\n staggerLabels: true\n },\n yAxis: {\n axisLabelDistance: 0,\n tickFormat: function (d) {\n return d3.format(',.0f')(d);\n }\n }\n }\n }\n },\n data: parseSentimentBasedCategoryData(data, moduleId, categoryAlieses,targetData,hasSentimentModule)\n };\n\n return result;\n }\n\n function parseSentimentBasedCategoryData(data, moduleId, categoryAlieses, targetData, hasSentimentModule) {\n var moduleFacet = null;\n if (targetData) {\n moduleFacet = targetData;\n } else {\n moduleFacet = data.facets.filter(function (f) {\n return f.key == moduleId\n })[0];\n }\n if (!moduleFacet) return;\n var categories = [\n [],\n [],\n []\n ];\n if(!hasSentimentModule){\n categories.push([]);\n }\n for (var i = 0; i < moduleFacet.facetList.length; i++) {\n var facet = moduleFacet.facetList[i];\n facet.positive = facet.positive ? facet.positive : 0;\n facet.negative = facet.negative ? facet.negative : 0;\n facet.neutral = facet.neutral ? facet.neutral : 0;\n facet.insensitive = facet.insensitive ? facet.insensitive : 0;\n var aliasCategory = categoryAlieses.find(function (alias) {\n return alias.categoryId === facet.categoryId;\n });\n var visibleName = facet.value;\n if (aliasCategory) {\n visibleName = aliasCategory.aliasName;\n }\n var category = {\n 'categoryId': facet.categoryId,\n 'visibleName': visibleName,\n 'label': facet.value,\n 'docCount': (facet.negative + facet.positive + facet.neutral+ facet.insensitive),\n 'hasSubs': facet.subs != null && facet.subs.length > 0,\n 'facet': facet\n }\n category[\"key\"] = 'positive';\n category['y'] = facet.positive;\n categories[0].push(category); //positive\n category = JSON.parse(JSON.stringify(category));\n category[\"key\"] = 'negative';\n category['y'] = facet.negative;\n categories[1].push(category); //negative\n category = JSON.parse(JSON.stringify(category));\n category[\"key\"] = 'neutral';\n category['y'] = facet.neutral;\n categories[2].push(category); //neutral\n if(!hasSentimentModule){\n category = JSON.parse(JSON.stringify(category));\n category[\"key\"] = 'insensitive';\n category['y'] = facet.insensitive;\n categories[3].push(category); //insensitive\n }\n }\n var result = [{\n color: '#4CAF50',\n key: $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_2.CONFIG.POSITIVE\"),\n values: categories[0]\n },\n {\n color: '#F44336',\n key: $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_2.CONFIG.NEGATIVE\"),\n values: categories[1]\n },\n {\n color: '#ddd',\n key: $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_2.CONFIG.NEUTRAL\"),\n values: categories[2]\n }\n ];\n if(!hasSentimentModule){\n result.push({\n color: '#03A9F4',\n key: $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_2.CONFIG.INSENSITIVE\"),\n values: categories[3]\n });\n }\n for (var i = 0; i < categories.length; i++) {\n categories[i] = categories[i].sort(function (b, a) { return b.facet.order - a.facet.order || a.facet.count - b.facet.count; });\n }\n return result;\n }\n \n this.parseCategorySentimentVarianceChartData = function (beforeResponse, afterResponse, moduleId, categoryAlieses, targetBefore, targetAfter, visibilityOption, useRatio, filterChips, multiplierValue) {\n var categorySentimentVarianceData = {\n categories: []\n };\n ////before process\n var moduleFacetBefore = null;\n if (!targetBefore) {\n moduleFacetBefore = beforeResponse.facets.filter(function (f) {\n return f.key == moduleId\n })[0];\n } else {\n moduleFacetBefore = targetBefore;\n }\n var facetBefore = {\n 'count': 0,\n 'list': []\n }\n\n if (moduleFacetBefore) {\n facetBefore.count = moduleFacetBefore.count;\n }\n if (facetBefore['count'] > 0) {\n //if (true) { //@todo if no filter\n facetBefore['list'] = moduleFacetBefore.facetList;\n //} else {\n //facetBefore['list'] = moduleFacetBefore.facetList[0].subs;\n //}\n }\n var beforeTotalData = beforeResponse.count;\n var beforeTotalCategoryData = 0;\n facetBefore['list'].forEach(function (f) {\n if (f.positive)\n beforeTotalCategoryData += f.positive;\n if (f.negative)\n beforeTotalCategoryData += f.negative;\n if (f.neutral)\n beforeTotalCategoryData += f.neutral;\n if (f.insensitive)\n beforeTotalCategoryData += f.insensitive;\n })\n\n fillCategorySentimentVarianceBeforeData(facetBefore['list'], beforeTotalData, beforeTotalCategoryData, categorySentimentVarianceData, null);\n\n /////after process\n var moduleFacetAfter = null;\n if (!targetAfter) {\n moduleFacetAfter = afterResponse.facets.filter(function (f) {\n return f.key == moduleId\n })[0];\n } else {\n moduleFacetAfter = targetAfter;\n }\n var facetAfter = {\n 'count': 0,\n 'list': []\n }\n if (moduleFacetAfter) {\n facetAfter.count = moduleFacetAfter.count;\n }\n if (facetAfter['count'] > 0) {\n //if (true) { //@todo if no filter\n facetAfter['list'] = moduleFacetAfter.facetList;\n //} else {\n //facetAfter['list'] = moduleFacetAfter.facetList[0].subs;\n //}\n }\n var afterTotalData = afterResponse.count;\n var afterTotalCategoryData = 0;\n facetAfter['list'].forEach(function (f) {\n if (f.positive)\n afterTotalCategoryData += f.positive;\n if (f.negative)\n afterTotalCategoryData += f.negative;\n if (f.neutral)\n afterTotalCategoryData += f.neutral;\n if (f.insensitive)\n afterTotalCategoryData += f.insensitive;\n })\n\n fillCategorySentimentVarianceAfterData(facetAfter['list'], afterTotalData, afterTotalCategoryData, categorySentimentVarianceData, null)\n\n var totalBefore = {\n 'positive': 0,\n 'negative': 0,\n 'insensitive': 0\n };\n var totalNow = {\n 'positive': 0,\n 'negative': 0,\n 'insensitive': 0\n };\n categorySentimentVarianceData.categories.forEach(function (c) {\n totalBefore['positive'] += c.positiveBeforeCount;\n totalBefore['negative'] += c.negativeBeforeCount;\n totalBefore['insensitive'] += c.insensitiveBeforeCount;\n totalNow['positive'] += c.positiveNowCount;\n totalNow['negative'] += c.negativeNowCount;\n totalNow['insensitive'] += c.insensitiveNowCount;\n c.negativeBeforeCount = -c.negativeBeforeCount;\n c.negativeNowCount = -c.negativeNowCount;\n var aliasCategory = categoryAlieses.find(function (alias) {\n return alias.categoryId === c.categoryId;\n });\n if (aliasCategory) {\n c.visibleName = aliasCategory.aliasName;\n } else {\n c.visibleName = c.name;\n }\n });\n categorySentimentVarianceData.categories.forEach(function (c) {\n c.positiveBeforeTotal = c.positiveBeforeCount\n c.positiveNowTotal = c.positiveNowCount;\n c.negativeBeforeTotal = c.negativeBeforeCount;\n c.negativeNowTotal = c.negativeNowCount;\n if (c.positiveBeforeCount != 0) {\n c.positiveBeforeCount = Math.round(c.positiveBeforeCount * 100 / c.beforeCategoryTotal);\n }\n if (c.positiveNowCount != 0) {\n c.positiveNowCount = Math.round(c.positiveNowCount * 100 / c.nowCategoryTotal);\n }\n if (c.negativeBeforeCount != 0) {\n c.negativeBeforeCount = Math.round(c.negativeBeforeCount * 100 / c.beforeCategoryTotal);\n }\n if (c.negativeNowCount != 0) {\n c.negativeNowCount = Math.round(c.negativeNowCount * 100 / c.nowCategoryTotal);\n }\n });\n var maxNowCount = 0;\n var maxNowCountRatio = 0;\n categorySentimentVarianceData.categories.forEach(function (c) {\n\n c.beforeCategoryCount = c.beforeCategoryCount ? c.beforeCategoryCount : 0;\n c.nowCategoryCount = c.nowCategoryCount ? c.nowCategoryCount : 0;\n c.beforeCount = c.beforeCount ? c.beforeCount : 0;\n\n c.negativeChange = '' + Math.abs(-c.negativeNowCount - (-c.negativeBeforeCount)).toFixed(0);\n c.positiveChange = '' + Math.abs(c.positiveNowCount - c.positiveBeforeCount).toFixed(0);\n c.categoryChange = '' + Math.abs(c.nowCategoryCount - c.beforeCategoryCount).toFixed(1);\n\n c.change = '' + Math.abs(c.nowCount - c.beforeCount).toFixed(1);\n \n if (beforeTotalData > 0) {\n c.negativeBeforeCountRatio = Math.round((c.negativeBeforeTotal * 100 / beforeTotalData) * 10) / 10;\n c.positiveBeforeCountRatio = Math.round((c.positiveBeforeTotal * 100 / beforeTotalData) * 10) / 10;\n } else {\n c.negativeBeforeCountRatio = 0.0;\n c.positiveBeforeCountRatio = 0.0;\n }\n if (afterTotalData > 0) {\n c.negativeNowCountRatio = Math.round((c.negativeNowTotal * 100 / afterTotalData) * 10) / 10;\n c.positiveNowCountRatio = Math.round((c.positiveNowTotal * 100 / afterTotalData) * 10) / 10;\n } else {\n c.negativeNowCountRatio = 0.0;\n c.positiveNowCountRatio = 0.0;\n }\n setDirections(c);\n setRatios(c, maxNowCount, maxNowCountRatio, useRatio, multiplierValue);\n });\n var visibility;\n if (visibilityOption == 'positive') {\n visibility = { 'positive': true, 'negative': false };\n } else if (visibilityOption == 'negative') {\n visibility = { 'positive': false, 'negative': true };\n } else {// 'all'\n visibility = { 'positive': true, 'negative': true };\n }\n categorySentimentVarianceData.useRatio = useRatio;\n var result = {\n 'visibility': visibility,\n 'data': categorySentimentVarianceData\n };\n if (multiplierValue && multiplierValue!=1) {\n result.data.categories.forEach(function (k) {\n ///////////\n //k.nowCategoryCount = parseInt((k.nowCategoryCount * multiplierValue / 100));\n //k.nowCount = parseInt((k.nowCount * multiplierValue / 100));\n //k.categoryChange = parseInt((k.categoryChange * multiplierValue / 100));\n //k.change = parseInt((k.change * multiplierValue / 100));\n //k.beforeCategoryCount = parseInt((k.beforeCategoryCount * multiplierValue / 100));\n //k.beforeCount = parseInt((k.beforeCount * multiplierValue / 100));\n ///////////\n k.positiveNowCountRatio = parseInt((k.positiveNowCountRatio * multiplierValue / 100));\n k.positiveNowCount = parseInt((k.positiveNowCount * multiplierValue / 100));\n k.positiveChangeRatio = parseInt((k.positiveChangeRatio * multiplierValue / 100));\n k.positiveChange = parseInt((k.positiveChange * multiplierValue / 100));\n k.positiveBeforeCountRatio = parseInt((k.positiveBeforeCountRatio * multiplierValue / 100));\n k.positiveBeforeCount = parseInt((k.positiveBeforeCount * multiplierValue / 100));\n ///////////\n k.negativeNowCountRatio = parseInt((k.negativeNowCountRatio * multiplierValue / 100));\n k.negativeNowCount = parseInt((k.negativeNowCount * multiplierValue / 100));\n k.negativeChangeRatio = parseInt((k.negativeChangeRatio * multiplierValue / 100));\n k.negativeChange = parseInt((k.negativeChange * multiplierValue / 100));\n k.negativeBeforeCountRatio = parseInt((k.negativeBeforeCountRatio * multiplierValue / 100));\n k.negativeBeforeCount = parseInt((k.negativeBeforeCount * multiplierValue / 100));\n \n })\n \n }\n return result;\n }\n\n function fillCategorySentimentVarianceBeforeData(items, beforeTotalData, beforeTotalCategoryData, categorySentimentVarianceData, parentCategoryName) {\n items.forEach(function (item) {\n var category = {};\n category.mainCategory = parentCategoryName == null;\n category.parentCategoryName = parentCategoryName;\n category.categoryId = item.categoryId;\n item.positive = item.positive ? item.positive : 0;\n item.negative = item.negative ? item.negative : 0;\n item.neutral = item.neutral ? item.neutral : 0;\n item.insensitive = item.insensitive ? item.insensitive : 0;\n category.name = item.value;\n category.beforeTotal = item.count;\n category.beforeCategoryTotal = item.positive + item.negative + item.neutral + item.insensitive;\n category.beforeCount = beforeTotalData != 0 ? round1Decimal(category.beforeTotal * 100 / beforeTotalData) : 0;\n category.beforeCategoryCount = beforeTotalCategoryData != 0 ? round1Decimal(category.beforeCategoryTotal * 100 / beforeTotalCategoryData) : 0;\n category.positiveBeforeCount = item.positive;\n category.negativeBeforeCount = item.negative;\n category.neutralBeforeCount = item.neutral;\n category.insensitiveBeforeCount = item.insensitive;\n categorySentimentVarianceData.categories.push(category);\n category.nowTotal = 0;\n category.nowCount = 0;\n category.positiveNowCount = 0;\n category.negativeNowCount = 0;\n category.neutralNowCount = 0;\n category.insensitiveNowCount = 0;\n \n if (item.subs) {\n fillCategorySentimentVarianceBeforeData(item.subs, beforeTotalData, beforeTotalCategoryData, categorySentimentVarianceData, item.value);\n }\n });\n }\n\n function fillCategorySentimentVarianceAfterData(items, afterTotalData, afterTotalCategoryData, categorySentimentVarianceData, parentCategoryName) {\n \n items.forEach(function (item) {\n var index = categorySentimentVarianceData.categories.findIndex(function (c) {\n return c.categoryId == item.categoryId;\n });\n item.positive = item.positive ? item.positive : 0;\n item.negative = item.negative ? item.negative : 0;\n item.neutral = item.neutral ? item.neutral : 0;\n item.insensitive = item.insensitive ? item.insensitive : 0;\n var category = {};\n category.mainCategory = parentCategoryName == null;\n category.parentCategoryName = parentCategoryName;\n category.categoryId = item.categoryId;\n if (index == -1) { //before values are 0\n category.name = item.value;\n category.beforeTotal = 0;\n category.beforeCategoryTotal = 0;\n category.beforeCount = 0;\n category.beforeCategoryCount = 0;\n category.positiveBeforeCount = 0;\n category.negativeBeforeCount = 0;\n category.neutralBeforeCount = 0;\n category.insensitiveBeforeCount = 0;\n } else {\n category = categorySentimentVarianceData.categories[index];\n }\n category.nowTotal = item.count;\n category.nowCategoryTotal = item.positive + item.negative + item.neutral + item.insensitive;\n category.nowCount = afterTotalData != 0 ? round1Decimal(category.nowTotal * 100 / afterTotalData) : 0;\n category.nowCategoryCount = afterTotalCategoryData != 0 ? round1Decimal(category.nowCategoryTotal * 100 / afterTotalCategoryData) : 0;\n category.positiveNowCount = item.positive;\n category.negativeNowCount = item.negative;\n category.neutralNowCount = item.neutral;\n category.insensitiveNowCount = item.insensitive;\n category.order = item.order;\n if (index == -1) {\n categorySentimentVarianceData.categories.push(category);\n } else {\n categorySentimentVarianceData.categories[index] = category\n }\n if (item.subs) {\n fillCategorySentimentVarianceAfterData(item.subs, afterTotalData, afterTotalCategoryData, categorySentimentVarianceData, item.value);\n }\n });\n }\n\n function setDirections(d) {\n var directions = ['top', 'bottom'];\n if (d.positiveBeforeCount > d.positiveNowCount) {\n d.positiveDirection = directions[1];\n } else if (d.positiveBeforeCount < d.positiveNowCount) {\n d.positiveDirection = directions[0];\n } else {\n d.positiveDirection = \"none\";\n }\n if (d.negativeBeforeCount > d.negativeNowCount) {\n d.negativeDirection = directions[0];\n } else if (d.negativeBeforeCount < d.negativeNowCount) {\n d.negativeDirection = directions[1];\n } else {\n d.negativeDirection = \"none\";\n }\n }\n\n function setRatios(category, maxNowCount, maxNowCountRatio, useRatio, multiplierValue) {\n var d = category;\n var directions = ['top', 'bottom'];\n maxNowCount = Math.max(maxNowCount, d.positiveNowCount, (-1) * d.negativeNowCount);\n maxNowCountRatio = Math.max(maxNowCountRatio, d.positiveNowCountRatio, (-1) * d.negativeNowCountRatio);\n if (useRatio) {\n if (d.positiveBeforeCountRatio > d.positiveNowCountRatio) {\n d.positiveDirection = directions[1];\n } else if (d.positiveBeforeCountRatio < d.positiveNowCountRatio) {\n d.positiveDirection = directions[0];\n } else {\n d.positiveDirection = \"none\";\n }\n if (d.negativeBeforeCountRatio > d.negativeNowCountRatio) {\n d.negativeDirection = directions[0];\n } else if (d.negativeBeforeCountRatio < d.negativeNowCountRatio) {\n d.negativeDirection = directions[1];\n } else {\n d.negativeDirection = \"none\";\n }\n\n } else {\n if (d.positiveBeforeCount > d.positiveNowCount) {\n d.positiveDirection = directions[1];\n } else if (d.positiveBeforeCount < d.positiveNowCount) {\n d.positiveDirection = directions[0];\n } else {\n d.positiveDirection = \"none\";\n }\n if (d.negativeBeforeCount > d.negativeNowCount) {\n d.negativeDirection = directions[0];\n } else if (d.negativeBeforeCount < d.negativeNowCount) {\n d.negativeDirection = directions[1];\n } else {\n d.negativeDirection = \"none\";\n }\n }\n d.negativeChange = '' + Math.abs(-d.negativeNowCount - (-d.negativeBeforeCount)).toFixed(0);\n d.positiveChange = '' + Math.abs(d.positiveNowCount - d.positiveBeforeCount).toFixed(0);\n if (multiplierValue || multiplierValue == 1) {\n d.negativeChangeRatio = '' + Math.abs(-d.negativeNowCountRatio - (-d.negativeBeforeCountRatio)).toFixed(1);\n d.positiveChangeRatio = '' + Math.abs(d.positiveNowCountRatio - d.positiveBeforeCountRatio).toFixed(1);\n } else {\n d.negativeChangeRatio = '' + Math.abs(-d.negativeNowCountRatio - (-d.negativeBeforeCountRatio)).toFixed(0);\n d.positiveChangeRatio = '' + Math.abs(d.positiveNowCountRatio - d.positiveBeforeCountRatio).toFixed(0);\n }\n if (d.visibleName === undefined || d.visibleName === null) {\n d.visibleName = d.name;\n }\n }\n\n function round1Decimal(numb) {\n return Math.round((numb + Number.EPSILON) * 10) / 10;\n }\n\n this.parseNotificationChart = function (beforeResponse, afterResponse, moduleId, key, beforeStartDate, beforeEndDate, afterStartDate, afterEndDate) {\n var notifications = {\n 'data': {}\n }\n var moduleFacetBefore = beforeResponse.facets.filter(function (f) {\n return f.key == moduleId\n })[0];\n var facetBefore = {\n 'count': 0,\n 'list': []\n }\n if (moduleFacetBefore) {\n facetBefore.count = moduleFacetBefore.count;\n }\n if (facetBefore['count'] > 0) {\n //if (true) { //@todo if no filter\n facetBefore['list'] = moduleFacetBefore.facetList;\n //} else {\n //facetBefore['list'] = moduleFacetBefore.facetList[0].subs;\n //}\n }\n var totalBeforeCount = 0;\n var beforePositive = 0;\n var beforeNegative = 0;\n var beforeNeutral = 0;\n var beforeInsensitive = 0;\n for (var i = 0; i < facetBefore['list'].length; i++) {\n var facet = facetBefore['list'][i];\n facet.count = facet.count ? facet.count : 0;\n facet.positive = facet.positive ? facet.positive : 0;\n facet.neutral = facet.neutral ? facet.neutral : 0;\n facet.negative = facet.negative ? facet.negative : 0;\n facet.insensitive = facet.insensitive ? facet.insensitive : 0;\n totalBeforeCount += facet.count;\n beforePositive += facet.positive;\n beforeNeutral += facet.neutral;\n beforeNegative += facet.negative;\n beforeInsensitive += facet.insensitive;\n }\n notifications.data.totalBeforeCount = beforeResponse.count;\n notifications.data.beforeCategoryCount = (beforePositive + beforeNegative + beforeNeutral + beforeInsensitive);\n if (beforePositive != 0) {\n notifications.data.positiveBeforePercent = Math.floor((beforePositive * 100) / notifications.data.beforeCategoryCount * 100) / 100;\n } else {\n notifications.data.positiveBeforePercent = 0;\n }\n if (beforeNeutral != 0) {\n notifications.data.neutralBeforePercent = (beforeNeutral * 100) / notifications.data.beforeCategoryCount;\n } else {\n notifications.data.neutralBeforePercent = 0;\n }\n if (beforeNegative != 0) {\n notifications.data.negativeBeforePercent = Math.floor((beforeNegative * 100) / notifications.data.beforeCategoryCount * 100) / 100;\n } else {\n notifications.data.negativeBeforePercent = 0;\n }\n if (beforeInsensitive != 0) {\n notifications.data.insensitiveBeforePercent = (beforeInsensitive * 100) / notifications.data.beforeCategoryCount;\n } else {\n notifications.data.insensitiveBeforePercent = 0;\n }\n notifications.data.beforePositive = beforePositive;\n notifications.data.beforeNegative = beforeNegative;\n notifications.data.beforeNeutral = beforeNeutral;\n notifications.data.beforeInsensitive = beforeInsensitive;\n notifications.data.beforeCategoryDocumentRate = beforeResponse.count != 0 ? Math.floor(((beforePositive + beforeNegative + beforeNeutral + beforeInsensitive) / beforeResponse.count)*100) / 100 : 0;\n notifications.data.beforeEmptyFullDocumentRate = beforeResponse.count != 0 ? Math.floor(((beforeResponse.count - beforeResponse.contentlessDocCount) / beforeResponse.count)*100) / 100 : 0;\n notifications.data.beforeNonEmptyDocumentCount = (beforeResponse.count - beforeResponse.contentlessDocCount);\n \n /////after process\n\n var moduleFacetAfter = afterResponse.facets.filter(function (f) {\n return f.key == moduleId\n })[0];\n var facetAfter = {\n 'count': 0,\n 'list': []\n }\n if (moduleFacetAfter) {\n facetAfter.count = moduleFacetAfter.count;\n }\n if (facetAfter['count'] > 0) {\n //if (true) { //@todo if no filter\n facetAfter['list'] = moduleFacetAfter.facetList;\n //} else {\n //facetAfter['list'] = moduleFacetAfter.facetList[0].subs;\n //}\n }\n\n var totalAfterCount = 0;\n var afterPositive = 0;\n var afterNegative = 0;\n var afterNeutral = 0;\n var afterInsensitive = 0;\n for (i = 0; i < facetAfter['list'].length; i++) {\n facet = facetAfter['list'][i];\n facet.count = facet.count ? facet.count : 0;\n facet.positive = facet.positive ? facet.positive : 0;\n facet.neutral = facet.neutral ? facet.neutral : 0;\n facet.negative = facet.negative ? facet.negative : 0;\n facet.insensitive = facet.insensitive ? facet.insensitive : 0;\n totalAfterCount += facet.count;\n afterPositive += facet.positive;\n afterNeutral += facet.neutral;\n afterNegative += facet.negative;\n afterInsensitive += facet.insensitive;\n }\n notifications.data.totalAfterCount = afterResponse.count;\n notifications.data.afterCategoryCount = (afterPositive + afterNegative + afterNeutral + afterInsensitive);\n if (afterPositive != 0) {\n notifications.data.positiveAfterPercent = Math.floor(((afterPositive * 100) / notifications.data.afterCategoryCount) * 100) / 100; \n } else {\n notifications.data.positiveAfterPercent = 0.0;\n }\n if (afterNeutral != 0) {\n notifications.data.neutralAfterPercent = (afterNeutral * 100) / notifications.data.afterCategoryCount;\n } else {\n notifications.data.neutralAfterPercent = 0.0;\n }\n if (afterNegative != 0) {\n notifications.data.negativeAfterPercent = Math.floor((afterNegative * 100) / notifications.data.afterCategoryCount * 100) / 100;\n } else {\n notifications.data.negativeAfterPercent = 0.0;\n }\n if (afterInsensitive != 0) {\n notifications.data.insensitiveAfterPercent = (afterInsensitive * 100) / notifications.data.afterCategoryCount;\n } else {\n notifications.data.insensitiveAfterPercent = 0.0;\n }\n notifications.data.afterPositive = afterPositive;\n notifications.data.afterNegative = afterNegative;\n notifications.data.afterNeutral = afterNeutral;\n notifications.data.afterInsensitive = afterInsensitive;\n notifications.data.afterCategoryDocumentRate = Math.floor(((afterPositive + afterNegative + afterNeutral + afterInsensitive) / afterResponse.count) * 100) / 100;\n notifications.data.afterEmptyFullDocumentRate = Math.floor(((afterResponse.count - afterResponse.contentlessDocCount) / afterResponse.count) * 100) / 100;\n notifications.data.afterNonEmptyDocumentCount = (afterResponse.count - afterResponse.contentlessDocCount);\n\n var chartData = {\n 'sentimentPositiveVarianceChart': [{\n values: [{\n x: 0,\n y: [notifications.data.positiveBeforePercent, notifications.data.beforePositive, notifications.data.beforeCategoryCount]\n }, {\n x: 1,\n y: [notifications.data.positiveAfterPercent, notifications.data.afterPositive, notifications.data.afterCategoryCount]\n }],\n key: 'Positive',\n color: '#4caf50',\n area: true\n }],\n 'sentimentNegativeVarianceChart': [{\n values: [{\n x: 0,\n y: [notifications.data.negativeBeforePercent, notifications.data.beforeNegative, notifications.data.beforeCategoryCount]\n }, {\n x: 1,\n y: [notifications.data.negativeAfterPercent, notifications.data.afterNegative, notifications.data.afterCategoryCount]\n }],\n key: 'Negative',\n color: '#f44336',\n area: true\n }],\n 'totalVarianceChart': [{\n values: [{\n x: 0,\n y: [notifications.data.totalBeforeCount, notifications.data.beforeNonEmptyDocumentCount]\n },\n {\n x: 1,\n y: [notifications.data.totalAfterCount, notifications.data.afterNonEmptyDocumentCount]\n }\n ],\n key: 'Total',\n color: '#03A9F4',\n area: true\n }],\n 'categoryDocumentRate': [{\n values: [{\n x: 0,\n y: [notifications.data.beforeCategoryDocumentRate, notifications.data.beforeCategoryCount, notifications.data.totalBeforeCount]\n },\n {\n x: 1,\n y: [notifications.data.afterCategoryDocumentRate, notifications.data.afterCategoryCount, notifications.data.totalAfterCount]\n }\n ],\n key: 'CatDocRate',\n color: '#03A9F4',\n area: true\n }],\n 'emptyFullDocumentRate': [{\n values: [{\n x: 0,\n y: [notifications.data.beforeEmptyFullDocumentRate, notifications.data.beforeNonEmptyDocumentCount, notifications.data.totalBeforeCount]\n },\n {\n x: 1,\n y: [notifications.data.afterEmptyFullDocumentRate, notifications.data.afterNonEmptyDocumentCount, notifications.data.totalAfterCount]\n }\n ],\n key: 'EmptyFullRate',\n color: '#03A9F4',\n area: true\n }]\n }\n \n notifications['chartData'] = chartData;\n var options = {\n chart: {\n type: 'lineChart',\n color: ['#03A9F4'],\n height: 40,\n margin: {\n top: 4,\n right: 4,\n bottom: 4,\n left: 4\n },\n isArea: true,\n interpolate: 'cardinal',\n clipEdge: true,\n duration: 500,\n showXAxis: false,\n showYAxis: false,\n showLegend: false,\n useInteractiveGuideline: true,\n x: function (d) {\n return d.x;\n },\n y: function (d) {\n return d.y[0];\n },\n interactiveLayer: {\n tooltip: {\n gravity: 's',\n classes: 'gravity-s',\n contentGenerator: function (d) {\n var key = getNotificationTooltipKey(d.series[0]);\n var value = getNotificationTooltipValue(d.series[0]);\n var color = getNotificationTooltipColor(d.series[0]);\n var head = d.index == 1 ? afterStartDate.toLocaleDateString('en-GB') + \" - \" + afterEndDate.toLocaleDateString('en-GB') : beforeStartDate.toLocaleDateString('en-GB') + \" - \" + beforeEndDate.toLocaleDateString('en-GB');\n var header =\n \"\" +\n \"\" +\n \"\" +\n \"\" + head + \"\" +\n \"\" +\n \"\" +\n \"\";\n var rows = \"\";\n for (var i = 0; i < value.length; i++) {\n rows +=\n \"\" +\n \"
\" +\n \"\" + key[i] + \"\" +\n \"\";\n if ((d.series[0].key == \"Positive\" || d.series[0].key == \"Negative\") && i == 2)\n rows += \"%\";\n rows += value[i] + \"\" +\n \"\";\n }\n\n return \"\" +\n header +\n \"\" +\n rows +\n \"\" +\n \"
\";\n }\n }\n }\n }\n };\n notifications['options'] = options;\n return notifications;\n }\n\n this.setCategoryChangeChartData = function (response, level, color, categories) {\n var result = {};\n result.data = [];\n result.uniqueKeys = [];\n var facet = response.facets.filter(function (m) { return m.key.startsWith(\"category_change_m\") })[0];\n if (facet && facet.facetList) {\n var categoryChangesByLevel = facet.facetList.filter(function (m) { return m.value.startsWith(\"l\" + level + \"->\") });\n var categoryChanges = categoryChangesByLevel.filter(function (m) {\n var splitedCategoryChange = m.value.split(\"->\");\n return splitedCategoryChange.length > 2;\n })\n\n for (var i = 0; i < categoryChanges.length; i++) {\n var data = {};\n var splitedCategoryChange = categoryChanges[i].value.split(\"->\");\n data[\"key\"] = getCategoryAlias(splitedCategoryChange[1], categories) + \" -> \" + getCategoryAlias(splitedCategoryChange[2], categories);\n data[getCategoryAlias(splitedCategoryChange[1], categories) + \" -> \" + getCategoryAlias(splitedCategoryChange[2], categories)] = categoryChanges[i].count\n result.data.push(data);\n result.uniqueKeys.push({\n name: getCategoryAlias(splitedCategoryChange[1], categories) + \" -> \" + getCategoryAlias(splitedCategoryChange[2], categories),\n color: color\n })\n }\n }\n\n return result;\n }\n\n function getCategoryAlias(catName, categories) {\n var cat = categories.filter(function (m) { return m.name == catName })[0];\n var localVariable = cat.localVariables.filter(function (m) { return m.language == $translate.use(); })[0];\n if (localVariable) {\n return localVariable.value;\n } else {\n return catName;\n }\n }\n\n this.setChangedUserChartData = function (response) {\n var result = {};\n result.data = [];\n result.uniqueKeys = [];\n var facet = response.facets.filter(function (m) { return m.key == \"first_updated_by_s,updated_by_s\" })[0];\n if (facet && facet.facetList) {\n for (var i = 0; i < facet.facetList.length; i++) {\n var data = {};\n data[\"key\"] = facet.facetList[i].value;\n data[facet.facetList[i].value] = facet.facetList[i].count\n result.data.push(data);\n result.uniqueKeys.push({\n name: facet.facetList[i].value,\n color: \"#ff8800\"\n })\n }\n }\n return result;\n }\n\n this.setChangerUserChartData = function (response) {\n var result = {};\n result.data = [];\n result.uniqueKeys = [];\n var facet = response.facets.filter(function (m) { return m.key == \"first_updated_by_s,updated_by_s\" })[0];\n if (facet && facet.facetList) {\n for (var i = 0; i < facet.facetList.length; i++) {\n var subFacets = facet.facetList[i].subs ? facet.facetList[i].subs : [];\n for (var j = 0; j < subFacets.length; j++) {\n var resultData = result.data.filter(function (m) { return m.key == subFacets[j].value })[0];\n if (resultData) {\n resultData[subFacets[j].value] = resultData[subFacets[j].value] + subFacets[j].count;\n } else {\n var data = {};\n data[\"key\"] = subFacets[j].value;\n data[subFacets[j].value] = subFacets[j].count;\n result.data.push(data);\n result.uniqueKeys.push({\n name: subFacets[j].value,\n color: \"#ff8800\"\n })\n }\n }\n }\n }\n return result;\n }\n\n this.setAiAproveTrendData = function (response, readyResponse) {\n var result = {};\n result.range = { start: 0, end: 100 };\n result.data = [];\n result.uniqueKeys = [{ name: $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_4.RATE\"), color: \"#ff6600\" }];\n for (var i = 0; i < readyResponse.ranges.length; i++) {\n var data = {\n \"year\": readyResponse.ranges[i].date,\n \"Yapay Zeka\": 0,\n \"draftedFalse\": 0\n }\n data[$translate.instant(\"REPORT.DASHBOARD_TEMPLATE_4.RATE\")] = 0;\n result.data.push(data)\n }\n var readyDraftedFacet = readyResponse.facets.filter(function (m) { return m.key == \"drafted_b\" })[0];\n if (readyDraftedFacet) {\n var draftedFalseFacet = readyDraftedFacet.facetList.filter(function (m) { return m.value == false })[0];\n if (draftedFalseFacet) {\n var draftedFalseRanges = draftedFalseFacet.ranges[0].counts;\n for (var i = 0; i < draftedFalseRanges.length; i++) {\n var resultData = result.data.filter(function (m) { return m.year == draftedFalseRanges[i].date })[0];\n if (resultData) {\n resultData[\"draftedFalse\"] = draftedFalseRanges[i].count;\n }\n }\n }\n }\n \n var categoryCountFacet = response.facets.filter(function (m) { return m.key == \"category_count_i\" })[0];\n\n if (categoryCountFacet) {\n for (var i = 0; i < categoryCountFacet.facetList.length; i++) {\n var rangeFacet = categoryCountFacet.facetList[i].ranges[0].counts;\n for (var j = 0; j < rangeFacet.length; j++) {\n var resultData = result.data.filter(function (m) { return m.year == rangeFacet[j].date })[0];\n if (resultData) {\n resultData[\"Yapay Zeka\"] = resultData[\"Yapay Zeka\"] + rangeFacet[j].count;\n }\n }\n }\n }\n\n for (var i = 0; i < result.data.length; i++) {\n if (result.data[i][\"Yapay Zeka\"])\n result.data[i][$translate.instant(\"REPORT.DASHBOARD_TEMPLATE_4.RATE\")] = ((result.data[i][\"draftedFalse\"] / result.data[i][\"Yapay Zeka\"]) * 100).toFixed(2);\n else\n result.data[i][$translate.instant(\"REPORT.DASHBOARD_TEMPLATE_4.RATE\")] = 0;\n }\n return result;\n }\n\n this.setAiMarkingTrendData = function (response, readyResponse){\n var result = {};\n result.data = [];\n result.uniqueKeys = [{ name: $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_4.AI\"), color: \"#3373a7\" }, { name: $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_4.HUMAN\"), color: \"#ff6600\" }];\n for (var i = 0; i < response.ranges.length; i++) {\n var data = {\n \"year\": response.ranges[i].date\n }\n data[$translate.instant(\"REPORT.DASHBOARD_TEMPLATE_4.AI\")] = 0;\n data[$translate.instant(\"REPORT.DASHBOARD_TEMPLATE_4.HUMAN\")] = 0;\n result.data.push(data);\n }\n var draftedFacet = readyResponse.facets.filter(function (m) { return m.key == \"drafted_b\" })[0];\n if (draftedFacet) {\n var draftedTrueFacet = draftedFacet.facetList.filter(function (m) { return m.value == true })[0];\n if (draftedTrueFacet) {\n var draftedTrueRanges = draftedTrueFacet.ranges[0].counts;\n for (var i = 0; i < draftedTrueRanges.length; i++) {\n var resultData = result.data.filter(function (m) { return m.year == draftedTrueRanges[i].date })[0];\n if (resultData) {\n resultData[$translate.instant(\"REPORT.DASHBOARD_TEMPLATE_4.HUMAN\")] = draftedTrueRanges[i].count;\n }\n }\n }\n }\n\n var categoryCountFacet = response.facets.filter(function (m) { return m.key == \"category_count_i\" })[0];\n if (categoryCountFacet) {\n for (var i = 0; i < categoryCountFacet.facetList.length; i++) {\n var rangeFacet = categoryCountFacet.facetList[i].ranges[0].counts;\n for (var j = 0; j < rangeFacet.length; j++) {\n var resultData = result.data.filter(function (m) { return m.year == rangeFacet[j].date })[0];\n if (resultData) {\n resultData[$translate.instant(\"REPORT.DASHBOARD_TEMPLATE_4.AI\")] = resultData[$translate.instant(\"REPORT.DASHBOARD_TEMPLATE_4.AI\")] + rangeFacet[j].count;\n }\n }\n }\n }\n \n for (var i = 0; i < result.data.length; i++) {\n result.data[i][$translate.instant(\"REPORT.DASHBOARD_TEMPLATE_4.AI\")] = result.data[i][$translate.instant(\"REPORT.DASHBOARD_TEMPLATE_4.AI\")] - result.data[i][$translate.instant(\"REPORT.DASHBOARD_TEMPLATE_4.HUMAN\")];\n }\n return result;\n }\n\n this.aiMarkingRateChart = function (facetQueries, dashboardModuleId) {\n var result = {};\n var data = [];\n var colors = [\"#3373a7\", \"#ff6600\"];\n\n data.push({\n key: $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_4.AI\"),//\"Yapay Zeka\",\n value: facetQueries[dashboardModuleId] - facetQueries[\"drafted_b:true\"]\n })\n\n data.push({\n key: $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_4.HUMAN\"),\n value: facetQueries[\"drafted_b:true\"]\n })\n\n result.data = data;\n result.colors = colors;\n\n return result;\n }\n\n this.aiAproveRateChart = function (readyResponse) {\n var result = {};\n var data = [];\n var colors = [\"#1da318\", \"#B90006\"];\n var draftedFacet = readyResponse.facets.filter(function (m) { return m.key == \"drafted_b\" })[0];\n var draftedTrue = draftedFacet ? draftedFacet.facetList.filter(function (m) { return m.value == true })[0] : null;\n var draftedFalse = draftedFacet ? draftedFacet.facetList.filter(function (m) { return m.value == false })[0] : null;\n\n data.push({\n key: $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_4.APROVED\"),\n value: draftedFalse ? draftedFalse.count : 0\n })\n\n data.push({\n key: $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_4.CHANGED\"),\n value: draftedTrue ? draftedTrue.count : 0\n })\n\n result.data = data;\n result.colors = colors;\n\n return result;\n }\n\n this.aiAproveRateDateChart = function (readyResponse) {\n var result = {};\n result.data = [];\n result.uniqueKeys = [];\n for (var i = 0; i < readyResponse.ranges.length; i++) {\n var data = {\n \"year\": readyResponse.ranges[i].date\n }\n data[$translate.instant(\"REPORT.DASHBOARD_TEMPLATE_4.CHANGED\")] = 0;\n data[$translate.instant(\"REPORT.DASHBOARD_TEMPLATE_4.APROVED\")] = 0;\n result.data.push(data);\n }\n var draftedFacet = readyResponse.facets.filter(function (m) { return m.key == \"drafted_b\" })[0];\n if (!draftedFacet) return result;\n for (var j = 0; j < draftedFacet.facetList.length; j++) {\n var dateRanges = draftedFacet.facetList[j].ranges[0].counts;\n var name = \"\";\n var color = \"\";\n if (draftedFacet.facetList[j].value == true) {\n name = $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_4.CHANGED\");\n color = \"#B90006\"\n } else {\n name = $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_4.APROVED\");\n color = \"#1da318\"\n }\n result.uniqueKeys.push({\n name: name,\n color: color\n });\n\n for (var i = 0; i < dateRanges.length; i++) {\n var resultData = result.data.filter(function (m) {return m.year == dateRanges[i].date })[0];\n if (resultData)\n resultData[name] = dateRanges[i].count;\n }\n }\n return result;\n }\n\n this.setUserCategoryChart = function (response, readyResponse, moduleid, categories, selectedChartCats) {\n var result = {};\n result.data = [];\n result.uniqueKeys = [];\n var categoryFacet = response.facets.filter(function (m) { return m.key == moduleid })[0];\n\n var readyCategoryFacets = readyResponse.facets.filter(function (m) { return m.key.startsWith('drafted_by_s,category_m') })[0];\n if (readyCategoryFacets && readyCategoryFacets.facetList) {\n for (var i = 0; i < readyCategoryFacets.facetList.length; i++) {\n var categoryResults = {};\n userCategoryCountsRecursive(readyCategoryFacets.facetList[i].subs, categoryResults, categories, selectedChartCats, result.uniqueKeys)\n categoryResults.key = readyCategoryFacets.facetList[i].value;\n result.data.push(categoryResults);\n }\n }\n \n\n var categoryResults = {};\n userCategoryCountsRecursive(categoryFacet.facetList, categoryResults, categories, selectedChartCats, result.uniqueKeys);\n categoryResults.key = $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_4.AI\");\n\n for (var i = 0; i < result.uniqueKeys.length; i++) {\n var readyCategoryCount = 0;\n for (var j = 0; j < result.data.length; j++) {\n if (result.data[j][result.uniqueKeys[i].name]) {\n readyCategoryCount += result.data[j][result.uniqueKeys[i].name]\n }\n }\n categoryResults[result.uniqueKeys[i].name] = categoryResults[result.uniqueKeys[i].name] - readyCategoryCount;\n readyCategoryCount = 0;\n }\n result.data.push(categoryResults);\n return result;\n }\n\n function userCategoryCountsRecursive(facetList, categoryResults, categories, selectedChartCats, uniqueKeys) {\n for (var i = 0; i < facetList.length; i++) {\n var facet = facetList[i];\n facet.positive = facet.positive ? facet.positive : 0;\n facet.negative = facet.negative ? facet.negative : 0;\n facet.neutral = facet.neutral ? facet.neutral : 0;\n facet.insensitive = facet.insensitive ? facet.insensitive : 0;\n var name = getCategoryName(facet.categoryId, categories);\n if (selectedChartCats.length > 0) {\n var selectedChartCat = selectedChartCats.filter(function (m) { return m.id == facet.categoryId })[0];\n } else {\n if (facet.category && facet.category.parentModuleCategory == null) {\n name = $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_4.CATEGORIES\");\n var selectedChartCat = {\n color:\"rgb(103, 113, 220)\"\n }\n }\n }\n if (selectedChartCat) {\n categoryResults[name] = categoryResults[name] ? categoryResults[name] : 0;\n categoryResults[name] = categoryResults[name] + (facet.positive + facet.negative + facet.neutral + facet.insensitive);\n\n //categoryResults[name] = facet.positive + facet.negative + facet.neutral + facet.insensitive;\n var uniqueIncludes = uniqueKeys.filter(function (m) { return m.name == name })[0]\n if (uniqueIncludes == null && name) uniqueKeys.push({\n name: name,\n color: selectedChartCat.color\n });\n }\n userCategoryCountsRecursive(facet.subs ? facet.subs : [], categoryResults, categories, selectedChartCats, uniqueKeys);\n }\n }\n\n this.setCategoryTimelineData = function (response, moduleid, categories, selectedChartCats) {\n var result = {};\n result.data = [];\n result.uniqueKeys = [];\n for (var i = 0; i < response.ranges.length; i++) {\n result.data.push({\n \"year\": response.ranges[i].date\n })\n }\n\n var facet = response.facets.filter(function (k) { return k.key == moduleid })[0];\n getCategoryCountsRecursive(facet.facetList, result, categories, selectedChartCats);\n return result;\n }\n\n function getCategoryCountsRecursive(facetList, result, categories, selectedChartCats) {\n for (var i = 0; i < facetList.length; i++) {\n for (var j = 0; j < result.data.length; j++) {\n var dateRange = facetList[i].ranges[0].counts.filter(function (m) { return m.date == result.data[j].year; })[0];\n var selectedChartCat = selectedChartCats.filter(function (m) { return m.id == facetList[i].categoryId })[0];\n if (selectedChartCats.length > 0) {\n if (dateRange && selectedChartCat) {\n var name = getCategoryName(facetList[i].categoryId, categories);\n if (name) result.data[j][name] = dateRange.count;\n var uniqueIncludes = result.uniqueKeys.filter(function (m) { return m.name == name })[0]\n if (uniqueIncludes == null && name) result.uniqueKeys.push({\n name: name,\n color: selectedChartCat.color\n });\n }\n } else {\n if (dateRange && facetList[i].category && facetList[i].category.parentModuleCategory == null) {\n var catsTranslate = $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_4.CATEGORIES\")\n result.data[j][catsTranslate] = result.data[j][catsTranslate] ? result.data[j][catsTranslate] : 0;\n result.data[j][catsTranslate] = result.data[j][catsTranslate] + dateRange.count;\n var uniqueIncludes = result.uniqueKeys.filter(function (m) { return m.name == catsTranslate })[0];\n if (uniqueIncludes == null) result.uniqueKeys.push({\n name: catsTranslate,\n color: \"rgb(103, 113, 220)\"\n });\n }\n }\n \n }\n getCategoryCountsRecursive(facetList[i].subs ? facetList[i].subs : [], result, categories, selectedChartCats);\n }\n }\n\n\n\n var externalCategories = $translate.use() == \"tr\" ? \"Diğerleri\" : \"Others\";\n\n this.summarizeDataToNCategories = function (data, n, groupOrder, useRatio) {\n var multiplierValue = data.multiplierValue;\n data = data.sort(function (a, b) { return b['nowTotal'] - a['nowTotal'] });\n var beforeTotalDataCount = data[0]['beforeTotal'] * 100 / data[0]['beforeCount'];\n var nowTotalDataCount = data[0]['nowTotal'] * 100 / data[0]['nowCount'];\n data = data.slice(n * (groupOrder - 1), data.length);\n var isThereAnyOtherOrderWithoutZero = false;\n var maxOrder = 0;\n for (var i = 0; i < data.length; i++) {\n if (data[i].order != 0) {\n isThereAnyOtherOrderWithoutZero = true;\n if (data[i].order > maxOrder) {\n maxOrder = data[i].order;\n }\n }\n }\n if (data.length <= n) {\n return data;\n }\n var dataNew = data.slice(0, n - 1);\n var dataSummarize = data.slice(n - 1, data.length);\n var dataSummarized = {};\n dataSummarized.name = externalCategories;\n dataSummarized.shortName = externalCategories;\n var countCategory = dataSummarize.length;\n dataSummarized.nowCount = dataSummarize.map(function (d) { return d['nowCount']; }).reduce(function (sum, current) { return sum + current; }) / countCategory;\n dataSummarized.beforeCount = dataSummarize.map(function (d) { return d['beforeCount']; }).reduce(function (sum, current) { return sum + current; }) / countCategory;\n dataSummarized.beforeTotal = dataSummarize.map(function (d) { return d['beforeTotal']; }).reduce(function (sum, current) { return sum + current; });\n dataSummarized.beforeCategoryTotal = dataSummarize.map(function (d) { return d['beforeCategoryTotal']; }).reduce(function (sum, current) { return sum + current; });\n dataSummarized.nowTotal = dataSummarize.map(function (d) { return d['nowTotal']; }).reduce(function (sum, current) { return sum + current; });\n dataSummarized.nowCategoryTotal = dataSummarize.map(function (d) { return d['nowCategoryTotal'] ? d['nowCategoryTotal'] : 0; }).reduce(function (sum, current) { return sum + current; });\n dataSummarized.order = isThereAnyOtherOrderWithoutZero == false ? 0 : maxOrder + 1;\n dataSummarized.positiveBeforeTotal = Math.floor(dataSummarize.map(function (d) { return d['positiveBeforeTotal']; }).reduce(function (sum, current) { return sum + current; }));\n dataSummarized.positiveNowTotal = Math.floor(dataSummarize.map(function (d) { return d['positiveNowTotal']; }).reduce(function (sum, current) { return sum + current; }));\n dataSummarized.negativeBeforeTotal = Math.floor(dataSummarize.map(function (d) { return d['negativeBeforeTotal']; }).reduce(function (sum, current) { return sum + current; }));\n dataSummarized.negativeNowTotal = Math.floor(dataSummarize.map(function (d) { return d['negativeNowTotal']; }).reduce(function (sum, current) { return sum + current; }));\n dataSummarized.beforeCategoryCount = dataSummarize.map(function (d) { return d['beforeCategoryCount']; }).reduce(function (sum, current) { return sum + current; });\n dataSummarized.nowCategoryCount = dataSummarize.map(function (d) { return d['nowCategoryCount']; }).reduce(function (sum, current) { return sum + current; });\n\n if (dataSummarized['beforeTotal'] == 0) {\n dataSummarized.positiveBeforeCount = 0;\n dataSummarized.negativeBeforeCount = 0;\n } else {\n if (multiplierValue && multiplierValue != 1) {\n dataSummarized.positiveBeforeCount = parseInt(Math.floor(100 * dataSummarized['positiveBeforeTotal'] / dataSummarized['beforeTotal']) * multiplierValue / 100);\n dataSummarized.negativeBeforeCount = parseInt(Math.floor(100 * dataSummarized['negativeBeforeTotal'] / dataSummarized['beforeTotal']) * multiplierValue / 100);\n } else {\n dataSummarized.positiveBeforeCount = Math.floor(100 * dataSummarized['positiveBeforeTotal'] / dataSummarized['beforeTotal']);\n dataSummarized.negativeBeforeCount = Math.floor(100 * dataSummarized['negativeBeforeTotal'] / dataSummarized['beforeTotal']);\n }\n }\n if (dataSummarized['nowTotal'] == 0) {\n dataSummarized.positiveNowCount = 0;\n dataSummarized.negativeNowCount = 0;\n } else {\n if (multiplierValue && multiplierValue != 1) {\n dataSummarized.positiveNowCount = parseInt(Math.floor(100 * dataSummarized['positiveNowTotal'] / dataSummarized['nowTotal']) * multiplierValue / 100);\n dataSummarized.negativeNowCount = parseInt(Math.floor(100 * dataSummarized['negativeNowTotal'] / dataSummarized['nowTotal']) * multiplierValue / 100);\n } else {\n dataSummarized.positiveNowCount = Math.floor(100 * dataSummarized['positiveNowTotal'] / dataSummarized['nowTotal']);\n dataSummarized.negativeNowCount = Math.floor(100 * dataSummarized['negativeNowTotal'] / dataSummarized['nowTotal']);\n }\n\n }\n if (beforeTotalDataCount > 0) {\n dataSummarized.negativeBeforeCountRatio = multiplierValue && multiplierValue != 1 ? parseInt(Math.round((dataSummarized.negativeBeforeTotal * 100 / beforeTotalDataCount) * 10) / 10) : Math.round((dataSummarized.negativeBeforeTotal * 100 / beforeTotalDataCount) * 10) / 10;\n dataSummarized.positiveBeforeCountRatio = multiplierValue && multiplierValue != 1 ? parseInt(Math.round((dataSummarized.positiveBeforeTotal * 100 / beforeTotalDataCount) * 10) / 10) : Math.round((dataSummarized.positiveBeforeTotal * 100 / beforeTotalDataCount) * 10) / 10;\n } else {\n dataSummarized.negativeBeforeCountRatio = multiplierValue && multiplierValue != 1 ? 0 : 0.0;\n dataSummarized.positiveBeforeCountRatio = multiplierValue && multiplierValue != 1 ? 0 : 0.0;\n }\n if (nowTotalDataCount > 0) {\n dataSummarized.negativeNowCountRatio = multiplierValue && multiplierValue != 1 ? parseInt(Math.round((dataSummarized.negativeNowTotal * 100 / nowTotalDataCount) * 10) / 10) : Math.round((dataSummarized.negativeNowTotal * 100 / nowTotalDataCount) * 10) / 10;\n dataSummarized.positiveNowCountRatio = multiplierValue && multiplierValue != 1 ? parseInt(Math.round((dataSummarized.positiveNowTotal * 100 / nowTotalDataCount) * 10) / 10) : Math.round((dataSummarized.positiveNowTotal * 100 / nowTotalDataCount) * 10) / 10;\n } else {\n dataSummarized.negativeNowCountRatio = multiplierValue && multiplierValue != 1 ? 0 : 0.0;\n dataSummarized.positiveNowCountRatio = multiplierValue && multiplierValue != 1 ? 0 : 0.0;\n }\n\n var maxNowCount = 0;\n var maxNowCountRatio = 0;\n\n dataSummarized.beforeCategoryCount = dataSummarized.beforeCategoryCount ? dataSummarized.beforeCategoryCount : 0;\n dataSummarized.nowCategoryCount = dataSummarized.nowCategoryCount ? dataSummarized.nowCategoryCount : 0;\n dataSummarized.beforeCount = dataSummarized.beforeCount ? dataSummarized.beforeCount : 0;\n\n dataSummarized.negativeChange = '' + Math.abs(-dataSummarized.negativeNowCount - (-dataSummarized.negativeBeforeCount)).toFixed(0);\n dataSummarized.positiveChange = '' + Math.abs(dataSummarized.positiveNowCount - dataSummarized.positiveBeforeCount).toFixed(0);\n dataSummarized.categoryChange = '' + Math.abs(dataSummarized.nowCategoryCount - dataSummarized.beforeCategoryCount).toFixed(1);\n\n dataSummarized.change = '' + Math.abs(dataSummarized.nowCount - dataSummarized.beforeCount).toFixed(1);\n\n setDirections(dataSummarized);\n setRatios(dataSummarized, maxNowCount, maxNowCountRatio, useRatio, multiplierValue);\n\n dataNew.push(dataSummarized);\n return dataNew;\n\n }\n\n\n\n function getCategoryName(categoryid, categories) {\n var category = categories.filter(function (m) { return m.id == categoryid })[0];\n var name = categoryid;\n if (category == null) return name;\n if (category.parentModuleCategory) {\n var localVariable = category.localVariables.filter(function (m) { return m.language == $translate.use(); })[0];\n var parentLocalVariable = category.parentModuleCategory.localVariables.filter(function (m) { return m.language == $translate.use(); })[0];\n var catAlias = localVariable ? localVariable.value : category.name;\n var parentCateAlias = parentLocalVariable ? parentLocalVariable.value : category.parentModuleCategory.name;\n name = parentCateAlias + \" -> \" + catAlias;\n } else {\n var localVariable = category.localVariables.filter(function (m) { return m.language == $translate.use(); })[0];\n if (localVariable) {\n name = localVariable.value;\n } else {\n name = category.name;\n }\n }\n return name;\n }\n\n function getNotificationTooltipKey(d){\n if (d.key === \"Positive\")\n return [$translate.instant(\"REPORT.DASHBOARD_TEMPLATE_2.CHART_TITLE.DOCUMENT_CHANGING_SUB_TITLES.POSITIVE_CATEGORY\"), $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_2.CHART_TITLE.DOCUMENT_CHANGING_SUB_TITLES.TOTAL_CATEGORY\"), $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_2.CHART_TITLE.DOCUMENT_CHANGING_SUB_TITLES.RATE\")];\n if (d.key === \"Negative\")\n return [$translate.instant(\"REPORT.DASHBOARD_TEMPLATE_2.CHART_TITLE.DOCUMENT_CHANGING_SUB_TITLES.NEGATIVE_CATEGORY\"), $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_2.CHART_TITLE.DOCUMENT_CHANGING_SUB_TITLES.TOTAL_CATEGORY\"), $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_2.CHART_TITLE.DOCUMENT_CHANGING_SUB_TITLES.RATE\")];\n if (d.key === \"Total\")\n return [$translate.instant(\"REPORT.DASHBOARD_TEMPLATE_2.CHART_TITLE.DOCUMENT_CHANGING_SUB_TITLES.TOTAL_DOCUMENTS\"), $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_2.CHART_TITLE.DOCUMENT_CHANGING_SUB_TITLES.NONEMPTY_DOCUMENTS\")];\n if (d.key === \"CatDocRate\")\n return [$translate.instant(\"REPORT.DASHBOARD_TEMPLATE_2.CHART_TITLE.DOCUMENT_CHANGING_SUB_TITLES.TOTAL_CATEGORY\"), $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_2.CHART_TITLE.DOCUMENT_CHANGING_SUB_TITLES.TOTAL_DOCUMENTS\"), $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_2.CHART_TITLE.DOCUMENT_CHANGING_SUB_TITLES.RATE\")];\n if (d.key === \"EmptyFullRate\")\n return [$translate.instant(\"REPORT.DASHBOARD_TEMPLATE_2.CHART_TITLE.DOCUMENT_CHANGING_SUB_TITLES.NONEMPTY_DOCUMENTS\"), $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_2.CHART_TITLE.DOCUMENT_CHANGING_SUB_TITLES.TOTAL_DOCUMENTS\"), $translate.instant(\"REPORT.DASHBOARD_TEMPLATE_2.CHART_TITLE.DOCUMENT_CHANGING_SUB_TITLES.RATE\")];\n return [d.key];\n }\n\n function getNotificationTooltipValue(d){\n if (d.key === \"Positive\")\n return [d.data.y[1], d.data.y[2], d.data.y[0]];\n if (d.key === \"Negative\")\n return [d.data.y[1], d.data.y[2], d.data.y[0]];\n if (d.key === \"Total\")\n return [d.data.y[0], d.data.y[1]];\n if (d.key === \"CatDocRate\")\n return [d.data.y[1], d.data.y[2], d.data.y[0]];\n if (d.key === \"EmptyFullRate\")\n return [d.data.y[1], d.data.y[2], d.data.y[0]];\n return [d.data.y[0]];\n }\n\n\n function getNotificationTooltipColor(d) {\n if (d.key === \"Positive\")\n return ['#4caf50', '#9B59B6'];\n if (d.key === \"Negative\")\n return ['#f44336', '#9B59B6'];\n if (d.key === \"Total\")\n return ['#03A9F4', '#D4AC0D']; \n if (d.key === \"CatDocRate\")\n return ['#9B59B6', '#03A9F4'];\n if (d.key === \"EmptyFullRate\")\n return ['#D4AC0D', '#03A9F4'];\n return [d.data.y[0]];\n }\n\n }\n\n})();\n\n\n(function() {\n 'use strict';\n\n angular\n .module('app.modules', [])\n .config(config);\n\n /** @ngInject */\n function config($stateProvider, $translatePartialLoaderProvider, msApiProvider, msNavigationServiceProvider, authProvider) {\n var navigation = 'app/navigation/layouts/horizontal-navigation/navigation.html';\n var navigationVertical = 'app/navigation/layouts/vertical-navigation/navigation.html';\n\n var types = [\"\", \"Classification\", \"Clustering\", \"TopicModeling\", \"RootCause\", \"Sentiment\", \"NamedEntity\",\"Classification\"];\n var user = authProvider.getCurrentUser();\n // State\n $stateProvider\n .state('app.modules', {\n abstract: true,\n })\n .state('app.modules.list', {\n url: '/',\n resolve: {\n control: function ($state) {\n if ((user.lastPassDate == null || user.lastPassDate < new Date()) && (user.userType == null || user.userType == 'DEFAULT')) {\n $state.go('app.renew_password');\n }\n }\n },\n views: {\n 'content@app': {\n templateUrl: 'app/main/apps/modules/views/list/list-view.html',\n controller: 'ListModuleController as vm'\n }\n },\n params: {\n view: null\n },\n bodyClass: 'modules'\n })\n .state('app.modules.create', {\n url: '/create',\n views: {\n 'content@app': {\n templateUrl: 'app/main/apps/modules/views/create/create-module.html',\n controller: 'CreateController as vm'\n }\n },\n data: {\n permission: 'MODULE/*/CREATE'\n },\n bodyClass: 'create'\n })\n .state('app.modules.create.classification', {\n url: '/classification',\n views: {\n 'content@app': {\n templateUrl: 'app/main/apps/modules/views/create/classification.html',\n controller: 'CreateModuleController as vm'\n }\n },\n bodyClass: 'create-classification',\n data: {\n type: 'classification',\n permission: 'MODULE/CLASSIFICATION/CREATE'\n },\n params: {\n parentModule: null,\n module:null\n }\n })\n .state('app.modules.create.clustering', {\n url: '/clustering',\n views: {\n 'content@app': {\n templateUrl: 'app/main/apps/modules/views/create/clustering.html',\n controller: 'CreateModuleController as vm'\n }\n },\n bodyClass: 'create-clustering',\n data: {\n type: 'clustering',\n permission: 'MODULE/CLUSTERING/CREATE'\n },\n params: {\n module: null\n }\n })\n .state('app.modules.create.topicmodeling', {\n url: '/topicmodeling',\n views: {\n 'content@app': {\n templateUrl: 'app/main/apps/modules/views/create/topicmodeling.html',\n controller: 'CreateModuleController as vm'\n }\n },\n bodyClass: 'create-topicmodeling',\n data: {\n type: 'topicmodeling',\n permission: 'MODULE/TOPICMODELING/CREATE'\n },\n params: {\n module: null\n }\n })\n .state('app.modules.create.rootcause', {\n url: '/rootcause',\n views: {\n 'content@app': {\n templateUrl: 'app/main/apps/modules/views/create/rootcause.html',\n controller: 'CreateModuleController as vm'\n }\n },\n bodyClass: 'create-rootcause',\n data: {\n type: 'rootcause',\n permission: 'MODULE/ROOTCAUSE/CREATE'\n },\n params: {\n module: null\n }\n })\n .state('app.modules.create.sentiment', {\n url: '/sentiment',\n views: {\n 'content@app': {\n templateUrl: 'app/main/apps/modules/views/create/sentiment.html',\n controller: 'CreateModuleController as vm'\n }\n },\n bodyClass: 'create-sentiment',\n data: {\n type: 'sentiment',\n permission: 'MODULE/SENTIMENT/CREATE'\n },\n params: {\n module: null\n }\n })\n .state('app.modules.create.namedentity', {\n url: '/namedentity',\n views: {\n 'content@app': {\n templateUrl: 'app/main/apps/modules/views/create/namedentity.html',\n controller: 'CreateModuleController as vm'\n }\n },\n bodyClass: 'create-namedentity',\n data: {\n type: 'namedentity',\n permission: 'MODULE/NAMEDENTITY/CREATE'\n },\n params: {\n module: null\n }\n })\n .state('app.modules.create.sentimentspecial', {\n url: '/sentimentspecial',\n views: {\n 'content@app': {\n templateUrl: 'app/main/apps/modules/views/create/classification.html',\n controller: 'CreateModuleController as vm'\n }\n },\n bodyClass: 'create-sentimentspecial',\n data: {\n type: 'sentimentspecial',\n permission: 'MODULE/CLASSIFICATION/CREATE'\n },\n params: {\n parentModule: null\n }\n })\n .state('app.modules.create.pipeline', {\n url: '/pipeline/:rm',\n views: {\n 'content@app': {\n templateUrl: 'app/main/apps/modules/views/create/pipeline.html',\n controller: 'CreateModulePipelineController as vm'\n }\n },\n params: {\n module: null,\n parentModule: null\n },\n data: {\n permission: 'PIPELINE/CREATE'\n },\n bodyClass: 'create-pipeline'\n })\n .state('app.modules.create.report', {\n url: '/report',\n views: {\n 'content@app': {\n templateUrl: 'app/main/apps/modules/views/create/report.html',\n controller: 'CreateReportController as vm'\n }\n },\n data: {\n permission: 'REPORT/CREATE'\n },\n bodyClass: 'create-report'\n })\n\n .state('app.module', {\n abstract: true,\n url: '/module/:id'\n })\n .state('app.module.overview', {\n url: '/overview',\n resolve: {\n $$module: function ($http, $stateParams, $rootScope, $q, $state, api, $log) {\n\n return $http({\n method: 'GET',\n url: '/api/module/' + $stateParams.id\n })\n .then(function (response) {\n $rootScope.selectedWorkspaceId = response.data.workspaceId;\n $stateParams.type = types[response.data.moduleType.id];\n $stateParams.name = response.data.name;\n $stateParams.workspaceId = response.data.workspaceId;\n $stateParams.color = response.data.moduleType.color;\n $stateParams.hasPipeline = response.data.pipeline != null;\n if ($stateParams.type === 'RootCause')\n $stateParams.hasClassifier = response.data.classifier != null;\n $stateParams.hideData = response.data.hideData;\n return response.data;\n },\n function (response) {\n $log.error(response);\n $state.go('app.modules.list');\n });\n },\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: function($stateParams) {\n var prefix = $stateParams.type.toLowerCase();\n var template = 'app/main/apps/modules/views/overview/' + prefix + '-overview.html';\n return template;\n },\n controllerProvider: function($stateParams) {\n var prefix = $stateParams.type;\n var controller = prefix + 'OverviewController as vm';\n return controller;\n }\n }\n },\n data: {\n permission: function($stateParams) {\n var prefix = $stateParams.type.toUpperCase();\n return 'MODULE/' + prefix + '/VIEW';\n }\n },\n bodyClass: 'overview'\n })\n .state('app.module.analysis', {\n url: '/analysis',\n resolve: {\n $$module: function ($http, $stateParams, $rootScope, $q, $log, $state) {\n return $http({\n method: 'GET',\n url: '/api/module/' + $stateParams.id\n })\n .then(function(response) {\n $stateParams.type = types[response.data.moduleType.id];\n $stateParams.name = response.data.name;\n $stateParams.color = response.data.moduleType.color;\n $stateParams.hasPipeline = response.data.pipeline != null;\n if ($stateParams.type === 'RootCause')\n $stateParams.hasClassifier = response.data.classifier != null;\n return response.data;\n },\n function (response) {\n $log.error(response);\n $state.go('app.modules.list');\n });\n },\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: 'app/main/apps/modules/views/analysis/analysis-overview.html',\n controller: 'AnalysisOverviewController as vm',\n css : 'app/main/apps/modules/views/analysis/analysis-overview.scss'\n }\n },\n data: {\n permission: function($stateParams) {\n var prefix = $stateParams.type.toUpperCase();\n return 'MODULE/' + prefix + '/DATA/VIEW';\n }\n },\n bodyClass: 'analysis'\n })\n .state('app.module.sample', {\n url: '/data',\n resolve: {\n $$module: function ($http, $stateParams, $rootScope, $q, $log, $state) {\n return $http({\n method: 'GET',\n url: '/api/module/' + $stateParams.id\n })\n .then(function(response) {\n $stateParams.type = types[response.data.moduleType.id];\n $stateParams.name = response.data.name;\n $stateParams.color = response.data.moduleType.color;\n $stateParams.hasPipeline = response.data.pipeline != null;\n if ($stateParams.type === 'RootCause')\n $stateParams.hasClassifier = response.data.classifier != null;\n return response.data;\n },\n function (response) {\n $log.error(response);\n $state.go('app.modules.list');\n });\n },\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: 'app/main/apps/modules/views/sample/sample-overview.html',\n controller: 'SampleOverviewController as vm'\n }\n },\n data: {\n permission: function($stateParams) {\n var prefix = $stateParams.type.toUpperCase();\n return 'MODULE/' + prefix + '/DATA/VIEW';\n }\n },\n bodyClass: 'sample'\n })\n .state('app.module.sample.upload', {\n url: '/upload',\n resolve: {\n $$module: function ($http, $stateParams, $rootScope, $q, $log, $state) {\n return $http({\n method: 'GET',\n url: '/api/module/' + $stateParams.id\n })\n .then(function(response) {\n $stateParams.type = types[response.data.moduleType.id];\n $stateParams.name = response.data.name;\n $stateParams.color = response.data.moduleType.color;\n $stateParams.hasPipeline = response.data.pipeline != null;\n if ($stateParams.type === 'RootCause')\n $stateParams.hasClassifier = response.data.classifier != null;\n return response.data;\n },\n function (response) {\n $log.error(response);\n $state.go('app.modules.list');\n });\n },\n },\n views: {\n 'content@app': {\n templateUrl: 'app/main/apps/modules/views/sample/sample-upload.html',\n controller: 'SampleUploadController as vm'\n }\n },\n data: {\n permission: function($stateParams) {\n var prefix = $stateParams.type.toUpperCase();\n return 'MODULE/' + prefix + '/DATA/ADD';\n }\n },\n bodyClass: 'upload'\n })\n .state('app.module.settings', {\n url: '/settings',\n resolve: {\n $$module: function ($http, $stateParams, $rootScope, $q, $log, $state) {\n return $http({\n method: 'GET',\n url: '/api/module/' + $stateParams.id\n })\n .then(function(response) {\n $stateParams.type = types[response.data.moduleType.id];\n $stateParams.name = response.data.name;\n $stateParams.color = response.data.moduleType.color;\n $stateParams.hasPipeline = response.data.pipeline != null;\n if ($stateParams.type === 'RootCause')\n $stateParams.hasClassifier = response.data.classifier != null;\n $stateParams.hideData = response.data.hideData;\n return response.data;\n },\n function (response) {\n $log.error(response);\n $state.go('app.modules.list');\n });\n },\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: 'app/main/apps/modules/views/settings/module-settings.html',\n controller: 'ModuleSettingsController as vm'\n }\n },\n data: {\n permission: function($stateParams) {\n var prefix = $stateParams.type.toUpperCase();\n return 'MODULE/' + prefix + '/SETTINGS/VIEW';\n }\n },\n bodyClass: 'settings'\n })\n .state('app.module.test', {\n url: '/test',\n resolve: {\n $$module: function ($http, $stateParams, $rootScope, $q, $log, $state) {\n return $http({\n method: 'GET',\n url: '/api/module/' + $stateParams.id\n })\n .then(function(response) {\n $stateParams.type = types[response.data.moduleType.id];\n $stateParams.name = response.data.name;\n $stateParams.color = response.data.moduleType.color;\n $stateParams.hasPipeline = response.data.pipeline != null;\n if ($stateParams.type === 'RootCause')\n $stateParams.hasClassifier = response.data.classifier != null;\n $stateParams.hideData = response.data.hideData;\n return response.data;\n },\n function (response) {\n $log.error(response);\n $state.go('app.modules.list');\n });\n },\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: function($stateParams) {\n var prefix = $stateParams.type.toLowerCase();\n var template = 'app/main/apps/modules/views/test/' + prefix + '-test.html';\n return template;\n },\n controllerProvider: function($stateParams) {\n var prefix = $stateParams.type;\n var controller = prefix + 'TestController as vm';\n return controller;\n }\n }\n },\n data: {\n permission: function($stateParams) {\n var prefix = $stateParams.type.toUpperCase();\n return 'MODULE/' + prefix + '/TEST/EXECUTE';\n }\n },\n bodyClass: 'test'\n })\n .state('app.module.test.upload', {\n url: '/test-upload?selectedTrainId',\n resolve: {\n $$module: function ($http, $stateParams, $rootScope, $q, $log, $state) {\n return $http({\n method: 'GET',\n url: '/api/module/' + $stateParams.id\n })\n .then(function(response) {\n $stateParams.type = types[response.data.moduleType.id];\n $stateParams.name = response.data.name;\n $stateParams.color = response.data.moduleType.color;\n $stateParams.hasPipeline = response.data.pipeline != null;\n if ($stateParams.type === 'RootCause')\n $stateParams.hasClassifier = response.data.classifier != null;\n return response.data;\n },\n function (response) {\n $log.error(response);\n $state.go('app.modules.list');\n });\n },\n },\n views: {\n 'content@app': {\n templateUrl: 'app/main/apps/modules/views/sample/sample-upload.html',\n controller: 'TestUploadController as vm'\n }\n },\n data: {\n permission: function($stateParams) {\n var prefix = $stateParams.type.toUpperCase();\n return 'MODULE/' + prefix + '/DATA/ADD';\n }\n },\n params: {\n selectedTrainId: \"2\"\n },\n bodyClass: 'upload'\n })\n .state('app.module.evaluation', {\n url: '/evaluation',\n resolve: {\n $$module: function ($http, $stateParams, $rootScope, $q, $log, $state) {\n return $http({\n method: 'GET',\n url: '/api/module/' + $stateParams.id\n })\n .then(function(response) {\n $stateParams.type = types[response.data.moduleType.id];\n $stateParams.name = response.data.name;\n $stateParams.color = response.data.moduleType.color;\n $stateParams.hasPipeline = response.data.pipeline != null;\n if ($stateParams.type === 'RootCause')\n $stateParams.hasClassifier = response.data.classifier != null;\n $stateParams.hideData = response.data.hideData;\n return response.data;\n },\n function (response) {\n $log.error(response);\n $state.go('app.modules.list');\n });\n },\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: function($stateParams) {\n var prefix = $stateParams.type.toLowerCase();\n var template = 'app/main/apps/modules/views/evaluation/' + prefix + '-evaluation.html';\n return template;\n },\n controllerProvider: function($stateParams) {\n var prefix = $stateParams.type;\n var controller = prefix + 'EvaluationController as vm';\n return controller;\n }\n }\n },\n data: {\n permission: 'MODULE/*/EVALUATION/EXECUTE'\n },\n bodyClass: 'evaluation'\n })\n .state('app.module.rules', {\n url: '/rules',\n resolve: {\n $$module: function ($http, $stateParams, $rootScope, $q, $log, $state) {\n return $http({\n method: 'GET',\n url: '/api/module/' + $stateParams.id\n })\n .then(function(response) {\n $stateParams.type = types[response.data.moduleType.id];\n $stateParams.name = response.data.name;\n $stateParams.color = response.data.moduleType.color;\n $stateParams.hasPipeline = response.data.pipeline != null;\n if ($stateParams.type === 'RootCause')\n $stateParams.hasClassifier = response.data.classifier != null;\n $stateParams.hideData = response.data.hideData;\n return response.data;\n },\n function (response) {\n $log.error(response);\n $state.go('app.modules.list');\n });\n },\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: function($stateParams) {\n var prefix = $stateParams.type.toLowerCase();\n var template = 'app/main/apps/modules/views/rules/' + prefix + '-rules.html';\n return template;\n },\n controllerProvider: function($stateParams) {\n var prefix = $stateParams.type;\n var controller = prefix + 'RulesController as vm';\n return controller;\n }\n }\n },\n data: {\n permission: 'MODULE/*/RULES/UPDATE'\n },\n bodyClass: 'rules'\n })\n .state('app.module.category', {\n url: '/category',\n resolve: {\n $$module: function ($http, $stateParams, $rootScope, $q, $log, $state) {\n return $http({\n method: 'GET',\n url: '/api/module/' + $stateParams.id\n })\n .then(function(response) {\n $stateParams.type = types[response.data.moduleType.id];\n $stateParams.name = response.data.name;\n $stateParams.color = response.data.moduleType.color;\n $stateParams.hasPipeline = response.data.pipeline != null;\n if ($stateParams.type === 'RootCause')\n $stateParams.hasClassifier = response.data.classifier != null;\n $stateParams.hideData = response.data.hideData;\n return response.data;\n },\n function (response) {\n $log.error(response);\n $state.go('app.modules.list');\n });\n },\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: function($stateParams) {\n var prefix = $stateParams.type.toLowerCase();\n var template = 'app/main/apps/modules/views/category/' + prefix + '-category.html';\n return template;\n },\n controllerProvider: function($stateParams) {\n var prefix = $stateParams.type;\n var controller = prefix + 'CategoryController as vm';\n return controller;\n }\n }\n },\n data: {\n permission: 'MODULE/*/CATEGORY/UPDATE'\n },\n bodyClass: 'category'\n })\n\n // Translation\n //$translatePartialLoaderProvider.addPart('app');\n\n // Navigation\n msNavigationServiceProvider.saveItem('module_overview', {\n title: 'Overview',\n translate: \"SHARED.OVERVIEW\",\n state: 'app.module.overview',\n weight: 1,\n hidden: function($scope, $state) {\n var result = false;\n if ($state)\n result = !$state.includes(\"**.module.**\");\n var type = $state.params.type;\n if (type === \"Sentiment\" || type === \"NamedEntity\")\n result = true;\n if (result) return result;\n\n var prefix = type.toUpperCase();\n var permission = \"MODULE/\" + prefix + \"/VIEW\";\n if (!user.hasPermission(permission))\n return true;\n\n\n return result;\n }\n\n });\n\n msNavigationServiceProvider.saveItem('module_sample', {\n title: 'Samples',\n translate: \"SHARED.SAMPLES\",\n state: 'app.module.sample',\n weight: 2,\n hidden: function($scope, $state) {\n var result = false;\n if ($state)\n result = !$state.includes(\"**.module.**\");\n var type = $state.params.type;\n var hidedata = $state.params.hideData;\n if (type === \"Sentiment\" || type === \"NamedEntity\" || hidedata)\n result = true;\n if (result) return result;\n\n var prefix = type.toUpperCase();\n var permission = \"MODULE/\" + prefix + \"/DATA/VIEW\";\n if (!user.hasPermission(permission))\n return true;\n return result;\n }\n });\n\n msNavigationServiceProvider.saveItem('module_test', {\n title: 'Test',\n translate: \"SHARED.TEST\",\n state: 'app.module.test',\n weight: 3,\n hidden: function($scope, $state) {\n var result = false;\n if ($state)\n result = !$state.includes(\"**.module.**\");\n var type = $state.params.type;\n switch (type) {\n case 'Clustering':\n case 'TopicModeling':\n case 'RootCause':\n result = true;\n break;\n case \"Classification\":\n result = (!user.hasPermission(\"MODULE/CLASSIFICATION/TEST/EXECUTE\"));\n break;\n case \"Sentiment\":\n result = (!user.hasPermission(\"MODULE/SENTIMENT/TEST/EXECUTE\"));\n break;\n case \"NamedEntity\":\n result = (!user.hasPermission(\"MODULE/NAMEDENTITY/TEST/EXECUTE\"));\n break;\n }\n\n return result;\n }\n });\n\n msNavigationServiceProvider.saveItem('module_settings', {\n title: 'Settings',\n translate: \"SHARED.SETTINGS\",\n state: 'app.module.settings',\n weight: 4,\n hidden: function($scope, $state) {\n var result = false;\n if ($state)\n result = !$state.includes(\"**.module.**\");\n var type = $state.params.type;\n if (type === \"NamedEntity\")\n result = true;\n if (result) return result;\n\n var prefix = type.toUpperCase();\n var permission = \"MODULE/\" + prefix + \"/SETTINGS/VIEW\";\n if (!user.hasPermission(permission))\n return true;\n\n return result;\n }\n });\n\n msNavigationServiceProvider.saveItem('module_evaluation', {\n title: 'Evaluation',\n translate: \"SHARED.EVALUATION\",\n state: 'app.module.evaluation',\n weight: 5,\n hidden: function($scope, $state) {\n var result = false;\n if ($state)\n result = !$state.includes(\"**.module.**\");\n var type = $state.params.type;\n if (type === \"Sentiment\" || type === \"NamedEntity\" || type === \"TopicModeling\" || type === \"Clustering\" || type === \"RootCause\")\n result = true;\n if (result) return result;\n\n var prefix = type.toUpperCase();\n var permission = \"MODULE/\" + prefix + \"/EVALUATION/EXECUTE\";\n if (!user.hasPermission(permission))\n return true;\n\n return result;\n }\n });\n\n msNavigationServiceProvider.saveItem('module_rules', {\n title: 'Rules',\n translate: \"SHARED.RULES\",\n state: 'app.module.rules',\n weight: 6,\n hidden: function($scope, $state) {\n var result = false;\n if ($state)\n result = !$state.includes(\"**.module.**\");\n var type = $state.params.type;\n if (type === \"Sentiment\" || type === \"NamedEntity\" || type === \"TopicModeling\" || type === \"Clustering\" || type === \"RootCause\")\n result = true;\n if (result) return result;\n if (!type) return false;\n\n var prefix = type.toUpperCase();\n var permission = \"MODULE/\" + prefix + \"/RULES/UPDATE\";\n if (!user.hasPermission(permission))\n return true;\n\n return result;\n }\n });\n\n msNavigationServiceProvider.saveItem('module_category', {\n title: 'Categories',\n translate: \"SHARED.CATEGORY\",\n state: 'app.module.category',\n weight: 7,\n hidden: function($scope, $state) {\n var result = false;\n if ($state)\n result = !$state.includes(\"**.module.**\");\n var type = $state.params.type;\n if (type === \"Sentiment\" || type === \"NamedEntity\" || type === \"TopicModeling\" || type === \"Clustering\" || type === \"RootCause\" )// || type === \"SentimentClassifier\" fail\n result = true;\n if (result) return result;\n\n var prefix = type.toUpperCase();\n var permission = \"MODULE/\" + prefix + \"/CATEGORY/UPDATE\";\n if (!user.hasPermission(permission))\n return true;\n\n return result;\n }\n });\n msNavigationServiceProvider.saveItem('module_similarity', {\n title: 'Data Analysis',\n translate: \"SHARED.DATA_ANALYSIS\",\n state: 'app.module.analysis',\n weight: 7,\n hidden: function($scope, $state) {\n var result = false;\n if ($state)\n result = !$state.includes(\"**.module.**\");\n var type = $state.params.type;\n if (type === \"Sentiment\" || type === \"NamedEntity\" || type === \"TopicModeling\" || type === \"Clustering\" || type === \"RootCause\")\n result = true;\n if (result) return result;\n\n var prefix = type.toUpperCase();\n var permission = \"MODULE/\" + prefix + \"/DATA/VIEW\";\n if (!user.hasPermission(permission))\n return true;\n\n return result;\n }\n });\n }\n\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.modules')\n .controller('SampleUploadController', SampleUploadController);\n\n /** @ngInject */\n function SampleUploadController($rootScope, $scope, $state, $stateParams,\n $translate, $log, $mdToast, $document,\n api, Upload, SampleService, SampleFactory,\n $$module, $interval) {\n var vm = this;\n vm.module = $$module;\n vm.type = $stateParams.type;\n vm.moduleId = $stateParams.id;\n vm.processId = \"\";\n vm.processTraces = [];\n vm.monitoring = false;\n vm.hasHeader = false;\n vm.excelColumnsDictionary = _buildColumnsArray('A1:ZZ38');\n\n vm.customCategories = [];\n vm.customTags = [];\n\n vm.fileUploaded = false;\n vm.uploadCurrentTab = 0;\n vm.msScrollOptions = {\n suppressScrollX: true\n };\n\n vm.dropifyConfig = {};\n\n vm.columnSize = 0;\n\n vm.selectedCategories = [];\n vm.selectedCategoryCodes = [];\n //Data\n vm.file = null;\n vm.previewData = {};\n vm.previewLoaded = vm.previewData && vm.previewData.length > 0;\n vm.processing = false;\n\n //Methods\n vm.preview = showPreview;\n vm.saveSamplesFile = saveSamplesFile;\n vm.validateOptions = validateOptions;\n vm.toggleHeader = toggleHeader;\n vm.removeColumn = removeColumn;\n vm.fillConstantCategories = fillConstantCategories;\n vm.changeSetCategory = changeSetCategory;\n vm.changeConstantCategoriesLanguageChange = changeConstantCategoriesLanguageChange;\n vm.init = init;\n\n \n\n vm.init();\n\n function init() {\n vm.dropifyConfig = setDropifyConfig();\n vm.changeConstantCategoriesLanguageChange($translate.use());\n }\n\n \n $rootScope.$on('$translateChangeSuccess', function (event, current, previous) {\n // Language has changed\n vm.changeConstantCategoriesLanguageChange($translate.use());\n setDropifyConfig();\n });\n\n function setDropifyConfig(){\n if(vm.module.moduleType.id === 7){\n return {\n messages: {\n 'default': $translate.instant('SHARED.MESSAGES.DROPIFY_DEFAULT_SENTIMENT_CLASSIFIER'),\n 'replace': $translate.instant('SHARED.MESSAGES.DROPIFY_REPLACE_SENTIMENT_CLASSIFIER'),\n 'remove': $translate.instant('SHARED.MESSAGES.DROPIFY_REMOVE'),\n 'error': $translate.instant('SHARED.MESSAGES.DROPIFY_ERROR')\n }\n };\n }else{\n return {\n messages: {\n 'default': $translate.instant('SHARED.MESSAGES.DROPIFY_DEFAULT'),\n 'replace': $translate.instant('SHARED.MESSAGES.DROPIFY_REPLACE'),\n 'remove': $translate.instant('SHARED.MESSAGES.DROPIFY_REMOVE'),\n 'error': $translate.instant('SHARED.MESSAGES.DROPIFY_ERROR')\n }\n };\n }\n }\n function changeConstantCategoriesLanguageChange(lg) {\n if (lg === 'en') {\n vm.constantCategoryNames = [{\n \"name\": null,\n \"value\": null,\n \"index\": -1\n },\n {\n \"name\": \"Text\",\n \"value\": 2,\n \"index\": -1\n },\n {\n \"name\": \"Tag\",\n \"value\": 3,\n \"index\": -1\n },\n {\n \"name\": \"Real\",\n \"value\": 4,\n \"index\": -1\n },\n {\n \"name\": \"Nominal\",\n \"value\": 5,\n \"index\": -1\n },\n {\n \"name\": \"Main Category\",\n \"value\": 11,\n \"index\": -1\n },\n {\n \"name\": \"Sub Category\",\n \"value\": 111,\n \"index\": -1\n }\n ];\n fillConstantCategories(lg);\n } else if (lg === 'tr') {\n vm.constantCategoryNames = [{\n \"name\": null,\n \"value\": null,\n \"index\": -1\n },\n {\n \"name\": \"Text\",\n \"value\": 2,\n \"index\": -1\n },\n {\n \"name\": \"Etiket\",\n \"value\": 3,\n \"index\": -1\n },\n {\n \"name\": \"Numerik\",\n \"value\": 4,\n \"index\": -1\n },\n {\n \"name\": \"Nominal\",\n \"value\": 5,\n \"index\": -1\n },\n {\n \"name\": \"Ana Kategori\",\n \"value\": 11,\n \"index\": -1\n },\n {\n \"name\": \"Ana Kategori Kodu\",\n \"value\": -11,\n \"index\": -1\n },\n {\n \"name\": \"Alt Kategori\",\n \"value\": 111,\n \"index\": -1\n },\n {\n \"name\": \"Alt Kategori Kodu\",\n \"value\": -111,\n \"index\": -1\n }\n ];\n //fillConstantCategories(lg);\n }\n }\n\n function changeSetCategory(type, index) {\n var selected = vm.selectedCategories.find(function (s) {\n return s.index === parseInt(index);\n });\n if (selected) {\n vm.selectedCategories = vm.selectedCategories.filter(function (t) {\n return t.index !== parseInt(index)\n });\n var i = 1;\n while (vm.selectedCategories.filter(function (t) {\n return t.value === parseInt(selected.value.toString() + \"1\")\n }).length > 0) {\n vm.previewData.columns[index + i++].type = null;\n vm.selectedCategories = vm.selectedCategories.filter(function (t) {\n return t.value !== parseInt(selected.value.toString() + \"1\")\n });\n selected.value = parseInt(selected.value.toString() + \"1\");\n }\n }\n if (parseInt(type) === 11) {\n var mc = vm.constantCategoryNames.find(function (c) {\n return c.value === parseInt(type);\n });\n var mainCat = JSON.parse(JSON.stringify(mc));\n var mainCats = vm.selectedCategories.filter(function (s) {\n return s.value < 100 && s.value > 10;\n });\n if (mainCats.length > 0) {\n var maxMainCat = Math.max.apply(Math, mainCats.map(function (s) {\n return s.value;\n }));\n mainCat.value = maxMainCat + 1;\n mainCat.index = index;\n vm.selectedCategories.push(mainCat);\n } else {\n mainCat.index = index;\n vm.selectedCategories.push(mainCat);\n }\n } else if (parseInt(type) === 111) {\n var s = vm.constantCategoryNames.find(function (c) {\n return c.value === parseInt(type);\n });\n var subCat = JSON.parse(JSON.stringify(s));\n var upCat = vm.selectedCategories.find(function (s) {\n return s.index === parseInt(index) - 1;\n });\n if (!upCat) {\n vm.previewData.columns[index].type = null;\n } else {\n subCat.value = parseInt(upCat.value.toString() + \"1\");\n subCat.index = index;\n vm.selectedCategories.push(subCat);\n }\n }\n changeSetCategoryCode(type, index);\n /*if (type !== \"\") {\n if (parseInt(type) > 10) {\n var selected = vm.selectedCategories.find(function (t) {\n return t.value === parseInt(type)\n });\n if (selected === null || selected === undefined) {\n var selected = vm.constantCategoryNames.find(function (t) {\n return t.value === parseInt(type)\n });\n selected.index = index;\n vm.selectedCategories = vm.selectedCategories.filter(function (t) {\n return t.index !== index\n });\n vm.selectedCategories.push(selected);\n } else {\n vm.previewData.columns[index].type = null;\n }\n }\n } else {\n vm.selectedCategories = vm.selectedCategories.filter(function (t) {\n return t.index !== index\n });\n }*/\n //controlSetCategory();\n }\n\n function changeSetCategoryCode(type, index) {\n var selected = vm.selectedCategoryCodes.find(function (s) {\n return s.index === parseInt(index);\n });\n if (selected) {\n vm.selectedCategoryCodes = vm.selectedCategoryCodes.filter(function (t) {\n return t.index !== parseInt(index)\n });\n var i = 1;\n while (vm.selectedCategoryCodes.filter(function (t) {\n return t.value === parseInt(selected.value.toString() + \"1\")\n }).length > 0) {\n vm.previewData.columns[index + i++].type = null;\n vm.selectedCategoryCodes = vm.selectedCategoryCodes.filter(function (t) {\n return t.value !== parseInt(selected.value.toString() + \"1\")\n });\n selected.value = parseInt(selected.value.toString() + \"1\");\n }\n }\n if (parseInt(type) === -11) {\n var mcc = vm.constantCategoryNames.find(function (c) {\n return c.value === parseInt(type);\n });\n var mainCatCode = JSON.parse(JSON.stringify(mcc));\n var mainCatCodes = vm.selectedCategoryCodes.filter(function (s) {\n return s.value > -100 && s.value < -10;\n });\n if (mainCatCodes.length > 0) {\n var minMainCatCode = Math.min.apply(Math, mainCatCodes.map(function (s) {\n return s.value;\n }));\n mainCatCode.value = minMainCatCode - 1;\n mainCatCode.index = index;\n vm.selectedCategoryCodes.push(mainCatCode);\n } else {\n mainCatCode.index = index;\n vm.selectedCategoryCodes.push(mainCatCode);\n }\n } else if (parseInt(type) === -111) {\n var s = vm.constantCategoryNames.find(function (c) {\n return c.value === parseInt(type);\n });\n var subCatCode = JSON.parse(JSON.stringify(s));\n var upCatCode = vm.selectedCategoryCodes.find(function (s) {\n return s.index === parseInt(index) - 1;\n });\n if (!upCatCode) {\n vm.previewData.columns[index].type = null;\n } else {\n subCatCode.value = parseInt(upCatCode.value.toString() + \"1\");\n subCatCode.index = index;\n vm.selectedCategoryCodes.push(subCatCode);\n }\n }\n }\n\n function controlSetCategory(type, index) {\n var subCats = vm.previewData.columns.filter(function (c) {\n return parseInt(c.type) > 100\n });\n subCats.forEach(function (s) {\n var hasUpCategory = false;\n vm.previewData.columns.forEach(function (c) {\n var canControl = true;\n s.name === c.name ? canControl = false : canControl = true;\n if (canControl) {\n if (s.type.substring(0, s.type.length - 1) === c.type)\n hasUpCategory = true;\n }\n });\n if (!hasUpCategory) {\n vm.selectedCategories = vm.selectedCategories.filter(function (t) {\n return t.value !== parseInt(s.type)\n });\n s.type = null;\n }\n });\n console.log(vm.selectedCategories);\n }\n\n function fillConstantCategories(lg) {\n if (lg === 'en') {\n for (var i = 1; i <= vm.columnSize; i++) {\n vm.constantCategoryNames.push({\n \"name\": \"Main Category \" + i,\n \"value\": i + 10,\n \"index\": -1\n });\n vm.constantCategoryNames.push({\n \"name\": \"Sub Category \" + i + \"_1\",\n \"value\": parseInt((i + 10) + \"1\"),\n \"index\": -1\n });\n vm.constantCategoryNames.push({\n \"name\": \"Sub Category \" + i + \"_1_1\",\n \"value\": parseInt((i + 10) + \"11\"),\n \"index\": -1\n });\n }\n } else if (lg === 'tr') {\n for (var i = 1; i <= vm.columnSize; i++) {\n vm.constantCategoryNames.push({\n \"name\": \"Ana Kategori \" + i,\n \"value\": i + 10,\n \"index\": -1\n });\n vm.constantCategoryNames.push({\n \"name\": \"Alt Kategori \" + i + \"_1\",\n \"value\": parseInt((i + 10) + \"1\"),\n \"index\": -1\n });\n vm.constantCategoryNames.push({\n \"name\": \"Alt Kategori \" + i + \"_1_1\",\n \"value\": parseInt((i + 10) + \"11\"),\n \"index\": -1\n });\n }\n }\n }\n\n function toggleHeader(value) {\n var val = value;\n vm.previewData.columns.forEach(function (p) {\n p.type = null;\n });\n vm.selectedCategories = [];\n preview(vm.file);\n }\n\n function showPreview() {\n vm.hasHeader = true;\n preview(vm.file);\n }\n\n function preview(file) {\n if (!file) return;\n vm.previewData = [];\n vm.processing = true;\n SampleFactory.preview($scope, vm.file, vm.hasHeader)\n .then(function (data) {\n if (data.columns && data.columns.length > 0)\n data.columns = adjustColumnWhitespaces(data);\n vm.previewData = data;\n renderPreview();\n vm.previewLoaded = true;\n vm.processing = false;\n vm.uploadCurrentTab = 1;\n }, function (reason) {\n $log.error('Failed: ' + reason);\n vm.uploadCurrentTab = 0;\n });\n };\n\n function renderPreview() {\n if (vm.customCategories && vm.previewData) {\n var columns = vm.previewData.columns;\n //vm.columnSize = columns.length;\n //if (vm.constantCategoryNames.length <= 5)\n // vm.fillConstantCategories($translate.use());\n var data = vm.previewData.data;\n for (var i in vm.customCategories) {\n var item = vm.customCategories[i];\n var column = {\n name: item.name,\n type: 1,\n readonly: true,\n custom: true,\n value: item\n };\n\n var exists = vm.previewData.columns.some(function (element) {\n return element.name == column.name;\n });\n\n if (!exists)\n vm.previewData.columns.push(column);\n }\n\n //Tags\n for (var i in vm.customTags) {\n var item = vm.customTags[i];\n var column = {\n name: item,\n type: 3,\n readonly: true,\n custom: true,\n value: item\n };\n\n var exists = vm.previewData.columns.some(function (element) {\n return element.name == column.name;\n });\n\n if (!exists)\n vm.previewData.columns.push(column);\n }\n }\n }\n\n function removeColumn(event, column) {\n var index = null;\n var type = null;\n for (var i in vm.previewData.columns) {\n var item = vm.previewData.columns[i];\n if (item.name == column.name) {\n index = i;\n type = item.type;\n break;\n }\n }\n\n if (index)\n vm.previewData.columns.splice(index, 1);\n\n switch (type) {\n case 1:\n index = null;\n for (var i in vm.customCategories) {\n var item = vm.customCategories[i];\n if (item.name == column.name) {\n index = i;\n break;\n }\n }\n if (index)\n vm.customCategories.splice(index, 1);\n break;\n case 3:\n index = null;\n for (var i in vm.customTags) {\n var item = vm.customTags[i];\n if (item == column.name) {\n index = i;\n break;\n }\n }\n if (index)\n vm.customTags.splice(index, 1);\n break;\n }\n\n renderPreview();\n }\n\n //Samples File Save\n function saveSamplesFile(file) {\n var options = {\n selectedCategories: vm.selectedCategories,\n selectedCategoryCodes: vm.selectedCategoryCodes,\n categories: [],\n contents: [],\n tags: [],\n reals: [],\n nominals: [],\n subCategories: [],\n hasHeaders: vm.hasHeader,\n customCategories: vm.customCategories,\n customTags: vm.customTags,\n delimiter: vm.previewData.delimiter\n };\n\n for (var i in vm.previewData.columns) {\n var column = vm.previewData.columns[i];\n if (!column.custom) {\n /*if (column.type === '1') {\n options.categories.push(i);\n } */\n if (column.type === '2') {\n options.contents.push(i);\n } else if (column.type === '3') {\n options.tags.push(i);\n } else if (column.type === '4') {\n options.reals.push(i);\n } else if (column.type === '5') {\n options.nominals.push(i);\n }\n /*else if (column.type === '6') {\n options.subCategories.push(i);\n }*/\n }\n }\n\n if (!validateOptions(options)) {\n var message = \"The file must have one column with the text sample and a second column with the category or select a default category.\";\n var parent = $document[0].querySelector('#toastBounds');\n var toast = $mdToast.simple()\n .content(message)\n .action('OK')\n .highlightAction(true)\n .hideDelay(0)\n .position('fit')\n .theme(\"error-toast\")\n .parent(parent);\n\n $mdToast.show(toast);\n angular.forEach(vm.uploadSampleFileForm.$error.required, function (field) {\n field.$setDirty();\n });\n return;\n }\n\n vm.uploadSampleFileForm.$setPristine();\n vm.uploadSampleFileForm.$setUntouched();\n vm.processing = true;\n Upload.upload({\n timeout: 240000,\n url: api.samples.url + '/upload',\n data: {\n moduleId: vm.moduleId,\n file: file,\n options: JSON.stringify(options, function (key, value) {\n if (key === \"$$hashKey\") {\n return undefined;\n }\n return value;\n })\n }\n }).then(function (resp) {\n $log.log('Success ' + resp.config.data.file.name + 'uploaded. Response: ' + resp.data);\n vm.processing = false;\n vm.processId = resp.data.processId;\n vm.monitoring = true;\n vm.check();\n vm.file = null;\n vm.previewData = {};\n vm.uploadCurrentTab = 0;\n //$state.go('app.module.sample', {\n // id: vm.moduleId\n //}, {\n // reload: true\n //});\n }, function (resp) {\n $log.error('Error status: ' + resp.status);\n vm.processing = false;\n }, function (evt) {\n var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);\n $log.log('progress: ' + progressPercentage + '% ' + evt.config.data.file.name);\n });\n }\n\n function validateOptions(options) {\n if (options.contents.length <= 0) return false;\n\n if (options.contents.length > 0) {\n if (options.categories.length <= 0) {\n if (options.customCategories.lenght <= 0) {\n return false;\n }\n }\n }\n\n return true;\n }\n var stop;\n\n vm.check = function () {\n // Don't start a new fight if we are already fighting\n if (angular.isDefined(stop)) return;\n stop = $interval(function () {\n if (vm.monitoring) {\n getTrace();\n } else {\n vm.stopCheck();\n }\n vm.enable = !isDisable();\n }, 2000);\n };\n\n vm.stopCheck = function () {\n if (angular.isDefined(stop)) {\n $interval.cancel(stop);\n stop = undefined;\n }\n };\n\n var getTrace = function getTrace() {\n if (vm.processId && vm.monitoring) {\n api.samples.findLastProcessTrace(vm.processId)\n .then(function (response) {\n if (response) {\n vm.processTraces = response;\n if (vm.processTraces && vm.processTraces.length > 0) {\n var lastProcessTrace = vm.processTraces[vm.processTraces.length - 1];\n if (lastProcessTrace.status == 201) {\n vm.monitoring = false;\n vm.stopCheck();\n $state.go('app.module.sample', {\n id: vm.moduleId\n }, {\n reload: true\n });\n }\n }\n }\n }, function (error) {\n $log.error('Error status: ' + resp.status);\n })\n }\n }\n\n function isDisable() {\n if (!vm.hasPipeline) return true;\n if (vm.type === \"RootCause\" && !vm.hasClassifier) return true;\n if (!vm.hasData) return true;\n if (vm.trainStatus === 1) return true;\n if (vm.trainStatus === 2) return true;\n }\n\n function adjustColumnWhitespaces(source) {\n var lastColumnName = source.columns[source.columns.length - 1].name;\n var realIndexOfName = vm.excelColumnsDictionary.indexOf(lastColumnName);\n var newColumns = [];\n var i;\n for (i = 0; i <= realIndexOfName; i++) {\n if (vm.hasHeader) {\n var found = source.columns.find(function (c) {\n return c.name === vm.excelColumnsDictionary[i]\n });\n if (found && found.title) {\n newColumns.push({\n \"name\": vm.excelColumnsDictionary[i],\n \"title\": found.title\n });\n } else\n newColumns.push({\n \"name\": vm.excelColumnsDictionary[i],\n \"title\": null\n });\n } else {\n newColumns.push({\n \"name\": vm.excelColumnsDictionary[i]\n });\n }\n }\n return newColumns;\n }\n\n function alphaToNum(alpha) {\n\n var i = 0,\n num = 0,\n len = alpha.length;\n\n for (; i < len; i++) {\n num = num * 26 + alpha.charCodeAt(i) - 0x40;\n }\n\n return num - 1;\n }\n\n function numToAlpha(num) {\n\n var alpha = '';\n\n for (; num >= 0; num = parseInt(num / 26, 10) - 1) {\n alpha = String.fromCharCode(num % 26 + 0x41) + alpha;\n }\n\n return alpha;\n }\n\n function _buildColumnsArray(range) {\n\n var i,\n res = [],\n rangeNum = range.split(':').map(function (val) {\n return alphaToNum(val.replace(/[0-9]/g, ''));\n }),\n start = rangeNum[0],\n end = rangeNum[1] + 1;\n\n for (i = start; i < end; i++) {\n res.push(numToAlpha(i));\n }\n\n return res;\n }\n\n // Add Category\n vm.addCategory = function ($event) {\n SampleService\n .addCategory($scope, $state, $event, vm.module)\n .then(function (category) {\n vm.customCategories.push(category);\n renderPreview();\n });\n }\n\n // Add Tag\n vm.addTag = function ($event) {\n SampleService\n .addTag($scope, $state, $event, vm.module)\n .then(function (tag) {\n vm.customTags.push(tag);\n renderPreview();\n });\n }\n\n $scope.$on('$destroy', function () {\n // Make sure that the interval is destroyed too\n vm.stopCheck();\n });\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.modules')\n .controller('SampleOverviewController', SampleOverviewController);\n\n /** @ngInject */\n function SampleOverviewController($rootScope, $scope, $state, $translate,\n $stateParams, $log, $mdToast, $mdDialog,\n $mdMedia, $document, api, Upload, FileReader, ModuleService, SampleFactory, $$module, msNavigationSidebarService, $utils, $q) {\n var vm = this;\n vm.module = $$module;\n vm.type = $stateParams.type;\n vm.uploadPermission = \"MODULE/\" + vm.type.toUpperCase() + \"/DATA/ADD\";\n vm.deletePermission = \"MODULE/\" + vm.type.toUpperCase() + \"/DATA/DELETE\";\n vm.hasData = true;\n vm.samples = [];\n vm.categories = [];\n vm.tags = [];\n vm.nominalAttributes = [];\n vm.numericAttributes = [];\n vm.allCategories = [];\n vm.allTags = [];\n vm.allNominalAttributes;\n vm.searching = false;\n vm.pagination = {\n current: 1,\n last: 1,\n count: 1\n };\n vm.hasHeader = false;\n vm.isOpen = false;\n vm.selectedMode = 'md-scale';\n\n vm.showNewSamples = false;\n vm.moduleId = $stateParams.id;\n\n vm.customCategories = [];\n vm.customTags = [];\n vm.clusters = [];\n\n vm.fileUploaded = false;\n vm.uploadCurrentTab = 0;\n vm.msScrollOptions = {\n suppressScrollX: true\n };\n vm.searchText = null;\n vm.allChecked = false;\n \n vm.dropifyConfig = {\n messages: {\n 'default': $translate.instant('SHARED.MESSAGES.DROPIFY_DEFAULT'),\n 'replace': $translate.instant('SHARED.MESSAGES.DROPIFY_REPLACE'),\n 'remove': $translate.instant('SHARED.MESSAGES.DROPIFY_REMOVE'),\n 'error': $translate.instant('SHARED.MESSAGES.DROPIFY_ERROR')\n }\n };\n\n $rootScope.$on('$translateChangeSuccess', function(event, current, previous) {\n vm.dropifyConfig = {\n messages: {\n 'default': $translate.instant('SHARED.MESSAGES.DROPIFY_DEFAULT'),\n 'replace': $translate.instant('SHARED.MESSAGES.DROPIFY_REPLACE'),\n 'remove': $translate.instant('SHARED.MESSAGES.DROPIFY_REMOVE'),\n 'error': $translate.instant('SHARED.MESSAGES.DROPIFY_ERROR')\n }\n };\n });\n\n //Data\n vm.file = null;\n vm.previewData = {};\n vm.previewLoaded = vm.previewData && vm.previewData.length > 0;\n vm.processing = false;\n\n\n //Methods\n vm.saveSamples = saveSamples;\n vm.preview = showPreview;\n vm.saveSamplesFile = saveSamplesFile;\n vm.validateOptions = validateOptions;\n vm.search = search;\n vm.toggleCategoryFilter = toggleCategoryFilter;\n vm.toggleTagFilter = toggleTagFilter;\n vm.toggleNominalFilter = toggleNominalFilter;\n vm.toggleClusterFilter = toggleClusterFilter;\n vm.resetFilters = resetFilters;\n vm.setCurrentPage = setCurrentPage;\n vm.toggleHeader = toggleHeader;\n vm.removeColumn = removeColumn;\n vm.queryCategorySearch = queryCategorySearch;\n vm.toggleCheck = toggleCheck;\n vm.toggleCheckAll = toggleCheckAll;\n vm.removeSelectedSamples = removeSelectedSamples;\n vm.downloadModuleClassification = downloadModuleClassification;\n vm.getCategoryTitle = getCategoryTitle;\n \n vm.filters = {\n search: '',\n cattag: '',\n categoryId: null,\n tag: '',\n clusterId: null\n };\n vm.filtersDefaults = angular.copy(vm.filters);\n vm.showAll = true;\n\n vm.order = '';\n vm.orderDescending = false;\n\n vm.colors = ['blue-bg', 'blue-grey-bg', 'orange-bg', 'pink-bg', 'purple-bg'];\n $scope.colors = [\"#800026\", \"#bd0026\", \"#e31a1c\", \"#fc4e2a\", \"#fd8d3c\", \"#feb24c\", \"#fed976\"];\n\n ModuleService\n .hasData(vm.moduleId)\n .then(function (response) {\n vm.hasData = response;\n });\n\n function toggleCategoryFilter(item) {\n vm.filters.categoryId = item.id;\n vm.pagination.current = 1;\n searchSamples();\n };\n\n function toggleTagFilter(item) {\n vm.filters.tag = item.name;\n vm.pagination.current = 1;\n searchSamples();\n };\n\n function toggleNominalFilter(fieldName, filterValue){\n if(vm.filters.nominalAttributes == null){\n vm.filters.nominalAttributes = {};\n vm.filters.nominalAttributes[fieldName] = filterValue;\n }else{\n vm.filters.nominalAttributes[fieldName] = filterValue;\n }\n vm.pagination.current = 1;\n searchSamples();\n }\n\n function toggleClusterFilter(item) {\n vm.filters.clusterId = item.id;\n vm.pagination.current = 1;\n searchSamples();\n };\n\n function resetFilters() {\n vm.filters = {\n search: '',\n cattag: '',\n categoryId: null,\n tag: '',\n clusterId: null\n };\n vm.pagination.current = 1;\n searchSamples();\n }\n\n //Module\n function saveSamples() {\n api.samples.save(vm.moduleId, vm.newsamples)\n .then(function (response) {\n vm.newsamples = [];\n $state.go('app.classification.samples', {\n id: vm.moduleId\n });\n },\n function (response) {\n $log.error(response);\n });\n }\n\n function search() {\n vm.pagination.current = 1;\n searchSamples();\n }\n\n\n function downloadModuleClassification($event) {\n var copyFilters = vm.filters.facets;\n var json = JSON.stringify(copyFilters, function (key, value) {\n if (key === \"$$hashKey\") {\n return undefined;\n }\n return value;\n });\n var data = {\n moduleId: vm.module.id,\n categoryId: vm.filters.categoryId > 0 ? vm.filters.categoryId.toString() : null,\n query: vm.filters.search ? vm.filters.search : null,\n tag: vm.filters.tag ? vm.filters.tag : null\n };\n downloadJquery('/api/module/export', data, 'POST');\n }\n\n function downloadJquery(url, data, method) {\n if (url && data) {\n data = typeof data === 'string' ? data : jQuery.param(data);\n var inputs = '';\n jQuery.each(data.split('&'), function () {\n var pair = this.split('=');\n inputs += '';\n });\n jQuery('
' + inputs + '
')\n .appendTo('body').submit().remove();\n }\n };\n\n function searchSamples(init) {\n // You can do an API call here to send the form to your server\n vm.searching = true;\n vm.filters.search = $utils.fixQueryQuotes(vm.filters.search);\n var query = {\n text: vm.filters.search,\n moduleId: vm.moduleId,\n categoryId: vm.filters.categoryId ? vm.filters.categoryId : null,\n tag: vm.filters.tag,\n nominalAttributes:vm.filters.nominalAttributes,\n clusterId: vm.filters.clusterId,\n start: (vm.pagination.current - 1) * 10,\n rows: 10\n };\n\n api.samples.search(query)\n .then(function (response) {\n vm.catPages = {};\n vm.clickedCats = {};\n vm.samples = response.samples;\n vm.categories.forEach(function (category, index) {\n recursiveDeleteCategoriesFromSideNav(category, index, 'categories');\n });\n msNavigationSidebarService.deleteItem('categories');\n msNavigationSidebarService.deleteItem('tags');\n msNavigationSidebarService.deleteItem('nominals');\n\n vm.categories = response.categories;\n vm.tags = response.tags;\n vm.nominalAttributes = response.nominalAttributes;\n vm.numericAttributes = response.numericAttributes;\n vm.clusters = response.clusters;\n vm.pagination.count = response.count;\n vm.pagination.last = calculatePageCounts(response.count);\n vm.pagination.totalNumber = Math.ceil(vm.pagination.count / 10);\n vm.pagination.number = vm.pagination.current;\n vm.searching = false;\n if(init==true){\n vm.allTags = vm.tags;\n vm.allCategories = vm.categories;\n vm.allNominalAttributes = vm.nominalAttributes;\n }\n setCategoriesToSideNav();\n },\n function (response) {\n $log.error(response);\n vm.searching = false;\n });\n }\n\n vm.catPages = {};\n\n function moreAndMore(params, flag) {\n var deferred = $q.defer();\n vm.catPages[params.id] = vm.catPages[params.id] ? vm.catPages[params.id] + 1 : params.flag ? 0 : 1;\n vm.filters.search = $utils.fixQueryQuotes(vm.filters.search);\n var query = {\n text: vm.filters.search,\n moduleId: vm.moduleId,\n categoryId: vm.filters.categoryId ? vm.filters.categoryId : null,\n tag: vm.filters.tag,\n nominalAttributes: vm.filters.nominalAttributes,\n clusterId: vm.filters.clusterId,\n start: (vm.pagination.current - 1) * 10,\n rows: 10\n };\n api.samples.searchPageable(query, params.id, params.search, vm.catPages[params.id])\n .then(function (response) {\n if (!params.id) {\n vm.categories = vm.categories.concat(response);\n response.forEach(function (category, index) {\n recursiveSetCategoriesToSideNav(category, index, 'categories');\n });\n deferred.resolve(response);\n } else {\n var category = vm.categories.filter(function (k) { return k.id == params.id; })[0];\n vm.categories = vm.categories.concat(response);\n if (category) {\n if (!category.children) category.children = [];\n category.children = category.children.concat(response);\n }\n var parent = \"categories\"\n var cat = vm.categories.filter(function (m) { return m.id == params.parent })[0];\n while (cat) {\n parent = parent + \".\" + cat.id\n cat = vm.categories.filter(function (m) { return m.id == cat.parent })[0];\n }\n response.forEach(function (cat, index) {\n recursiveSetCategoriesToSideNav(cat, index, parent + \".\" + params.id);\n })\n deferred.resolve(response);\n }\n },\n function (response) {\n $log.error(response);\n vm.searching = false;\n });\n return deferred.promise;\n }\n\n function searchCategories(params) {\n var query = {\n text: vm.filters.search,\n moduleId: vm.moduleId,\n categoryId: vm.filters.categoryId ? vm.filters.categoryId : null,\n tag: vm.filters.tag,\n nominalAttributes: vm.filters.nominalAttributes,\n clusterId: vm.filters.clusterId,\n start: (vm.pagination.current - 1) * 10,\n rows: 10\n };\n api.samples.searchPageable(query, params.id, params.search, 0)\n .then(function (response) {\n if (!params.id) {\n vm.catPages = {};\n vm.clickedCats = {};\n if (vm.categories && vm.categories.length > 0) {\n vm.categories.forEach(function (category, index) {\n recursiveClearSidenavCategories(category, 'categories');\n });\n }\n vm.categories = response;\n if (vm.categories && vm.categories.length > 0) {\n vm.categories.forEach(function (category, index) {\n recursiveSetCategoriesToSideNav(category, index, 'categories');\n });\n }\n } else {\n delete vm.catPages[params.id];\n delete vm.clickedCats[params.id];\n var parent = \"categories\"\n var cat = vm.categories.filter(function (m) { return m.id == params.parent })[0];\n while (cat) {\n parent = parent + \".\" + cat.id\n cat = vm.categories.filter(function (m) { return m.id == cat.parent })[0];\n }\n var clearCategories = vm.categories.filter(function (m) { return m.parent == params.id });\n if (clearCategories && clearCategories.length > 0) {\n clearCategories.forEach(function (category, index) {\n recursiveClearSidenavCategories(category, parent + \".\" + params.id);\n });\n }\n vm.categories = vm.categories.filter(function (m) { return m.parent != params.id });\n vm.categories = vm.categories.concat(response);\n\n if (response && response.length > 0) {\n response.forEach(function (category, index) {\n recursiveSetCategoriesToSideNav(category, index, parent + \".\" + params.id);\n });\n }\n }\n\n },\n function (response) {\n $log.error(response);\n });\n }\n\n function toggleHeader(value) {\n var val = value;\n preview(vm.file);\n }\n\n function showPreview() {\n vm.hasHeader = false;\n preview(vm.file);\n }\n\n function preview(file) {\n if (!file) return;\n vm.previewData = [];\n vm.processing = true;\n SampleFactory.preview($scope, vm.file, vm.hasHeader)\n .then(function (data) {\n vm.previewData = data;\n renderPreview();\n vm.previewLoaded = true;\n vm.processing = false;\n vm.uploadCurrentTab = 1;\n }, function (reason) {\n $log.error('Failed: ' + reason);\n vm.uploadCurrentTab = 0;\n });\n };\n\n function renderPreview() {\n if (vm.customCategories && vm.previewData) {\n var columns = vm.previewData.columns;\n var data = vm.previewData.data;\n for (var i in vm.customCategories) {\n var item = vm.customCategories[i];\n var column = {\n name: item.name,\n type: 1,\n readonly: true,\n custom: true,\n value: item\n };\n\n var exists = vm.previewData.columns.some(function (element) {\n return element.name == column.name;\n });\n\n if (!exists)\n vm.previewData.columns.push(column);\n }\n\n //Tags\n for (var i in vm.customTags) {\n var item = vm.customTags[i];\n var column = {\n name: item,\n type: 3,\n readonly: true,\n custom: true,\n value: item\n };\n\n var exists = vm.previewData.columns.some(function (element) {\n return element.name == column.name;\n });\n\n if (!exists)\n vm.previewData.columns.push(column);\n }\n }\n }\n\n function removeColumn(event, column) {\n var index = null;\n var type = null;\n for (var i in vm.previewData.columns) {\n var item = vm.previewData.columns[i];\n if (item.name == column.name) {\n index = i;\n type = item.type;\n break;\n }\n }\n\n if (index)\n vm.previewData.columns.splice(index, 1);\n\n switch (type) {\n case 1:\n index = null;\n for (var i in vm.customCategories) {\n var item = vm.customCategories[i];\n if (item.name == column.name) {\n index = i;\n break;\n }\n }\n if (index)\n vm.customCategories.splice(index, 1);\n break;\n case 3:\n index = null;\n for (var i in vm.customTags) {\n var item = vm.customTags[i];\n if (item == column.name) {\n index = i;\n break;\n }\n }\n if (index)\n vm.customTags.splice(index, 1);\n break;\n }\n\n renderPreview();\n }\n\n //Samples File Save\n function saveSamplesFile(file) {\n var options = {\n categories: [],\n contents: [],\n tags: [],\n hasHeaders: vm.hasHeader,\n customCategories: vm.customCategories,\n customTags: vm.customTags,\n delimiter: vm.previewData.delimiter\n };\n\n for (var i in vm.previewData.columns) {\n var column = vm.previewData.columns[i];\n if (!column.custom) {\n if (column.type === '1') {\n options.categories.push(i);\n } else if (column.type === '2') {\n options.contents.push(i);\n } else if (column.type === '3') {\n options.tags.push(i);\n }\n }\n }\n\n if (!validateOptions(options)) {\n var message = \"The file must have one column with the text sample and a second column with the category or select a default category.\";\n var parent = $document[0].querySelector('#toastBounds');\n var toast = $mdToast.simple()\n .content(message)\n .action('OK')\n .highlightAction(true)\n .hideDelay(0)\n .position('fit')\n .theme(\"error-toast\")\n .parent(parent);\n\n $mdToast.show(toast);\n angular.forEach(vm.uploadSampleFileForm.$error.required, function (field) {\n field.$setDirty();\n });\n return;\n }\n\n \n vm.uploadSampleFileForm.$setPristine();\n vm.uploadSampleFileForm.$setUntouched();\n vm.processing = true;\n Upload.upload({\n url: api.samples.url + '/upload',\n data: {\n moduleId: vm.moduleId,\n file: file,\n options: options\n }\n }).then(function (resp) {\n $log.log('Success ' + resp.config.data.file.name + 'uploaded. Response: ' + resp.data);\n vm.processing = false;\n vm.file = null;\n vm.previewData = {};\n vm.uploadCurrentTab = 0;\n $state.go('app.classification.samples', {\n id: vm.moduleId\n }, {\n reload: true\n }); \n }, function (resp) {\n $log.error('Error status: ' + resp.status);\n vm.processing = false;\n }, function (evt) {\n var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);\n $log.log('progress: ' + progressPercentage + '% ' + evt.config.data.file.name);\n });\n }\n\n function validateOptions(options) {\n if (options.contents.length <= 0) return false;\n\n if (options.contents.length > 0) {\n if (options.categories.length <= 0) {\n if (options.customCategories.lenght <= 0) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n function calculatePageCounts(count) {\n var l = 10;\n var lastpage = Math.ceil(count / l);\n return lastpage;\n }\n\n function setCurrentPage(page) {\n if (page < 1)\n page = 1;\n var row = 10;\n vm.pagination.totalNumber = Math.ceil(vm.pagination.count / row);\n if (page > vm.pagination.totalNumber)\n page = vm.pagination.totalNumber;\n\n if (page > 0) {\n vm.pagination.current = page;\n searchSamples();\n }\n\n }\n\n\n vm.showAddCategoryDialog = function (ev) {\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'SamplesCategoryDialogController as vm',\n templateUrl: 'app/main/apps/classification/views/samples/upload-add-category.html',\n parent: angular.element(document.body),\n targetEvent: ev,\n clickOutsideToClose: true,\n fullscreen: useFullScreen\n })\n .then(function (answer) {\n vm.customCategories.push(answer);\n $log.log('You said the information was \"' + angular.toJson(answer, false) + '\".');\n renderPreview();\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n };\n\n vm.showAddTagDialog = function (ev) {\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'SamplesTagDialogController as vm',\n templateUrl: 'app/main/apps/classification/views/samples/upload-add-tag.html',\n parent: angular.element(document.body),\n targetEvent: ev,\n clickOutsideToClose: true,\n fullscreen: useFullScreen\n })\n .then(function (answer) {\n vm.customTags.push(answer);\n $log.log('You said the information was \"' + angular.toJson(answer, false) + '\".');\n renderPreview();\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n };\n\n vm.showAddSampleDialog = function (ev) {\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'AddClassificationSampleDialogController as vm',\n templateUrl: 'app/main/apps/classification/views/samples/add-sample.html',\n parent: angular.element(document.body),\n targetEvent: ev,\n clickOutsideToClose: true,\n fullscreen: useFullScreen\n })\n .then(function (answer) {\n vm.newsamples.push(answer);\n $log.log('You said the information was \"' + angular.toJson(answer, false) + '\".');\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n };\n\n // Delete Sample Data\n vm.deleteSampleData = function ($event) {\n var query = {\n text: vm.filters.search,\n moduleId: vm.moduleId,\n categoryId: vm.filters.categoryId ? vm.filters.categoryId : null,\n tag: vm.filters.tag,\n nominalAttributes:vm.filters.nominalAttributes,\n clusterId: vm.filters.clusterId\n };\n api.samples.delete(query)\n .then(function (response) {\n ModuleService.deleteSampleData($scope, $state, $event, response);\n },\n function (response) {\n $log.error(response);\n });\n //vm.filters.search = null;\n //vm.filters.categoryId = null;\n //vm.filters.tag = null;\n //vm.filters.clusterId = null;\n }\n\n // Delete Category\n vm.deleteCategory = function ($event, category) {\n ModuleService.deleteCategory($scope, $state, $event, vm.module, category);\n }\n\n // Delete Category Data\n vm.deleteCategoryData = function ($event, category) {\n ModuleService.deleteCategoryData($scope, $state, $event, vm.module, category);\n }\n\n //\n\n function queryCategorySearch(query) {\n var results = query ? vm.module.categories.filter(createFilterFor(query)) : [];\n return results;\n }\n\n /**\n * Create filter function for a query string\n */\n function createFilterFor(query) {\n var lowercaseQuery = angular.lowercase(query);\n return function filterFn(item) {\n var lowercaseName = angular.lowercase(item.name);\n return (lowercaseName.indexOf(lowercaseQuery) === 0);\n };\n }\n\n function toggleCheck(item, $event) {\n item.checked = (!item.checked);\n }\n\n function toggleCheckAll($event) {\n vm.allChecked = (!vm.allChecked);\n vm.newsamples.forEach(function (item) {\n item.checked = vm.allChecked;\n });\n }\n\n function removeSelectedSamples($event) {\n if (vm.allChecked) {\n vm.newsamples = [];\n } else {\n var i;\n for (i = vm.newsamples.length - 1; i >= 0; i -= 1) {\n if (vm.newsamples[i].checked) {\n vm.newsamples.splice(i, 1);\n }\n }\n }\n vm.allChecked = false;\n }\n\n function setCategoriesToSideNav() {\n //msNavigationSidebarService.clearNavigation();\n msNavigationSidebarService.saveItem('categories', {\n title: 'Categories',\n group: true,\n weight: 1,\n class: 'navigation-dashboards',\n translate: 'SHARED.CATEGORIES',\n childrenCount: 1,\n searchCategories: function (stateParams) {\n searchCategories(stateParams);\n },\n click: function (stateParams) {\n var deferred = $q.defer();\n toggleCategoryFilter();\n deferred.resolve([]);\n return deferred.promise;\n }\n });\n if (vm.allCategories && vm.allCategories.length > 0) {\n vm.allCategories.forEach(function (category, index) {\n recursiveDeleteCategoriesFromSideNav(category, index, 'categories');\n });\n vm.categories.forEach(function (category, index) {\n recursiveDeleteCategoriesFromSideNav(category, index, 'categories');\n });\n }\n if (vm.categories && vm.categories.length > 0) {\n vm.categories.forEach(function (category, index) {\n recursiveSetCategoriesToSideNav(category, index, 'categories');\n });\n }else{\n msNavigationSidebarService.deleteItem('categories');\n msNavigationSidebarService.deleteItem('tags');\n msNavigationSidebarService.deleteItem('nominals');\n }\n if (vm.allTags && vm.allTags.length > 0) {\n msNavigationSidebarService.saveItem('tags', {\n title: 'Tags',\n group: true,\n weight: 2,\n childrenCount: 1,\n default: true,\n translate: 'SHARED.TAGS',\n click: function (stateParams) {}\n });\n vm.allTags.forEach(function (tag, index) {\n msNavigationSidebarService.deleteItem('tags.'+ tag.name, {\n title: tag.name,\n icon: 'icon-tile-four',\n class: 'navigation-dashboards',\n stateParams: {\n 'tag': tag\n },\n badge: {\n content: tag.count,\n color: 'rgb(73, 183, 236)'\n },\n click: function (stateParams) {\n toggleTagFilter(stateParams.tag);\n },\n hidden: function (node) {\n return false;\n },\n weight:index\n });\n });\n vm.tags.forEach(function (tag, index) {\n msNavigationSidebarService.saveItem('tags.'+ tag.name, {\n title: tag.name,\n icon: 'icon-tile-four',\n class: 'navigation-dashboards',\n childrenCount: 1,\n default: true,\n stateParams: {\n 'tag': tag\n },\n badge: {\n content: tag.count,\n color: 'rgb(73, 183, 236)'\n },\n click: function (stateParams) {\n toggleTagFilter(stateParams.tag);\n },\n hidden: function (node) {\n return false;\n },\n weight:index\n });\n });\n }\n if(vm.allNominalAttributes && vm.allNominalAttributes.length > 0){\n msNavigationSidebarService.saveItem('nominals', {\n title: 'Nominal Attributes',\n group: true,\n weight: 3,\n childrenCount: 1,\n default: true,\n translate: 'SHARED.NOMINAL_ATTRIBUTES',\n click: function (stateParams) {}\n });\n vm.allNominalAttributes.forEach(function (nominal, index) {\n if(nominal.facetValues!=null){\n var fieldTitle = vm.module.moduleFields.find(function(f){return f.fieldName === nominal.fieldName;}).fieldTitle;\n var totalCount = 0;\n var facetValues = Object.values(nominal.facetValues);\n for (var i = 0; i < facetValues.length; i++) {\n totalCount+=facetValues[i];\n }\n Object.keys(nominal.facetValues).forEach(function(k){\n var v = nominal.facetValues[k];\n msNavigationSidebarService.deleteItem(fieldTitle, {\n title: fieldTitle,\n icon: 'icon-tile-four',\n class: 'navigation-dashboards',\n stateParams: {\n fieldName: fieldTitle\n },\n badge: {\n content: totalCount,\n color: 'rgb(73, 183, 236)'\n },\n click: function (stateParams) {},\n hidden: function (node) {\n return false;\n },\n weight:index\n });\n msNavigationSidebarService.deleteItem(fieldTitle+'.'+ k, {\n title: k,\n icon: 'icon-tile-four',\n class: 'navigation-dashboards',\n stateParams: {\n fieldName: nominal.fieldName,\n filterValue: k\n },\n badge: {\n content: v,\n color: 'rgb(73, 183, 236)'\n },\n click: function (stateParams) {\n toggleNominalFilter(stateParams.fieldName, stateParams.filterValue);\n },\n hidden: function (node) {\n return false;\n },\n weight:index\n });\n })\n }\n });\n vm.nominalAttributes.forEach(function (nominal, index) {\n if(nominal.facetValues!=null){\n var fieldTitle = vm.module.moduleFields.find(function(f){return f.fieldName === nominal.fieldName;}).fieldTitle;\n var totalCount = 0;\n var facetValues = Object.values(nominal.facetValues);\n for (var i = 0; i < facetValues.length; i++) {\n totalCount+=facetValues[i];\n }\n Object.keys(nominal.facetValues).forEach(function(k){\n var v = nominal.facetValues[k];\n msNavigationSidebarService.saveItem(fieldTitle, {\n title: fieldTitle,\n icon: 'icon-tile-four',\n class: 'navigation-dashboards',\n childrenCount: 1,\n default: true,\n stateParams: {\n fieldName: fieldTitle\n },\n badge: {\n content: totalCount,\n color: 'rgb(73, 183, 236)'\n },\n click: function (stateParams) {},\n hidden: function (node) {\n return false;\n },\n weight:index\n });\n msNavigationSidebarService.saveItem(fieldTitle+'.'+ k, {\n title: k,\n icon: 'icon-tile-four',\n class: 'navigation-dashboards',\n childrenCount: 1,\n default: true,\n stateParams: {\n fieldName: nominal.fieldName,\n filterValue: k\n },\n badge: {\n content: v,\n color: 'rgb(73, 183, 236)'\n },\n click: function (stateParams) {\n toggleNominalFilter(stateParams.fieldName, stateParams.filterValue);\n },\n hidden: function (node) {\n return false;\n },\n weight:index\n });\n })\n }\n });\n }\n //vm.numericAttributes.forEach... \"removed because of 'dot syntax' error\"\n }\n\n function recursiveSetCategoriesToSideNav(category, weight, parent) {\n msNavigationSidebarService.saveItem(parent + \".\" + category.id, {\n title: category.name,\n localVariables: category.localVariables,\n icon: 'icon-tile-four',\n class: 'navigation-dashboards',\n childrenCount: category.childrenCount,\n stateParams: {\n 'id': category.id,\n 'parent': category.parent\n },\n badge: {\n content: category.count,\n color: 'rgb(73, 183, 236)'\n },\n click: function (stateParams) {\n var deferred = $q.defer();\n event.stopPropagation();\n toggleCategoryFilter(stateParams);\n deferred.resolve([]);\n return deferred.promise;\n },\n moreAndMore: function (stateParams) {\n var deferred = $q.defer();\n deferred.resolve(moreAndMore(stateParams));\n return deferred.promise;\n },\n searchCategories: function (stateParams) {\n searchCategories(stateParams);\n },\n hidden: function (node) {\n return false;\n },\n weight: weight\n });\n if (category.children && category.children.length > 0) {\n category.children.forEach(function (cat, index) {\n recursiveSetCategoriesToSideNav(cat, index, parent + \".\" + category.id);\n })\n }\n }\n function recursiveDeleteCategoriesFromSideNav(category, weight, parent) {\n msNavigationSidebarService.deleteItem(parent + \".\" + category.id, {\n title: category.name,\n icon: 'icon-tile-four',\n class: 'navigation-dashboards',\n stateParams: {\n 'id': category.id\n },\n badge: {\n content: category.count,\n color: 'rgb(73, 183, 236)'\n },\n click: function (stateParams) {\n toggleCategoryFilter(stateParams);\n },\n hidden: function (node) {\n return false;\n },\n weight: weight\n });\n if (category.children && category.children.length > 0) {\n category.children.forEach(function (cat, index) {\n recursiveDeleteCategoriesFromSideNav(cat, index, parent + \".\" + category.id);\n })\n }\n }\n\n function recursiveClearSidenavCategories(category, parent) {\n msNavigationSidebarService.deleteItem(parent + \".\" + category.id)\n if (category.children && category.children.length > 0) {\n category.children.forEach(function (cat, index) {\n recursiveClearSidenavCategories(cat, index, parent + \".\" + category.id);\n })\n }\n }\n\n $rootScope.$on('$stateChangeStart',\n function (event, toState, toParams, fromState, fromParams) {\n msNavigationSidebarService.clearNavigationItems();\n })\n\n function getCategoryTitle(cat) {\n var title = cat.name;\n if (cat.localVariables) {\n var localVariable = cat.localVariables.filter(function (k) { return $translate.use() == k.language; })[0];\n if (localVariable) title = localVariable.value;\n }\n return title;\n }\n\n function init() {\n searchSamples(init=true);\n vm.alltags = vm.tags;\n vm.allCategories = vm.categories;\n vm.allNominalAttributes = vm.nominalAttributes;\n }\n init();\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.modules')\n .controller('TestUploadController', TestUploadController);\n\n /** @ngInject */\n function TestUploadController($rootScope, $scope, $state, $stateParams,\n $translate, $log, $mdToast, $document,\n api, Upload, SampleService, SampleFactory,\n $$module, $interval) {\n var vm = this;\n vm.module = $$module;\n vm.type = $stateParams.type+'Test';\n vm.moduleId = $stateParams.id;\n vm.processId = \"\";\n vm.processTraces = [];\n vm.monitoring = false;\n vm.hasHeader = false;\n vm.excelColumnsDictionary = _buildColumnsArray('A1:ZZ38');\n\n vm.customCategories = [];\n vm.customTags = [];\n \n vm.fileUploaded = false;\n vm.uploadCurrentTab = 0;\n vm.msScrollOptions = {\n suppressScrollX: true\n };\n\n vm.selectedTrainId = $stateParams.selectedTrainId;\n vm.dropifyConfig = {};\n\n vm.columnSize = 0;\n\n vm.selectedCategories = [];\n vm.selectedCategoryCodes = [];\n //Data\n vm.file = null;\n vm.previewData = {};\n vm.previewLoaded = vm.previewData && vm.previewData.length > 0;\n vm.processing = false;\n\n //Methods\n vm.preview = showPreview;\n vm.saveSamplesFile = saveSamplesFile;\n vm.validateOptions = validateOptions;\n vm.toggleHeader = toggleHeader;\n vm.removeColumn = removeColumn;\n // vm.fillConstantCategories = fillConstantCategories;\n vm.changeSetCategory = changeSetCategory;\n vm.changeConstantCategoriesLanguageChange = changeConstantCategoriesLanguageChange;\n vm.init = init;\n\n \n\n vm.init();\n\n function init() {\n vm.dropifyConfig = setDropifyConfig();\n vm.changeConstantCategoriesLanguageChange($translate.use());\n }\n\n \n $rootScope.$on('$translateChangeSuccess', function (event, current, previous) {\n // Language has changed\n vm.changeConstantCategoriesLanguageChange($translate.use());\n setDropifyConfig();\n });\n\n function setDropifyConfig(){\n if(vm.module.moduleType.id === 7){\n return {\n messages: {\n 'default': $translate.instant('SHARED.MESSAGES.DROPIFY_DEFAULT_SENTIMENT_CLASSIFIER'),\n 'replace': $translate.instant('SHARED.MESSAGES.DROPIFY_REPLACE_SENTIMENT_CLASSIFIER'),\n 'remove': $translate.instant('SHARED.MESSAGES.DROPIFY_REMOVE'),\n 'error': $translate.instant('SHARED.MESSAGES.DROPIFY_ERROR')\n }\n };\n }else{\n return {\n messages: {\n 'default': $translate.instant('SHARED.MESSAGES.DROPIFY_DEFAULT'),\n 'replace': $translate.instant('SHARED.MESSAGES.DROPIFY_REPLACE'),\n 'remove': $translate.instant('SHARED.MESSAGES.DROPIFY_REMOVE'),\n 'error': $translate.instant('SHARED.MESSAGES.DROPIFY_ERROR')\n }\n };\n }\n }\n function changeConstantCategoriesLanguageChange(lg) {\n vm.constantCategoryNames = [{\n \"name\": null,\n \"value\": -1,\n \"index\": -1\n },\n {\n \"name\": \"Id\",\n \"value\": 73,\n \"index\": -1\n },\n {\n \"name\": \"Text\",\n \"value\": 2,\n \"index\": -1\n }];\n \n vm.module.moduleFields.forEach(function(r){ vm.constantCategoryNames.push({\"name\": r.fieldTitle, \"value\":r.fieldType}); });\n \n }\n\n vm.fieldMap = {};\n\n\n function changeSetCategory(type, index) {\n vm.constantCategoryNames.forEach(function(r){if(r.value == type){vm.fieldMap[index.toString()] = r.name}});\n // vm.fieldMap[index.toString()] = vm.constantCategoryNames[index+1].name;\n\n var selected = vm.selectedCategories.find(function (s) {\n return s.index === parseInt(index);\n });\n if (selected) {\n vm.selectedCategories = vm.selectedCategories.filter(function (t) {\n return t.index !== parseInt(index)\n });\n var i = 1;\n while (vm.selectedCategories.filter(function (t) {\n return t.value === parseInt(selected.value.toString() + \"1\")\n }).length > 0) {\n vm.previewData.columns[index + i++].type = null;\n vm.selectedCategories = vm.selectedCategories.filter(function (t) {\n return t.value !== parseInt(selected.value.toString() + \"1\")\n });\n selected.value = parseInt(selected.value.toString() + \"1\");\n }\n }\n if (parseInt(type) === 11) {\n var mc = vm.constantCategoryNames.find(function (c) {\n return c.value === parseInt(type);\n });\n var mainCat = JSON.parse(JSON.stringify(mc));\n var mainCats = vm.selectedCategories.filter(function (s) {\n return s.value < 100 && s.value > 10;\n });\n if (mainCats.length > 0) {\n var maxMainCat = Math.max.apply(Math, mainCats.map(function (s) {\n return s.value;\n }));\n mainCat.value = maxMainCat + 1;\n mainCat.index = index;\n vm.selectedCategories.push(mainCat);\n } else {\n mainCat.index = index;\n vm.selectedCategories.push(mainCat);\n }\n } else if (parseInt(type) === 111) {\n var s = vm.constantCategoryNames.find(function (c) {\n return c.value === parseInt(type);\n });\n var subCat = JSON.parse(JSON.stringify(s));\n var upCat = vm.selectedCategories.find(function (s) {\n return s.index === parseInt(index) - 1;\n });\n if (!upCat) {\n vm.previewData.columns[index].type = null;\n } else {\n subCat.value = parseInt(upCat.value.toString() + \"1\");\n subCat.index = index;\n vm.selectedCategories.push(subCat);\n }\n }\n changeSetCategoryCode(type, index);\n /*if (type !== \"\") {\n if (parseInt(type) > 10) {\n var selected = vm.selectedCategories.find(function (t) {\n return t.value === parseInt(type)\n });\n if (selected === null || selected === undefined) {\n var selected = vm.constantCategoryNames.find(function (t) {\n return t.value === parseInt(type)\n });\n selected.index = index;\n vm.selectedCategories = vm.selectedCategories.filter(function (t) {\n return t.index !== index\n });\n vm.selectedCategories.push(selected);\n } else {\n vm.previewData.columns[index].type = null;\n }\n }\n } else {\n vm.selectedCategories = vm.selectedCategories.filter(function (t) {\n return t.index !== index\n });\n }*/\n //controlSetCategory();\n }\n\n function changeSetCategoryCode(type, index) {\n var selected = vm.selectedCategoryCodes.find(function (s) {\n return s.index === parseInt(index);\n });\n if (selected) {\n vm.selectedCategoryCodes = vm.selectedCategoryCodes.filter(function (t) {\n return t.index !== parseInt(index)\n });\n var i = 1;\n while (vm.selectedCategoryCodes.filter(function (t) {\n return t.value === parseInt(selected.value.toString() + \"1\")\n }).length > 0) {\n vm.previewData.columns[index + i++].type = null;\n vm.selectedCategoryCodes = vm.selectedCategoryCodes.filter(function (t) {\n return t.value !== parseInt(selected.value.toString() + \"1\")\n });\n selected.value = parseInt(selected.value.toString() + \"1\");\n }\n }\n if (parseInt(type) === -11) {\n var mcc = vm.constantCategoryNames.find(function (c) {\n return c.value === parseInt(type);\n });\n var mainCatCode = JSON.parse(JSON.stringify(mcc));\n var mainCatCodes = vm.selectedCategoryCodes.filter(function (s) {\n return s.value > -100 && s.value < -10;\n });\n if (mainCatCodes.length > 0) {\n var minMainCatCode = Math.min.apply(Math, mainCatCodes.map(function (s) {\n return s.value;\n }));\n mainCatCode.value = minMainCatCode - 1;\n mainCatCode.index = index;\n vm.selectedCategoryCodes.push(mainCatCode);\n } else {\n mainCatCode.index = index;\n vm.selectedCategoryCodes.push(mainCatCode);\n }\n } else if (parseInt(type) === -111) {\n var s = vm.constantCategoryNames.find(function (c) {\n return c.value === parseInt(type);\n });\n var subCatCode = JSON.parse(JSON.stringify(s));\n var upCatCode = vm.selectedCategoryCodes.find(function (s) {\n return s.index === parseInt(index) - 1;\n });\n if (!upCatCode) {\n vm.previewData.columns[index].type = null;\n } else {\n subCatCode.value = parseInt(upCatCode.value.toString() + \"1\");\n subCatCode.index = index;\n vm.selectedCategoryCodes.push(subCatCode);\n }\n }\n }\n\n function controlSetCategory(type, index) {\n var subCats = vm.previewData.columns.filter(function (c) {\n return parseInt(c.type) > 100\n });\n subCats.forEach(function (s) {\n var hasUpCategory = false;\n vm.previewData.columns.forEach(function (c) {\n var canControl = true;\n s.name === c.name ? canControl = false : canControl = true;\n if (canControl) {\n if (s.type.substring(0, s.type.length - 1) === c.type)\n hasUpCategory = true;\n }\n });\n if (!hasUpCategory) {\n vm.selectedCategories = vm.selectedCategories.filter(function (t) {\n return t.value !== parseInt(s.type)\n });\n s.type = null;\n }\n });\n console.log(vm.selectedCategories);\n }\n\n\n function toggleHeader(value) {\n var val = value;\n vm.previewData.columns.forEach(function (p) {\n p.type = null;\n });\n vm.selectedCategories = [];\n preview(vm.file);\n }\n\n function showPreview() {\n vm.hasHeader = true;\n preview(vm.file);\n }\n\n function preview(file) {\n if (!file) return;\n vm.previewData = [];\n vm.processing = true;\n SampleFactory.preview($scope, vm.file, vm.hasHeader)\n .then(function (data) {\n if (data.columns && data.columns.length > 0)\n data.columns = adjustColumnWhitespaces(data);\n vm.previewData = data;\n renderPreview();\n vm.previewLoaded = true;\n vm.processing = false;\n vm.uploadCurrentTab = 1;\n }, function (reason) {\n $log.error('Failed: ' + reason);\n vm.uploadCurrentTab = 0;\n });\n };\n\n\n function renderPreview() {\n if (vm.customCategories && vm.previewData) {\n var columns = vm.previewData.columns;\n //vm.columnSize = columns.length;\n //if (vm.constantCategoryNames.length <= 5)\n // vm.fillConstantCategories($translate.use());\n var data = vm.previewData.data;\n \n for (var i in vm.customCategories) {\n var item = vm.customCategories[i];\n var column = {\n name: item.name,\n type: 1,\n readonly: true,\n custom: true,\n value: item\n };\n\n\n var exists = vm.previewData.columns.some(function (element) {\n return element.name == column.name;\n });\n\n if (!exists)\n vm.previewData.columns.push(column);\n }\n\n //Tags\n for (var i in vm.customTags) {\n var item = vm.customTags[i];\n var column = {\n name: item,\n type: 3,\n readonly: true,\n custom: true,\n value: item\n };\n\n var exists = vm.previewData.columns.some(function (element) {\n return element.name == column.name;\n });\n\n if (!exists)\n vm.previewData.columns.push(column);\n }\n }\n }\n\n function removeColumn(event, column) {\n var index = null;\n var type = null;\n for (var i in vm.previewData.columns) {\n var item = vm.previewData.columns[i];\n if (item.name == column.name) {\n index = i;\n type = item.type;\n\n break;\n }\n }\n\n if (index)\n vm.previewData.columns.splice(index, 1);\n\n switch (type) {\n case 1:\n index = null;\n for (var i in vm.customCategories) {\n var item = vm.customCategories[i];\n if (item.name == column.name) {\n index = i;\n break;\n }\n }\n if (index)\n vm.customCategories.splice(index, 1);\n break;\n case 3:\n index = null;\n for (var i in vm.customTags) {\n var item = vm.customTags[i];\n if (item == column.name) {\n index = i;\n break;\n }\n }\n if (index)\n vm.customTags.splice(index, 1);\n break;\n }\n\n renderPreview();\n }\n\n //Samples File Save\n function saveSamplesFile(file) {\n var options = {\n selectedCategories: vm.selectedCategories,\n selectedCategoryCodes: vm.selectedCategoryCodes,\n categories: [],\n contents: [],\n tags: [],\n reals: [],\n nominals: [],\n subCategories: [],\n hasHeaders: vm.hasHeader,\n customCategories: vm.customCategories,\n customTags: vm.customTags,\n delimiter: vm.previewData.delimiter\n };\n\n for (var i in vm.previewData.columns) {\n var column = vm.previewData.columns[i];\n if (!column.custom) {\n if (column.type === '73') {\n options.tags.push(i);\n } if (column.type === '2') {\n options.contents.push(i);\n } else if (column.type === '301') {\n options.reals.push(i);\n } else if (column.type === '300') {\n options.nominals.push(i);\n }\n }\n }\n\n if (!validateOptions(options)) {\n var message = \"The file must have one column with the text sample.\";\n var parent = $document[0].querySelector('#toastBounds');\n var toast = $mdToast.simple()\n .content(message)\n .action('OK')\n .highlightAction(true)\n .hideDelay(0)\n .position('fit')\n .theme(\"error-toast\")\n .parent(parent);\n\n $mdToast.show(toast);\n angular.forEach(vm.uploadSampleFileForm.$error.required, function (field) {\n field.$setDirty();\n });\n return;\n }\n\n vm.uploadSampleFileForm.$setPristine();\n vm.uploadSampleFileForm.$setUntouched();\n vm.processing = true;\n Upload.upload({\n responseType:'arraybuffer',\n timeout: 240000,\n url: api.classification.url + \"/\" + vm.moduleId + '/classifyFile',\n data: {\n trainId: vm.selectedTrainId,\n file: file,\n options: JSON.stringify(options, function (key, value) {\n if (key === \"$$hashKey\") {\n return undefined;\n }\n return value;\n }),\n fieldMap: JSON.stringify(vm.fieldMap, function (key, value) {\n if (key === \"$$hashKey\") {\n return undefined;\n }\n return value;\n })\n }\n }).then(function (resp) {\n // $log.log('Success ' + resp.config.data.file.name + 'uploaded. Response: ' + resp.data);\n var file = new Blob([ resp.data ], { type : 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=UTF-8'});\n var defaultFileName = resp.config.data.file.name.replace('.xlsx','_classified.xlsx');\n saveAs(file,defaultFileName);\n \n vm.processing = false;\n vm.processId = resp.data.processId;\n vm.monitoring = true;\n vm.check();\n vm.file = null;\n vm.previewData = {};\n vm.uploadCurrentTab = 0;\n \n $state.go('app.module.test', {\n id: vm.moduleId\n }, {\n reload: true\n });\n\n }, function (resp) {\n $log.error('Error status: ' + resp.status);\n vm.processing = false;\n }, function (evt) {\n var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);\n $log.log('progress: ' + progressPercentage + '% ' + evt.config.data.file.name);\n });\n }\n\n function validateOptions(options) {\n if (options.contents.length <= 0) return false;\n\n if (options.contents.length > 1) return false;\n\n return true;\n }\n var stop;\n\n vm.check = function () {\n // Don't start a new fight if we are already fighting\n if (angular.isDefined(stop)) return;\n stop = $interval(function () {\n if (vm.monitoring) {\n getTrace();\n } else {\n vm.stopCheck();\n }\n vm.enable = !isDisable();\n }, 2000);\n };\n\n vm.stopCheck = function () {\n if (angular.isDefined(stop)) {\n $interval.cancel(stop);\n stop = undefined;\n }\n };\n\n var getTrace = function getTrace() {\n if (vm.processId && vm.monitoring) {\n api.samples.findLastProcessTrace(vm.processId)\n .then(function (response) {\n if (response) {\n vm.processTraces = response;\n if (vm.processTraces && vm.processTraces.length > 0) {\n var lastProcessTrace = vm.processTraces[vm.processTraces.length - 1];\n if (lastProcessTrace.status == 201) {\n vm.monitoring = false;\n vm.stopCheck();\n $state.go('app.module.test', {\n id: vm.moduleId\n }, {\n reload: true\n });\n }\n }\n }\n }, function (error) {\n $log.error('Error status: ' + resp.status);\n })\n }\n }\n\n function isDisable() {\n if (!vm.hasPipeline) return true;\n if (vm.type === \"RootCause\" && !vm.hasClassifier) return true;\n if (!vm.hasData) return true;\n if (vm.trainStatus === 1) return true;\n if (vm.trainStatus === 2) return true;\n }\n\n function adjustColumnWhitespaces(source) {\n var lastColumnName = source.columns[source.columns.length - 1].name;\n var realIndexOfName = vm.excelColumnsDictionary.indexOf(lastColumnName);\n var newColumns = [];\n var i;\n for (i = 0; i <= realIndexOfName; i++) {\n if (vm.hasHeader) {\n var found = source.columns.find(function (c) {\n return c.name === vm.excelColumnsDictionary[i]\n });\n if (found && found.title) {\n newColumns.push({\n \"name\": vm.excelColumnsDictionary[i],\n \"title\": found.title\n });\n } else\n newColumns.push({\n \"name\": vm.excelColumnsDictionary[i],\n \"title\": null\n });\n } else {\n newColumns.push({\n \"name\": vm.excelColumnsDictionary[i]\n });\n }\n }\n return newColumns;\n }\n\n function alphaToNum(alpha) {\n\n var i = 0,\n num = 0,\n len = alpha.length;\n\n for (; i < len; i++) {\n num = num * 26 + alpha.charCodeAt(i) - 0x40;\n }\n\n return num - 1;\n }\n\n function numToAlpha(num) {\n\n var alpha = '';\n\n for (; num >= 0; num = parseInt(num / 26, 10) - 1) {\n alpha = String.fromCharCode(num % 26 + 0x41) + alpha;\n }\n\n return alpha;\n }\n\n function _buildColumnsArray(range) {\n\n var i,\n res = [],\n rangeNum = range.split(':').map(function (val) {\n return alphaToNum(val.replace(/[0-9]/g, ''));\n }),\n start = rangeNum[0],\n end = rangeNum[1] + 1;\n\n for (i = start; i < end; i++) {\n res.push(numToAlpha(i));\n }\n\n return res;\n }\n\n // Add Category\n vm.addCategory = function ($event) {\n SampleService\n .addCategory($scope, $state, $event, vm.module)\n .then(function (category) {\n vm.customCategories.push(category);\n renderPreview();\n });\n }\n\n // Add Tag\n vm.addTag = function ($event) {\n SampleService\n .addTag($scope, $state, $event, vm.module)\n .then(function (tag) {\n vm.customTags.push(tag);\n renderPreview();\n });\n }\n\n $scope.$on('$destroy', function () {\n // Make sure that the interval is destroyed too\n vm.stopCheck();\n });\n\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.modules')\n .controller('SentimentTestController', SentimentTestController);\n\n /** @ngInject */\n function SentimentTestController($rootScope, $scope, $state, $stateParams,\n $log, $mdToast, $translate, $timeout, $document, $mdMedia, $mdDialog, api, Upload,\n FileReader, ModuleService, $utils, $$module) {\n var vm = this;\n vm.module = $$module;\n vm.text = '';\n vm.result = {};\n vm.uploadCurrentTab = 0;\n vm.fileUploaded = false;\n vm.processing = false;\n vm.hasHeader = false;\n vm.moduleId = $stateParams.id;\n vm.multipleData = {};\n vm.toggleHeader = toggleHeader;\n vm.isOpen = false;\n vm.selectedMode = 'md-scale';\n\n $rootScope.$on('$translateChangeSuccess', function(event, current, previous) {\n vm.statisticsChart.result.options.chart.noData = $translate.instant('CLASSIFICATION.ERRORS.NO_DATA_AVAILABLE');\n vm.sentimentMultiChart.result.options.chart.noData = $translate.instant('CLASSIFICATION.ERRORS.NO_DATA_AVAILABLE');\n vm.discreteBarChart.result.options.chart.noData = $translate.instant('CLASSIFICATION.ERRORS.NO_DATA_AVAILABLE');\n vm.dropifyConfig = {\n messages: {\n 'default': $translate.instant('SHARED.MESSAGES.DROPIFY_DEFAULT'),\n 'replace': $translate.instant('SHARED.MESSAGES.DROPIFY_REPLACE'),\n 'remove': $translate.instant('SHARED.MESSAGES.DROPIFY_REMOVE'),\n 'error': $translate.instant('SHARED.MESSAGES.DROPIFY_ERROR')\n }\n }; \n });\n\n vm.dropifyConfig = {\n messages: {\n 'default': $translate.instant('SHARED.MESSAGES.DROPIFY_DEFAULT'),\n 'replace': $translate.instant('SHARED.MESSAGES.DROPIFY_REPLACE'),\n 'remove': $translate.instant('SHARED.MESSAGES.DROPIFY_REMOVE'),\n 'error': $translate.instant('SHARED.MESSAGES.DROPIFY_ERROR')\n }\n };\n\n vm.file = null;\n vm.previewData = {};\n vm.previewLoading = false;\n vm.previewLoaded = vm.previewData && vm.previewData.length > 0;\n\n vm.pagination = {\n current: 1,\n last: 1\n };\n\n vm.filters = {\n search: '',\n types: [],\n };\n vm.filtersDefaults = angular.copy(vm.filters);\n\n vm.configuration = {\n \"editable\": false,\n \"viewButtonClass\": \"btn-info\",\n \"editButtonClass\": \"btn-success\"\n };\n vm.options = {\n \"mode\": \"code\",\n \"modes\": [\n \"tree\",\n \"form\",\n \"code\",\n \"text\"\n ],\n \"history\": false\n };\n\n //Methods\n vm.sentimentify = sentimentify;\n vm.preview = showPreview;\n vm.validateOptions = validateOptions;\n vm.fileTest = fileTest;\n vm.setCurrentPage = setCurrentPage;\n\n\n function setCurrentPage(page) {\n if (page > 0 && page <= vm.pagination.last)\n vm.pagination.current = page;\n }\n\n function calculatePageCounts(count) {\n var l = 10;\n var lastpage = Math.ceil(count / l);\n return lastpage;\n }\n\n $scope.$watchCollection('filtered', function() {\n if (!vm.multipleData) return;\n if (!vm.multipleData.detail) return;\n\n var length = vm.multipleData.detail.length;\n if ($scope.filtered) {\n var length = $scope.filtered.length;\n }\n vm.pagination.last = calculatePageCounts(length);\n });\n\n //Train\n function sentimentify() {\n var data = {\n moduleId: $stateParams.id,\n text: vm.text\n };\n\n api.sentiment.single(data)\n .then(function(response) {\n vm.result = response.result;\n if (vm.result && vm.result.length > 0) {\n angular.forEach(vm.result, function(data, index) {\n var label = $translate.instant(data.label);\n vm.result[index] = {\n label: label,\n value: data.value\n };\n });\n }\n vm.statisticsChart.change();\n },\n function(response) {\n $log.error(response);\n });\n };\n\n // Statistics Charts\n vm.statisticsChart = {\n config: {\n refreshDataOnly: true,\n deepWatchData: true\n },\n result: {\n options: {\n chart: {\n type: 'pieChart',\n color: ['#4CAF50', '#F44336', '#9E9E9E'],\n height: 400,\n margin: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n },\n donut: true,\n clipEdge: true,\n cornerRadius: 0,\n labelType: 'value',\n showLegend: false,\n padAngle: 0.02,\n x: function(d) {\n return d.label;\n },\n y: function(d) {\n return d.value;\n },\n tooltip: {\n gravity: 's',\n classes: 'gravity-s'\n },\n noData: $translate.instant('SENTIMENT.ERRORS.NO_DATA_AVAILABLE')\n }\n },\n data: []\n },\n change: function(range) {\n vm.statisticsChart.result.data = [];\n\n angular.forEach(vm.result, function(data, index) {\n vm.statisticsChart.result.data[index] = {\n label: data.label,\n value: data.value\n };\n });\n\n if (vm.result.length === 1) {\n var data = vm.result[0];\n vm.statisticsChart.result.data[1] = {\n label: '',\n value: 1 - data.value\n };\n }\n },\n init: function() {\n // Run this function once to initialize widget\n\n /**\n * Update the range for the first time\n */\n vm.statisticsChart.change();\n }\n };\n\n vm.sentimentMultiChart = {\n config: {\n refreshDataOnly: true,\n deepWatchData: true\n },\n result: {\n options: {\n chart: {\n type: 'pieChart',\n color: ['#4CAF50', '#F44336', '#9E9E9E'],\n height: 400,\n margin: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n },\n donut: true,\n clipEdge: true,\n cornerRadius: 0,\n labelType: 'value',\n showLegend: false,\n padAngle: 0.02,\n x: function(d) {\n return d.label;\n },\n y: function(d) {\n return d.value;\n },\n tooltip: {\n gravity: 's',\n classes: 'gravity-s'\n },\n noData: $translate.instant('SENTIMENT.ERRORS.NO_DATA_AVAILABLE')\n }\n },\n data: []\n },\n change: function(range) {\n vm.sentimentMultiChart.result.data = [];\n\n angular.forEach(vm.multipleData.pie, function(data, index) {\n vm.sentimentMultiChart.result.data[index] = {\n label: data.label,\n value: data.value\n };\n });\n\n if (vm.result.length === 1) {\n var data = vm.result[0];\n vm.sentimentMultiChart.result.data[1] = {\n label: '',\n value: 1 - data.value\n };\n }\n\n $utils.resize(300);\n },\n init: function() {\n vm.sentimentMultiChart.change();\n }\n };\n\n vm.discreteBarChart = {\n config: {\n refreshDataOnly: true,\n deepWatchData: true\n },\n result: {\n options: {\n chart: {\n type: 'discreteBarChart',\n color: ['#4CAF50', '#F44336', '#9E9E9E'],\n height: 250,\n margin: {\n top: 10,\n right: 10,\n bottom: 20,\n left: -2\n },\n showValues: true,\n valueFormat: function(d) {\n return d3.format('f')(d);\n },\n x: function(d) {\n return d.label;\n },\n y: function(d) {\n return d.value;\n },\n xAxis: {\n axisLabel: \"\"\n },\n yAxis: {\n axisLabel: \"\",\n axisLabelDistance: -10,\n tickFormat: function(d) {\n return d3.format('f')(d);\n }\n },\n tooltip: {\n gravity: 's',\n classes: 'gravity-s'\n },\n noData: $translate.instant('SENTIMENT.ERRORS.NO_DATA_AVAILABLE')\n }\n },\n data: []\n },\n change: function() {\n vm.discreteBarChart.result.data = vm.multipleData.chart;\n $utils.resize(300);\n\n },\n init: function() {\n vm.discreteBarChart.change();\n }\n };\n\n // File\n function toggleHeader(value) {\n var val = value;\n preview(vm.file);\n }\n\n function showPreview() {\n vm.hasHeader = false;\n preview(vm.file);\n }\n\n function preview(file) {\n if (!file) return;\n vm.previewData = [];\n vm.previewLoading = true;\n var extension = getFileExtension(file);\n if (extension === undefined || extension.lenght <= 0)\n return;\n\n switch (extension[0]) {\n case \"xls\":\n case \"xlsx\":\n FileReader.readAsBinaryString(file, $scope)\n .then(function(result) {\n if (extension === undefined || extension.lenght <= 0)\n return;\n\n excelPreview(result);\n vm.uploadCurrentTab = 1;\n });\n break;\n case \"csv\":\n case \"txt\":\n case \"tsv\":\n case \"prn\":\n FileReader.readAsText(file, 'utf-8', $scope)\n .then(function(result) {\n if (extension === undefined || extension.lenght <= 0)\n return;\n\n csvPreview(result);\n vm.uploadCurrentTab = 1;\n });\n break;\n default:\n vm.uploadCurrentTab = 0;\n var message = extension[0] + \" is not supported! Please select excel or csv file.\";\n var parent = $document[0].querySelector('.dropify-wrapper');\n var toast = $mdToast.simple()\n .content(message)\n .action('OK')\n .highlightAction(true)\n .hideDelay(5000)\n .position('fit')\n .theme(\"error-toast\")\n .parent(parent);\n\n $mdToast.show(toast);\n break;\n }\n };\n\n function excelPreview(result) {\n var workbook = XLSX.read(result, {\n type: 'binary'\n });\n var data = excelToJson(workbook);\n vm.previewData = data;\n vm.previewLoaded = true;\n vm.previewLoading = false;\n };\n\n function excelToJson(workbook) {\n var result = {\n columns: [],\n data: [],\n hasHeaders: vm.hasHeader\n };\n\n var first_sheet_name = workbook.SheetNames[0];\n var rows = vm.hasHeader ? 11 : 10;\n var worksheet = workbook.Sheets[first_sheet_name];\n var data = XLS.utils.sheet_to_row_object_array(worksheet, {\n header: 'A',\n range: {\n s: {\n r: 0,\n c: 0\n },\n e: {\n r: rows,\n c: 99\n }\n }\n });\n if (data && data.length > 0) {\n var obj = data[0];\n var columns = [];\n for (var prop in obj)\n if (obj.hasOwnProperty(prop)) {\n var column = {\n name: prop\n }\n columns.push(column);\n }\n result.columns = columns;\n if (vm.hasHeader)\n data = data.slice(1);\n result.data = data;\n }\n return result;\n }\n\n function csvPreview(result) {\n var data = csvToJson(result);\n vm.previewData = data;\n vm.previewLoaded = true;\n vm.previewLoading = false;\n }\n\n function csvToJson(csv) {\n var result = {\n columns: [],\n data: [],\n hasHeaders: vm.hasHeader\n };\n\n var cfg = {\n header: vm.hasHeader,\n preview: 10,\n };\n\n var parsed = Papa.parse(csv, cfg);\n if (parsed.data && parsed.data.length > 0) {\n var delimiter = parsed.meta.delimiter;\n var data = parsed.data;\n var obj = data[0];\n var columns = [];\n for (var prop in obj)\n if (obj.hasOwnProperty(prop)) {\n var column = {\n name: prop\n }\n columns.push(column);\n }\n result.columns = columns;\n result.delimiter = delimiter;\n result.data = data;\n }\n return result;\n }\n\n function getFileExtension(file) {\n return (/[.]/.exec(file.name)) ? /[^.]+$/.exec(file.name) : undefined;\n };\n\n function validateOptions(options) {\n return options.contents.length > 0;\n }\n\n function fileTest(file) {\n var options = {\n contents: [],\n hasHeaders: vm.hasHeader,\n delimiter: vm.previewData.delimiter\n };\n\n for (var i in vm.previewData.columns) {\n var column = vm.previewData.columns[i];\n if (column.type === '2') {\n options.contents.push(i);\n }\n }\n\n if (!validateOptions(options)) {\n var message = \"The file must have one column with the text\";\n var parent = $document[0].querySelector('#toastBounds');\n var toast = $mdToast.simple()\n .content(message)\n .action('OK')\n .highlightAction(true)\n .hideDelay(0)\n .position('fit')\n .theme(\"error-toast\")\n .parent(parent);\n\n $mdToast.show(toast);\n angular.forEach(vm.uploadSampleFileForm.$error.required, function(field) {\n field.$setDirty();\n });\n return;\n }\n\n vm.uploadSampleFileForm.$setPristine();\n vm.uploadSampleFileForm.$setUntouched();\n vm.processing = true;\n Upload.upload({\n url: api.sentiment.url + '/' + vm.moduleId + '/multi',\n data: {\n file: file,\n options: JSON.stringify(options, function (key, value) {\n if (key === \"$$hashKey\") {\n return undefined;\n }\n return value;\n })\n }\n }).then(function(resp) {\n $log.log('Success ' + resp.config.data.file.name + 'uploaded. Response: ' + resp.data);\n vm.processing = false;\n vm.uploadCurrentTab = 2\n vm.file = null;\n //vm.previewData = {};\n var data = resp.data;\n vm.multipleData.chart = [{\n key: \"\",\n values: []\n }];\n vm.multipleData.pie = [];\n\n angular.forEach(data.cumulative, function(item, key) {\n vm.multipleData.chart[0].values.push({\n label: $translate.instant(item.label),\n value: item.sum\n });\n\n vm.multipleData.pie.push({\n label: $translate.instant(item.label),\n value: item.value\n });\n\n switch (item.id) {\n case 1:\n vm.multipleData.positive = item;\n break;\n case 2:\n vm.multipleData.negative = item;\n break;\n case 3:\n vm.multipleData.natural = item;\n break;\n default:\n\n }\n });\n\n vm.multipleData.detail = [];\n angular.forEach(data.items, function(item, key) {\n vm.multipleData.detail.push({\n cls: item.cls,\n label: $translate.instant(item.label),\n content: item.content,\n result: item.result\n })\n });\n\n vm.discreteBarChart.change();\n vm.sentimentMultiChart.change();\n vm.pagination.last = calculatePageCounts(vm.multipleData.detail.length);\n $utils.resize(500);\n }, function(resp) {\n $log.error('Error status: ' + resp.status);\n vm.processing = false;\n }, function(evt) {\n var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);\n $log.log('progress: ' + progressPercentage + '% ' + evt.config.data.file.name);\n });\n }\n\n vm.showItemDetailDialog = function($event, item) {\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'ItemDetailDialogController as vm',\n templateUrl: 'app/main/apps/modules/views/test/sentiment-item-detail-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n data: item\n }\n })\n .then(function(answer) {}, function() {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function() {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function(wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n };\n\n //Delete Module\n vm.deleteModule = function($event) {\n ModuleService.deleteModule($scope, $state, $event, vm.module);\n }\n\n vm.init = function() {\n vm.statisticsChart.init();\n $utils.resize(500);\n };\n vm.init();\n\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.modules')\n .controller('NamedEntityTestController', NamedEntityTestController);\n\n /** @ngInject */\n function NamedEntityTestController($rootScope, $scope, $state, $stateParams,\n $log, $mdDialog, $translate, api, ModuleService, $$module) {\n var vm = this;\n vm.module = $$module;\n vm.text = '';\n vm.result = {};\n vm.isOpen = false;\n vm.selectedMode = 'md-scale';\n vm.moduleId = $stateParams.id;\n\n vm.configuration = {\n \"editable\": false,\n \"viewButtonClass\": \"btn-info\",\n \"editButtonClass\": \"btn-success\"\n };\n vm.options = {\n \"mode\": \"code\",\n \"modes\": [\n \"tree\",\n \"form\",\n \"code\",\n \"text\"\n ],\n \"history\": false\n };\n\n //Methods\n vm.find = find;\n\n //Train\n function find() {\n var data = {\n moduleId: $stateParams.id,\n text: vm.text\n };\n\n api.namedentity.find(data)\n .then(function(response) {\n vm.result = response;\n },\n function(response) {\n $log.error(response);\n });\n };\n\n //Delete Module\n vm.deleteModule = function($event) {\n ModuleService.deleteModule($scope, $state, $event, vm.module);\n }\n\n vm.init = function() {\n\n };\n vm.init();\n\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.modules')\n .controller('ClassificationTestController', ClassificationTestController);\n\n /** @ngInject */\n function ClassificationTestController($rootScope, $scope, $state, $stateParams,\n $log, $interval, $translate, api, $$module) {\n var vm = this;\n vm.text = '';\n vm.result = {};\n vm.loading = false;\n\n //$rootScope.$on('$translateChangeSuccess', function(event, current, previous) {\n // vm.statisticsChart2.result.options.chart.noData = $translate.instant('CLASSIFICATION.ERRORS.NO_DATA_AVAILABLE');\n // vm.statisticsChart.result.options.chart.noData = $translate.instant('CLASSIFICATION.ERRORS.NO_DATA_AVAILABLE');\n //});\n findModuleFields();\n vm.configuration = {\n \"editable\": false,\n \"viewButtonClass\": \"btn-info\",\n \"editButtonClass\": \"btn-success\"\n };\n vm.options = {\n \"mode\": \"code\",\n \"modes\": [\n \"tree\",\n \"form\",\n \"code\",\n \"text\"\n ],\n \"history\": false\n };\n\n vm.moduleTestCompareMode = false;\n vm.moduleTrains = [];\n vm.moduleTestResult = [];\n\n function findModuleTrains() {\n api.module.moduletrain($stateParams.id)\n .then(function (response) {\n response.forEach(function (x) { vm.moduleTrains.push({ name: x[\"id\"] + \" - \" + x[\"createDate\"], value: x[\"id\"] }) });\n },\n function (response) {\n $log.error(response);\n });\n }\n findModuleTrains();\n //Methods\n vm.classify = classify;\n\n function findModuleFields(){\n var moduleFields = $$module.moduleFields;\n vm.nominals = moduleFields.filter(function (field)\n {\n return field.fieldType === 300;\n });\n vm.reals = moduleFields.filter(function (field)\n {\n return field.fieldType === 301;\n });\n }\n //Train\n function classify() {\n vm.loading = true;\n var nominalValueMap = {};\n vm.nominals.forEach(function(x){ if(x['value'] != null){ nominalValueMap[x['fieldTitle']]=x['value'];}});\n var realValueMap = {};\n vm.reals.forEach(function(x){ if(x['value'] != null){ realValueMap[x['fieldTitle']]=x['value'];}});\n\n if (!vm.moduleTestCompareMode) {\n var data = {\n moduleId: $stateParams.id,\n text: vm.text,\n nominals: nominalValueMap,\n reals: realValueMap\n };\n\n api.classification.classify(data)\n .then(function (response) {\n vm.loading = false;\n vm.result = response;\n\n vm.moduleTestResult = [];\n console.log({name:\"Latest:\", data:response});\n vm.moduleTestResult.push({name:\"Current\", data:response})\n console.log(vm.moduleTestResult);\n //vm.multi = false;\n //if (vm.result && vm.result.data) {\n // var data = vm.result.data;\n // console.log(data);\n // for (var i in data) {\n // var item = data[i];\n // for (var j in item.categories) {\n // if (item.categories[j].subCategories && item.categories[j].subCategories.length > 0) {\n // vm.multi = true;\n // break;\n // }\n // }\n // }\n //}\n //console.log(vm.multi);\n //if (vm.multi)\n // vm.statisticsChart2.change();\n //else\n // vm.statisticsChart.change();\n },\n function (response) {\n vm.loading = false;\n $log.error(response);\n });\n }\n else{\n if(vm.moduleSelectedTrainValue == undefined){\n console.log(\"selectedValueEror\");\n return;\n }\n var data = {\n moduleId: $stateParams.id,\n text: vm.text,\n nominals: nominalValueMap,\n reals: realValueMap,\n trainIds: [parseInt(vm.moduleSelectedTrainValue)]\n };\n\n api.classification.classifyCompare(data)\n .then(function (response) {\n vm.loading = false;\n vm.result = response[0];\n\n vm.moduleTestResult = [];\n // response.forEach(function(x){ if(x != null){ vm.moduleTestResult.push(x)}});\n vm.moduleTestResult.push({name:\"Latest\",data:response[0]});\n vm.moduleTestResult.push({name:vm.moduleSelectedTrainValue,data:response[1]});\n\n },\n function (response) {\n vm.loading = false;\n $log.error(response);\n });\n }\n };\n\n //var colors = [\n // \"#1f77b4\",\n // \"#aec7e8\",\n // \"#ff7f0e\",\n // \"#ffbb78\",\n // \"#2ca02c\",\n // \"#98df8a\",\n // \"#d62728\",\n // \"#ff9896\",\n // \"#9467bd\",\n // \"#c5b0d5\",\n // \"#8c564b\",\n // \"#c49c94\",\n // \"#e377c2\",\n // \"#f7b6d2\",\n // \"#7f7f7f\",\n // \"#c7c7c7\",\n // \"#bcbd22\",\n // \"#dbdb8d\",\n // \"#17becf\",\n // \"#9edae5\"\n //]\n\n //vm.statisticsChart = {\n // config: {\n // refreshDataOnly: true,\n // deepWatchData: true\n // },\n // result: {\n // options: {\n // chart: {\n // type: 'pieChart',\n // height: 400,\n // margin: {\n // top: 0,\n // right: 0,\n // bottom: 0,\n // left: 0\n // },\n // donut: true,\n // clipEdge: true,\n // cornerRadius: 0,\n // labelType: 'value',\n // showLegend: false,\n // padAngle: 0.02,\n // x: function(d) {\n // return d.label;\n // },\n // y: function(d) {\n // return d.value;\n // },\n // tooltip: {\n // gravity: 's',\n // classes: 'gravity-s'\n // },\n // noData: $translate.instant('CLASSIFICATION.ERRORS.NO_DATA_AVAILABLE')\n // }\n // },\n // data: []\n // },\n // change: function(range) {\n // vm.statisticsChart.result.data = [];\n\n // if (vm.result && vm.result.data) {\n // var data = vm.result.data;\n // for (var i in data) {\n // angular.forEach(data[i].categories, function (item, index) {\n // vm.statisticsChart.result.data[vm.statisticsChart.result.data.length] = {\n // label: item.categoryName,\n // value: item.probability\n // };\n // });\n // }\n\n // if (vm.statisticsChart.result.data.length === 1) {\n // vm.statisticsChart.result.data[1] = {\n // label: '',\n // value: 1 - vm.statisticsChart.result.data[0].value\n // };\n // }\n // }\n // },\n // init: function() {\n // // Run this function once to initialize widget\n\n // /**\n // * Update the range for the first time\n // */\n // vm.statisticsChart.change();\n // }\n //};\n\n //vm.statisticsChart2 = {\n // config: {\n // refreshDataOnly: true,\n // deepWatchData: true\n // },\n // result: {\n // options: {\n // chart: {\n // type: 'sunburstChart',\n // color: d3.scale.category20c(),\n // height: 400,\n // margin: {\n // top: 0,\n // right: 0,\n // bottom: 0,\n // left: 0\n // },\n // mode: 'size',\n // clipEdge: true,\n // cornerRadius: 0,\n // showLegend: false,\n // padAngle: 0.02,\n // tooltip: {\n // gravity: 's',\n // classes: 'gravity-s'\n // },\n // noData: $translate.instant('CLASSIFICATION.ERRORS.NO_DATA_AVAILABLE')\n // }\n // },\n // data: []\n // },\n // change: function(range) {\n // vm.statisticsChart2.result.data = vm.result.graph;\n // },\n // init: function() {\n // // Run this function once to initialize widget\n\n // /**\n // * Update the range for the first time\n // */\n // vm.statisticsChart2.change();\n // }\n //};\n\n //vm.init = function() {\n // vm.statisticsChart2.init();\n // vm.statisticsChart.init();\n //};\n //vm.init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.modules')\n .controller('ClassificationRulesController', ClassificationRulesController);\n\n /** @ngInject */\n function ClassificationRulesController($rootScope, $scope, $state, $stateParams, $log, $interval, $translate, api, $$module, $element, DTOptionsBuilder, DTColumnDefBuilder, $mdToast) {\n var vm = this;\n\n vm.isDisabled = false;\n\n // list of states to be displayed\n vm.categories = [];\n vm.querySearch = querySearch;\n\n function querySearch(query) {\n var results = query ? vm.categories.filter(createFilterFor(query)) :\n vm.categories;\n return results;\n }\n\n\n function createFilterFor(query) {\n var lowercase = angular.lowercase(query);\n return function filterFn(category) {\n var lowercaseName = angular.lowercase(vm.getCategoryTitle(category));\n return (lowercaseName.indexOf(lowercase) == 0);\n };\n }\n\n vm.moduleId = $stateParams.id;\n vm.selectedCategory = null;\n vm.positiveTerm = \"\";\n vm.negativeTerm = \"\";\n vm.relevantTerm = \"\";\n vm.irrelevantTerm = \"\";\n vm.allTerms = {};\n vm.drink = {};\n vm.querySearch = querySearch;\n vm.msScrollOptions = {\n suppressScrollX: true\n };\n\n\n vm.clearSearchTerm = function () {\n vm.searchTerm = '';\n };\n\n // The md-select directive eats keydown events for some quick select\n // logic. Since we have a search input here, we don't need that logic.\n $element.find('input').on('keydown', function (ev) {\n ev.stopPropagation();\n });\n\n vm.dtOptions = DTOptionsBuilder.newOptions().withPaginationType('full_numbers').withDOM('frtip').withDisplayLength(10);\n vm.dtColumnDefs = [\n DTColumnDefBuilder.newColumnDef(0),\n DTColumnDefBuilder.newColumnDef(1)\n ];\n\n vm.changeCategory = function (item) {\n api.classification.getClassificationRules(vm.moduleId, item.id)\n .then(function (resp) {\n vm.allTerms = resp;\n }, function (resp) {\n $log.error(resp);\n })\n }\n\n vm.deleteTerm = function (model) {\n var request = {\n id: model.id,\n moduleId: vm.moduleId,\n rule: model.rule,\n categoryId: vm.selectedCategory.id\n };\n api.classification.deleteClassificationRule(request)\n .then(function (resp) {\n if (resp.isActive == 0) {\n model.isActive = 0;\n }\n }, function (resp) {\n $log.error(resp);\n })\n }\n\n vm.addPositiveTerm = function () {\n var request = {\n moduleId: vm.moduleId,\n rule: vm.positiveTerm,\n categoryId: vm.selectedCategory.id,\n operation: \"POSITIVE\"\n };\n api.classification.addClassificationRule(request)\n .then(function (resp) {\n vm.allTerms.positiveTerms.push(resp);\n }, function (resp) {\n $log.error(resp);\n })\n }\n\n vm.addNegativeTerm = function () {\n var request = {\n moduleId: vm.moduleId,\n rule: vm.negativeTerm,\n categoryId: vm.selectedCategory.id,\n operation: \"NEGATIVE\"\n };\n api.classification.addClassificationRule(request)\n .then(function (resp) {\n vm.allTerms.negativeTerms.push(resp);\n }, function (resp) {\n $log.error(resp);\n })\n }\n\n vm.addRelevantTerm = function () {\n var request = {\n moduleId: vm.moduleId,\n rule: vm.relevantTerm,\n categoryId: vm.selectedCategory.id,\n operation: \"RELEVANT\"\n };\n api.classification.addClassificationRule(request)\n .then(function (resp) {\n vm.allTerms.relevantTerms.push(resp);\n }, function (resp) {\n $log.error(resp);\n })\n }\n vm.addIrrelevantTerm = function () {\n var request = {\n moduleId: vm.moduleId,\n rule: vm.irrelevantTerm,\n categoryId: vm.selectedCategory.id,\n operation: \"IRRELEVANT\"\n };\n api.classification.addClassificationRule(request)\n .then(function (resp) {\n vm.allTerms.irrelevantTerms.push(resp);\n }, function (resp) {\n $log.error(resp);\n })\n }\n\n vm.getCategoryTitle = function(cat) {\n var title = cat.name;\n if (cat.localVariables) {\n var localVariable = cat.localVariables.filter(function (k) { return $translate.use() == k.language; })[0];\n if (localVariable) title = localVariable.value;\n }\n return title;\n }\n\n vm.init = function () {\n\n api.module.categories(vm.moduleId)\n .then(function (resp) {\n vm.categories = resp;\n if (vm.categories.length > 0) {\n vm.selectedCategory = vm.categories[0];\n api.classification.getClassificationRules(vm.moduleId, vm.selectedCategory.id)\n .then(function (resp) {\n vm.allTerms = resp;\n }, function (resp) {\n $log.error(resp);\n })\n }\n }, function (resp) {\n $log.error(resp);\n })\n };\n vm.init();\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.modules')\n .controller('TopicModelingOverviewController', TopicModelingOverviewController);\n\n /** @ngInject */\n function TopicModelingOverviewController($rootScope, $scope, $state, $stateParams, $log,\n $translate, api, ModuleService, $$module,user,$utils) {\n var vm = this;\n vm.module = $$module;\n user.moduleWorkspace = vm.module.workspaceId;\n vm.moduleId = $stateParams.id;\n vm.hasData = true;\n\n vm.isOpen = false;\n vm.selectedMode = 'md-scale';\n\n\n //Data\n vm.topics = [];\n vm.counts = 0;\n vm.multiBarHorizontalChart = {};\n\n //Methods\n ModuleService\n .hasData(vm.moduleId)\n .then(function(response) {\n vm.hasData = response;\n });\n //Counts\n function getCounts() {\n api.topicmodeling.count(vm.moduleId)\n .then(function(response) {\n vm.counts = response;\n },\n function(response) {\n $log.error(response);\n });\n };\n\n\n //Topics\n function getTopics() {\n api.topicmodeling.get(vm.moduleId)\n .then(function(response) {\n vm.topics = response;\n vm.multiBarHorizontalChart.change();\n },\n function(response) {\n $log.error(response);\n });\n };\n\n\n vm.multiBarHorizontalChart = {\n options: {\n chart: {\n type: 'multiBarHorizontalChart',\n height: 450,\n color: ['#039BE5'],\n x: function(d) {\n return d.label;\n },\n y: function(d) {\n return d.value;\n },\n showControls: false,\n showValues: true,\n showLegend: false,\n transitionDuration: 500,\n margin: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 200\n },\n xAxis: {\n showMaxMin: false\n },\n yAxis: {\n axisLabel: 'Values',\n tickFormat: function(d) {\n return d3.format(',.2f')(d);\n }\n },multibar: {\n dispatch: {\n elementClick: function (e) {\n ModuleService.saveClusteringContextMenu($scope, $state, vm.module, e);\n }\n }\n }\n }\n },\n data: [],\n change: function() {\n\n vm.multiBarHorizontalChart.data[0] = {\n key: 'Score',\n values: []\n };\n var values = [];\n angular.forEach(vm.topics, function(data, index) {\n values.push({\n label: data.phrase,\n value: data.score\n });\n });\n vm.multiBarHorizontalChart.data[0].values = values;\n\n },\n init: function() {\n vm.multiBarHorizontalChart.change();\n }\n };\n\n\n //AutoComplete\n // list of `state` value/display objects\n vm.selectedItem = null;\n vm.searchText = null;\n\n //Delete Module\n vm.deleteModule = function($event) {\n ModuleService.deleteModule($scope, $state, $event, vm.module);\n }\n\n vm.init = function() {\n getTopics();\n getCounts();\n vm.multiBarHorizontalChart.init();\n $utils.saveAudit(vm.moduleId, \"MODULE\", \"OPEN\", vm.module.name);\n };\n vm.init();\n\n $rootScope.$on('$trainCompleted',\n function(event) {\n vm.init();\n });\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.modules')\n .controller('RootCauseOverviewController', RootCauseOverviewController);\n\n /** @ngInject */\n function RootCauseOverviewController($rootScope, $scope, $state, $stateParams,\n $log, $mdDialog, $translate, api, ModuleService, $$module,user,$utils) {\n var vm = this;\n vm.module = $$module;\n user.moduleWorkspace = vm.module.workspaceId;\n vm.moduleId = $stateParams.id;\n vm.hasData = true;\n vm.categoryId = 0;\n vm.showMultiBarChart = false;\n vm.isOpen = false;\n vm.selectedMode = 'md-scale';\n\n //Data\n vm.samples = [];\n vm.categories = [];\n vm.classifier = {};\n vm.multiBarHorizontalChart = {};\n vm.fishboneData = null;\n\n vm.counts = 0;\n\n //Methods\n vm.toggleSelectCategory = toggleSelectCategory;\n\n ModuleService\n .hasData(vm.moduleId)\n .then(function(response) {\n vm.hasData = response;\n });\n\n //Counts\n function getCounts() {\n api.rootcause.count(vm.moduleId)\n .then(function (response) {\n vm.counts = response;\n },\n function (response) {\n $log.error(response);\n });\n };\n\n //Classifier\n function getClassifier() {\n api.rootcause.classifier(vm.moduleId)\n .then(function (response) {\n vm.classifier = response;\n vm.categories = response.categories;\n },\n function (response) {\n $log.error(response);\n });\n };\n\n //Dashboard\n function getDashboard() {\n api.module.dashboard(vm.moduleId)\n .then(function (response) {\n\n },\n function (response) {\n $log.error(response);\n });\n };\n\n function toggleSelectCategory(item) {\n vm.categoryId = item ? item.id : 0;\n vm.showMultiBarChart = (vm.categoryId > 0);\n if (vm.categoryId > 0) {\n api.rootcause.results(vm.moduleId, vm.categoryId)\n .then(function (response) {\n vm.results = response;\n vm.multiBarHorizontalChart.change();\n },\n function (response) {\n $log.error(response);\n });\n } else {\n api.rootcause.analysis(vm.moduleId)\n .then(function (response) {\n vm.analysis = response;\n },\n function (response) {\n $log.error(response);\n });\n }\n\n };\n\n vm.filters = {\n search: '',\n categories: []\n };\n\n vm.filtersDefaults = angular.copy(vm.filters);\n vm.showAll = true;\n\n vm.order = '';\n vm.orderDescending = false;\n\n vm.colors = ['blue-bg', 'blue-grey-bg', 'orange-bg', 'pink-bg', 'purple-bg'];\n $scope.colors = [\"#800026\", \"#bd0026\", \"#e31a1c\", \"#fc4e2a\", \"#fd8d3c\", \"#feb24c\", \"#fed976\"];\n\n // Statistics Charts\n vm.multiBarHorizontalChart = {\n options: {\n chart: {\n type: 'multiBarHorizontalChart',\n height: 450,\n color: ['#039BE5'],\n x: function (d) {\n return d.label;\n },\n y: function (d) {\n return d.value;\n },\n showControls: false,\n showValues: true,\n showLegend: false,\n transitionDuration: 500,\n margin: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 200\n },\n xAxis: {\n showMaxMin: false\n },\n yAxis: {\n axisLabel: 'Values',\n tickFormat: function (d) {\n return d3.format(',.2f')(d);\n }\n }\n }\n },\n data: [],\n change: function () {\n\n vm.multiBarHorizontalChart.data[0] = {\n key: 'Score',\n values: []\n };\n var values = [];\n angular.forEach(vm.results, function (data, index) {\n values.push({ label: data.phrase, value: data.score });\n });\n vm.multiBarHorizontalChart.data[0].values = values;\n\n //\n\n /*\n vm.multiBarHorizontalChart.data = [];\n angular.forEach(vm.topics, function (data, index) {\n var item = {\n key: data.phrase,\n values: [{ label: data.phrase, value: data.score }]\n }\n vm.multiBarHorizontalChart.data.push(item);\n });\n */\n },\n init: function () {\n vm.multiBarHorizontalChart.change();\n }\n };\n\n\n //AutoComplete\n // list of `state` value/display objects\n vm.selectedItem = null;\n vm.searchText = null;\n vm.querySearch = querySearch;\n // ******************************\n // Internal methods\n // ******************************\n /**\n * Search for states... use $timeout to simulate\n * remote dataservice call.\n */\n function querySearch(query) {\n var results = query ? vm.categories.filter(createFilterFor(query)) : [];\n return results;\n }\n\n /**\n * Create filter function for a query string\n */\n function createFilterFor(query) {\n var lowercaseQuery = angular.lowercase(query);\n return function filterFn(item) {\n var lowercaseName = angular.lowercase(item.name);\n return (lowercaseName.indexOf(lowercaseQuery) == 0);\n };\n }\n\n //Delete Module\n vm.deleteModule = function($event) {\n ModuleService.deleteModule($scope, $state, $event, vm.module);\n }\n\n vm.init = function () {\n getCounts();\n getClassifier();\n toggleSelectCategory();\n $utils.saveAudit(vm.moduleId, \"MODULE\", \"OPEN\", vm.module.name);\n };\n vm.init();\n\n $rootScope.$on('$trainCompleted',\n function (event) {\n vm.init();\n });\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.modules')\n .controller('ClusteringOverviewController', ClusteringOverviewController);\n\n /** @ngInject */\n function ClusteringOverviewController($rootScope, $scope, $state, $stateParams,\n $log, $translate, $mdMedia, api, ModuleService, $$module, $mdDialog,user, $utils) {\n var vm = this;\n vm.module = $$module;\n user.moduleWorkspace = vm.module.workspaceId;\n vm.moduleId = $stateParams.id;\n vm.hasData = true;\n vm.selectedLabel = {};\n\n vm.isOpen = false;\n vm.selectedMode = 'md-scale';\n\n //Data\n vm.clusters = [];\n vm.counts = 0;\n vm.multiBarHorizontalChart = {};\n\n ModuleService\n .hasData(vm.moduleId)\n .then(function(response) {\n vm.hasData = response;\n });\n\n //Counts\n function getCounts() {\n api.clustering.count(vm.moduleId)\n .then(function(response) {\n vm.counts = response;\n },\n function(response) {\n $log.error(response);\n });\n };\n\n\n //Topics\n function getClusters() {\n api.clustering.get(vm.moduleId)\n .then(function(response) {\n vm.clusters = response;\n vm.multiBarHorizontalChart.change();\n },\n function(response) {\n $log.error(response);\n });\n };\n\n vm.multiBarHorizontalChart = {\n options: {\n chart: {\n type: 'multiBarHorizontalChart',\n height: 450,\n color: ['#4CAF50'],\n x: function(d) {\n return d.label;\n },\n y: function(d) {\n return d.value;\n },\n showControls: false,\n showValues: true,\n showLegend: false,\n transitionDuration: 500,\n margin: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 200\n },\n xAxis: {\n showMaxMin: false\n },\n yAxis: {\n axisLabel: 'Values',\n tickFormat: function(d) {\n return d3.format(',.0f')(d);\n }\n }, multibar: {\n dispatch: {\n elementClick: function (e) {\n ModuleService.saveClusteringContextMenu($scope, $state,vm.module , e);\n }\n }\n },\n callback: function (e) { console.log('! callback !') }\n ,\n valueFormat: d3.format(\".0f\")\n }\n },\n data: [],\n change: function() {\n\n vm.multiBarHorizontalChart.data[0] = {\n key: 'Score',\n values: []\n };\n var values = [];\n angular.forEach(vm.clusters, function(data, index) {\n values.push({\n label: data.phrase,\n value: data.documentCount\n });\n });\n vm.multiBarHorizontalChart.data[0].values = values;\n\n //\n\n /*\n vm.multiBarHorizontalChart.data = [];\n angular.forEach(vm.topics, function (data, index) {\n var item = {\n key: data.phrase,\n values: [{ label: data.phrase, value: data.score }]\n }\n vm.multiBarHorizontalChart.data.push(item);\n });\n */\n },\n init: function() {\n vm.multiBarHorizontalChart.change();\n }\n };\n\n\n //AutoComplete\n // list of `state` value/display objects\n vm.selectedItem = null;\n vm.searchText = null;\n\n //Delete Module\n vm.deleteModule = function($event) {\n ModuleService.deleteModule($scope, $state, $event, vm.module);\n }\n\n function DialogController($scope, $mdDialog) {\n $scope.hide = function () {\n $mdDialog.hide();\n };\n $scope.cancel = function () {\n $mdDialog.cancel();\n };\n $scope.answer = function (answer) {\n $mdDialog.hide(answer);\n };\n }\n\n vm.init = function() {\n getClusters();\n getCounts();\n vm.multiBarHorizontalChart.init();\n $utils.saveAudit(vm.moduleId, \"MODULE\", \"OPEN\", vm.module.name);\n };\n vm.init();\n\n $rootScope.$on('$trainCompleted',\n function(event) {\n vm.init();\n });\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.modules')\n .controller('ClassificationOverviewController', ClassificationOverviewController);\n\n /** @ngInject */\n function ClassificationOverviewController($rootScope, $scope, $state, $stateParams, $log, $timeout, $translate, api, ModuleService, $utils, $$module, msNavigationSidebarService, user, $mdMedia, $q) {\n var vm = this;\n vm.module = $$module;\n $rootScope.$mdMedia = $mdMedia;\n user.moduleWorkspace = vm.module.workspaceId;\n vm.moduleId = $stateParams.id;\n vm.hasData = true;\n vm.categoryId = 0;\n vm.categorySearch = '';\n vm.breadCrumbs = [];\n vm.categoryRateTableData = [];\n vm.lastCategoryRateSort = null;\n\n vm.isOpen = false;\n vm.selectedMode = 'md-scale';\n\n $rootScope.$on('$translateChangeSuccess', function(event, current, previous) {\n vm.statisticsChart.accuracy.options.chart.noData = $translate.instant('CLASSIFICATION.ERRORS.NO_DATA_AVAILABLE');\n vm.statisticsChart.precision.options.chart.noData = $translate.instant('CLASSIFICATION.ERRORS.NO_DATA_AVAILABLE');\n vm.statisticsChart.recall.options.chart.noData = $translate.instant('CLASSIFICATION.ERRORS.NO_DATA_AVAILABLE');\n });\n\n //Data\n vm.statistics = {\n accuracy: [],\n precision: [],\n recall: []\n };\n vm.counts = {\n all: 0,\n category: 0\n };\n\n vm.keywords = [];\n vm.confusions = [];\n\n vm.dashboard = {\n counts: [],\n statistics: [],\n keywords: []\n };\n\n //Methods\n vm.toggleSelectCategory = toggleSelectCategory;\n vm.downloadModuleClassification = downloadModuleClassification;\n vm.clickCategoryCategory = clickCategoryCategory;\n\n ModuleService\n .hasData(vm.moduleId)\n .then(function (response) {\n vm.hasData = response;\n });\n\n function getCounts() {\n api.samples.counts(vm.moduleId)\n .then(function (response) {\n vm.dashboard.counts = response;\n setCounts();\n },\n function (response) {\n $log.error(response);\n });\n };\n\n function setCounts() {\n vm.counts.category = 0;\n vm.dashboard.counts.forEach(function (item) {\n if (item.id == 0) {\n vm.counts.all = item.count;\n }\n\n if (vm.categoryId > 0) {\n if (item.id == vm.categoryId) {\n vm.counts.category = item.count;\n }\n }\n });\n }; \n\n function getStatistics() {\n api.classification.statistics(vm.moduleId)\n .then(function (response) {\n vm.dashboard.statistics = response;\n setStatistics();\n setCategoryRateTableData();\n },\n function (response) {\n $log.error(response);\n });\n };\n\n vm.isNavigationActiveControl = false;\n vm.isNavigationActive = function () {\n if ($mdMedia('gt-md')) {\n if (!vm.isNavigationActiveControl) {\n $utils.resize(500);\n }\n vm.isNavigationActiveControl = true;\n return true;\n } else {\n if (vm.isNavigationActiveControl) {\n $utils.resize(500);\n }\n vm.isNavigationActiveControl = false;\n return false;\n }\n }\n\n function setStatistics() {\n vm.statistics = {\n accuracy: [],\n precision: [],\n recall: []\n };\n vm.dashboard.statistics.forEach(function (item) {\n if (item.id == vm.categoryId) {\n\n if (!item) return;\n\n var a1 = item.accuracy;\n var a2 = 1 - a1;\n vm.statistics.accuracy.push({\n label: '',\n value: a1\n });\n vm.statistics.accuracy.push({\n label: '',\n value: a2\n });\n\n var p1 = item.precision;\n var p2 = 1 - p1;\n vm.statistics.precision.push({\n label: '',\n value: p1\n });\n vm.statistics.precision.push({\n label: '',\n value: p2\n });\n\n var r1 = item.recall;\n var r2 = 1 - r1;\n vm.statistics.recall.push({\n label: '',\n value: r1\n });\n vm.statistics.recall.push({\n label: '',\n value: r2\n });\n }\n });\n vm.statisticsChart.change();\n };\n\n vm.findConfusionTooltip = function (row, item) {\n return row.name + \" - \" + vm.confusions[row.items.indexOf(item)].name;\n }\n\n function setAverageStatistics() {\n var childrenCategoryStatistics = vm.dashboard.statistics.filter(function (c) {\n return c.parent === vm.categoryId\n });\n vm.statistics = {\n accuracy: [],\n precision: [],\n recall: []\n };\n if (childrenCategoryStatistics && childrenCategoryStatistics.length > 0) {\n var totalAccuracy = 0.0;\n var totalPrecision = 0.0;\n var totalRecall = 0.0;\n var count = 0;\n childrenCategoryStatistics.forEach(function (childCategory) {\n var countOfCategory = vm.dashboard.counts.find(function (c) {\n return c.id == childCategory.id\n });\n if (countOfCategory) {\n count = count + countOfCategory.count;\n }\n totalAccuracy = totalAccuracy + (childCategory.accuracy * countOfCategory.count);\n totalPrecision = totalPrecision + (childCategory.precision * countOfCategory.count);\n totalRecall = totalRecall + (childCategory.recall * countOfCategory.count);\n })\n var a1 = totalAccuracy / count;\n var a2 = 1 - a1;\n vm.statistics.accuracy.push({\n label: '',\n value: a1\n });\n vm.statistics.accuracy.push({\n label: '',\n value: a2\n });\n\n var p1 = totalPrecision / count;\n var p2 = 1 - p1;\n vm.statistics.precision.push({\n label: '',\n value: p1\n });\n vm.statistics.precision.push({\n label: '',\n value: p2\n });\n\n var r1 = totalRecall / count;\n var r2 = 1 - r1;\n vm.statistics.recall.push({\n label: '',\n value: r1\n });\n vm.statistics.recall.push({\n label: '',\n value: r2\n });\n }\n\n vm.statisticsChart.change();\n }\n\n function getKeywords(categoryId) {\n api.classification.keywords(vm.moduleId, categoryId)\n .then(function (response) {\n vm.dashboard.keywords = response;\n setKeywords();\n },\n function (response) {\n $log.error(response);\n });\n }\n\n function setKeywords() {\n vm.keywords = [];\n vm.dashboard.keywords.forEach(function (item) {\n var kw = {\n text: item.text,\n weight: item.weight\n };\n vm.keywords.push(kw);\n });\n }\n\n function toggleSelectCategory(item) {\n vm.categoryId = item.id;\n setCounts();\n setStatistics();\n setCategoryRateTableData();\n getKeywords(vm.categoryId);\n getConfusions(vm.categoryId);\n vm.breadCrumbs = [];\n searchCategories({\n id: null,\n search: null\n })\n };\n\n vm.clickedCats = {};\n\n function clickCategoryCategory(stateParams) {\n var id = stateParams.id\n var deferred = $q.defer();\n vm.breadCrumbs = [];\n vm.categoryId = id;\n setCounts();\n setStatistics();\n setCategoryRateTableData();\n getKeywords(vm.categoryId);\n getConfusions(vm.categoryId);\n recursiveSetBreadCrumbs(vm.module.categories, id, -1)\n if (!vm.clickedCats[id]) {\n stateParams.flag = true;\n deferred.resolve(moreAndMore(stateParams));\n } else {\n deferred.resolve([]);\n }\n vm.clickedCats[id] = true;\n return deferred.promise;\n };\n\n function clickCategoryAverageCategory(stateParams) {\n var id = stateParams.id;\n var deferred = $q.defer();\n vm.breadCrumbs = [];\n vm.categoryId = id;\n setCounts();\n setAverageStatistics();\n setCategoryRateTableData();\n getKeywords(vm.categoryId);\n getConfusions(vm.categoryId);\n recursiveSetBreadCrumbs(vm.module.categories, id, -1)\n if (!vm.clickedCats[id]) {\n stateParams.flag = true;\n deferred.resolve(moreAndMore(stateParams));\n } else {\n deferred.resolve([]);\n }\n vm.clickedCats[id] = true;\n return deferred.promise;\n };\n\n function getConfusions(categoryId) {\n api.classification.confusions(vm.moduleId, categoryId)\n .then(function (response) {\n vm.confusions = response;\n },\n function (response) {\n $log.error(response);\n });\n };\n\n function setCategoryRateTableData() {\n vm.categoryRateTableData = [];\n var flag = false;\n vm.categoryRateTableData = vm.dashboard.statistics.filter(function (c) {\n return c.id === vm.categoryId\n })\n if (vm.categoryRateTableData.length > 0) flag = true;\n vm.dashboard.statistics.filter(function (c) {\n if (vm.categoryId == 0 || vm.categoryId == null) return c.parent === null && c.id != 0;\n return c.parent === vm.categoryId\n }).forEach(function (k) { vm.categoryRateTableData.push(k) });\n vm.categoryRateTableData = JSON.parse(JSON.stringify(vm.categoryRateTableData));\n vm.categoryRateTableData.forEach(function (k) {\n k.precision = (k.precision * 100).toFixed(2);\n k.accuracy = (k.accuracy * 100).toFixed(2);\n k.recall = (k.recall * 100).toFixed(2);\n })\n if (flag) vm.categoryRateTableData[0].color = true;\n }\n\n vm.filters = {\n search: '',\n categories: [],\n tags: []\n };\n\n vm.showAll = true;\n\n vm.order = '';\n vm.orderDescending = false;\n\n vm.colors = ['blue-bg', 'blue-grey-bg', 'orange-bg', 'pink-bg', 'purple-bg'];\n $scope.colors = [\"#800026\", \"#bd0026\", \"#e31a1c\", \"#fc4e2a\", \"#fd8d3c\", \"#feb24c\", \"#fed976\"];\n\n // Statistics Charts\n vm.statisticsChart = {\n config: {\n refreshDataOnly: true,\n deepWatchData: true\n },\n accuracy: {\n options: {\n chart: {\n type: 'pieChart',\n color: ['#4CAF50', '#E0E0E0'],\n height: 400,\n margin: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n },\n donut: true,\n clipEdge: true,\n cornerRadius: 0,\n labelType: 'percent',\n showLegend: false,\n padAngle: 0.02,\n x: function (d) {\n return d.label;\n },\n y: function (d) {\n return (d.value * 100).toFixed(2);\n },\n tooltip: {\n gravity: 's',\n classes: 'gravity-s'\n },\n noData: $translate.instant('CLASSIFICATION.ERRORS.NO_DATA_AVAILABLE')\n }\n },\n data: []\n },\n precision: {\n options: {\n chart: {\n type: 'pieChart',\n color: ['#03A9F4', '#E0E0E0'],\n height: 400,\n margin: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n },\n donut: true,\n clipEdge: true,\n cornerRadius: 0,\n labelType: 'percent',\n showLegend: false,\n padAngle: 0.02,\n x: function (d) {\n return d.label;\n },\n y: function (d) {\n return (d.value * 100).toFixed(2);\n },\n tooltip: {\n gravity: 's',\n classes: 'gravity-s'\n },\n noData: $translate.instant('CLASSIFICATION.ERRORS.NO_DATA_AVAILABLE')\n }\n },\n data: []\n },\n recall: {\n options: {\n chart: {\n type: 'pieChart',\n color: ['#673AB7', '#E0E0E0'],\n height: 400,\n margin: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n },\n donut: true,\n clipEdge: true,\n cornerRadius: 0,\n labelType: 'percent',\n showLegend: false,\n padAngle: 0.02,\n x: function (d) {\n return d.label;\n },\n y: function (d) {\n return (d.value * 100).toFixed(2);\n },\n tooltip: {\n gravity: 's',\n classes: 'gravity-s'\n },\n noData: $translate.instant('CLASSIFICATION.ERRORS.NO_DATA_AVAILABLE')\n }\n },\n data: []\n },\n change: function (range) {\n vm.statisticsChart.accuracy.data = [];\n vm.statisticsChart.precision.data = [];\n vm.statisticsChart.recall.data = [];\n angular.forEach(vm.statistics.accuracy, function (data, index) {\n vm.statisticsChart.accuracy.data[index] = {\n label: data.label,\n value: data.value\n };\n });\n\n //\n angular.forEach(vm.statistics.precision, function (data, index) {\n vm.statisticsChart.precision.data[index] = {\n label: data.label,\n value: data.value\n };\n });\n\n //\n angular.forEach(vm.statistics.recall, function (data, index) {\n vm.statisticsChart.recall.data[index] = {\n label: data.label,\n value: data.value\n };\n });\n\n $utils.resize(500);\n\n },\n init: function () {\n // Run this function once to initialize widget\n\n /**\n * Update the range for the first time\n */\n vm.statisticsChart.change();\n }\n };\n\n\n // AutoComplete\n // list of `state` value/display objects\n vm.selectedItem = null;\n vm.searchText = null;\n vm.querySearch = querySearch;\n // ******************************\n // Internal methods\n // ******************************\n /**\n * Search for states... use $timeout to simulate\n * remote dataservice call.\n */\n function querySearch(query) {\n var results = query ? vm.categories.filter(createFilterFor(query)) : [];\n return results;\n }\n\n /**\n * Create filter function for a query string\n */\n function createFilterFor(query) {\n var lowercaseQuery = angular.lowercase(query);\n return function filterFn(item) {\n var lowercaseName = angular.lowercase(item.name);\n return (lowercaseName.indexOf(lowercaseQuery) == 0);\n };\n }\n\n\n function downloadModuleClassification($event) {\n var copyFilters = vm.filters.facets;\n var json = JSON.stringify(copyFilters, function (key, value) {\n if (key === \"$$hashKey\") {\n return undefined;\n }\n return value;\n });\n var data = {\n moduleId: vm.module.id,\n categoryId: vm.categoryId > 0 ? vm.categoryId.toString() : null,\n query: vm.filters.search ? vm.filters.search : null\n };\n downloadJquery('/api/module/export', data, 'POST');\n }\n\n function downloadJquery(url, data, method) {\n if (url && data) {\n data = typeof data === 'string' ? data : jQuery.param(data);\n var inputs = '';\n jQuery.each(data.split('&'), function () {\n var pair = this.split('=');\n inputs += '';\n });\n jQuery('
' + inputs + '
')\n .appendTo('body').submit().remove();\n }\n };\n\n\n function dynamicSort(property) {\n var sortOrder = 1;\n if (property[0] === \"-\") {\n sortOrder = -1;\n property = property.substr(1);\n }\n return function (a, b) {\n var result = (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0;\n return result * sortOrder;\n }\n }\n\n vm.sortCategoryRates = function (value) {\n var param = \"-\" + value;\n if (vm.lastCategoryRateSort != null && value == vm.lastCategoryRateSort) {\n param = value;\n vm.lastCategoryRateSort = null;\n } else {\n vm.lastCategoryRateSort = value;\n }\n vm.categoryRateTableData = vm.categoryRateTableData.sort(dynamicSort(param));\n }\n\n vm.catPages = {};\n\n function moreAndMore(params) {\n var deferred = $q.defer();\n vm.catPages[params.id] = vm.catPages[params.id] ? vm.catPages[params.id] + 1 : params.flag ? 0 : 1;\n api.module.pageableCategories(vm.moduleId, params.id, params.search, vm.catPages[params.id])\n .then(function (response) {\n if (!params.id) {\n vm.module.categories = vm.module.categories.concat(response);\n response.forEach(function (category, index) {\n recursiveSetCategoriesToSideNav(category, index, 'categories');\n });\n deferred.resolve(response);\n } else {\n var category = vm.module.categories.filter(function (k) { return k.id == params.id; })[0];\n vm.module.categories = vm.module.categories.concat(response);\n\n if (category) {\n if (!category.children) category.children = [];\n category.children = category.children.concat(response);\n }\n var parent = \"categories\"\n var cat = vm.module.categories.filter(function (m) { return m.id == params.parent })[0];\n while (cat) {\n parent = parent + \".\" + cat.id\n cat = vm.module.categories.filter(function (m) { return m.id == cat.parent })[0];\n }\n response.forEach(function (cat, index) {\n recursiveSetCategoriesToSideNav(cat, index, parent +\".\" +params.id);\n })\n deferred.resolve(response);\n }\n },\n function (response) {\n $log.error(response);\n });\n return deferred.promise;\n } \n\n function searchCategories(params) {\n api.module.pageableCategories(vm.moduleId, params.id, params.search, 0)\n .then(function (response) {\n if (!params.id) {\n vm.catPages = {};\n vm.clickedCats = {};\n if (vm.module.categories && vm.module.categories.length > 0) {\n vm.module.categories.forEach(function (category, index) {\n recursiveClearSidenavCategories(category, 'categories');\n });\n }\n vm.module.categories = response;\n if (vm.module.categories && vm.module.categories.length > 0) {\n vm.module.categories.forEach(function (category, index) {\n recursiveSetCategoriesToSideNav(category, index, 'categories');\n });\n }\n } else {\n delete vm.catPages[params.id];\n delete vm.clickedCats[params.id];\n var parent = \"categories\"\n var cat = vm.module.categories.filter(function (m) { return m.id == params.parent })[0];\n while (cat) {\n parent = parent + \".\" + cat.id\n cat = vm.module.categories.filter(function (m) { return m.id == cat.parent })[0];\n }\n var clearCategories = vm.module.categories.filter(function (m) { return m.parent == params.id });\n if (clearCategories && clearCategories.length > 0) {\n clearCategories.forEach(function (category, index) {\n recursiveClearSidenavCategories(category, parent + \".\" + params.id);\n });\n }\n vm.module.categories = vm.module.categories.filter(function (m) { return m.parent != params.id });\n vm.module.categories = vm.module.categories.concat(response);\n\n if (response && response.length > 0) {\n response.forEach(function (category, index) {\n recursiveSetCategoriesToSideNav(category, index, parent + \".\" + params.id);\n });\n }\n }\n \n \n },\n function (response) {\n $log.error(response);\n });\n }\n\n\n vm.init = function () {\n getCounts();\n getStatistics();\n getKeywords();\n getConfusions();\n setCategoriesToSideNav();\n vm.statisticsChart.init();\n $utils.saveAudit(vm.moduleId, \"MODULE\", \"OPEN\", vm.module.name);\n };\n vm.init();\n\n //Delete Module\n vm.deleteModule = function ($event) {\n ModuleService.deleteModule($scope, $state, $event, vm.module);\n }\n\n //Delete Category\n vm.deleteCategory = function ($event, category) {\n ModuleService.deleteCategory($scope, $state, $event, vm.module, category);\n }\n\n //Add Category\n vm.addCategory = function ($event) {\n ModuleService.addCategory($scope, $state, $event, vm.module);\n }\n\n function setCategoriesToSideNav() {\n msNavigationSidebarService.clearNavigation();\n msNavigationSidebarService.saveItem('categories', {\n //title: 'Categories',\n group: true,\n weight: 1,\n childrenCount: 1,\n searchCategories: function (stateParams) {\n searchCategories(stateParams);\n }\n //translate: 'SHARED.CATEGORIES'\n });\n if (vm.module.categories && vm.module.categories.length > 0) {\n vm.module.categories.forEach(function (category, index) {\n recursiveSetCategoriesToSideNav(category, index, 'categories');\n });\n }\n\n }\n\n function recursiveSetCategoriesToSideNav(category, weight, parent) {\n msNavigationSidebarService.saveItem(parent + \".\" + category.id, {\n title: category.name,\n localVariables: category.localVariables,\n icon: 'icon-tile-four',\n class: 'navigation-dashboards',\n childrenCount: category.childrenCount,\n stateParams: {\n 'id': category.id,\n 'parent': category.parent\n },\n click: function (stateParams) {\n var deferred = $q.defer();\n deferred.resolve(clickCategoryCategory(stateParams));\n return deferred.promise;\n },\n clickAverage: function (stateParams) {\n var deferred = $q.defer();\n deferred.resolve(clickCategoryAverageCategory(stateParams));\n return deferred.promise;\n },\n moreAndMore: function (stateParams) {\n var deferred = $q.defer();\n deferred.resolve(moreAndMore(stateParams));\n return deferred.promise;\n },\n searchCategories: function (stateParams) {\n searchCategories(stateParams);\n },\n hidden: function (node) {\n return false;\n },\n weight: weight\n });\n if (category.children && category.children.length > 0) {\n category.children.forEach(function (cat, index) {\n recursiveSetCategoriesToSideNav(cat, index, parent + \".\" + category.id);\n })\n }\n }\n\n function recursiveClearSidenavCategories(category, parent) {\n msNavigationSidebarService.deleteItem(parent + \".\" + category.id)\n if (category.children && category.children.length > 0) {\n category.children.forEach(function (cat, index) {\n recursiveClearSidenavCategories(cat, index, parent + \".\" + category.id);\n })\n }\n }\n \n function recursiveSetBreadCrumbs(item,id,no) {\n no += 1;\n for (var i = 0; i < item.length; i++) {\n\n if (item[i].id == id) {\n vm.breadCrumbs[no] = {\n id: item[i].id,\n name: item[i].name,\n localVariables: item[i].localVariables\n }\n return true;\n }\n\n if (item[i].children && item[i].children.length > 0) {\n if (recursiveSetBreadCrumbs(item[i].children, id, no)) {\n vm.breadCrumbs[no] = {\n id: item[i].id,\n name: item[i].name,\n localVariables: item[i].localVariables\n }\n return true;\n }\n }\n \n }\n }\n\n vm.getCategoryTitle = function (cat) {\n var title = cat.name;\n if (cat.localVariables) {\n var localVariable = cat.localVariables.filter(function (k) { return $translate.use() == k.language; })[0];\n if (localVariable) title = localVariable.value;\n }\n return title;\n }\n\n $rootScope.$on('$stateChangeStart',\n function (event, toState, toParams, fromState, fromParams) {\n msNavigationSidebarService.clearNavigationItems();\n })\n\n $rootScope.$on('$trainCompleted',\n function (event) {\n vm.init();\n });\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.modules')\n .controller('ClassificationEvaluationController', ClassificationEvaluationController);\n\n /** @ngInject */\n function ClassificationEvaluationController($rootScope, $scope, $state, $stateParams, $log, $interval, $translate, api, $$module) {\n var vm = this;\n\n vm.moduleId = $stateParams.id;\n vm.evaluationResults = [];\n vm.searchText = \"\";\n vm.evaluationResultsCount = 0;\n vm.selectedPage = 1;\n vm.pageNumber = 0;\n vm.rowNumber = 10;\n vm.lastItemIndex = 0;\n vm.firstItemIndex = 0;\n vm.categories = [];\n vm.searchActualCategory = \"any\";\n vm.searchPredictedCategory = \"any\";\n vm.orderType = null;\n vm.orderField = null;\n vm.order = {\n \"foldNumber\": 0,\n \"text\": 0,\n \"actual\": 0,\n \"predicted\": 0,\n \"predictedRate\":0\n }\n \n vm.orderClick = function (fieldName) {\n if (vm.order[fieldName] === 2)\n vm.order[fieldName] = 0;\n else {\n vm.order[fieldName] = vm.order[fieldName] + 1;\n for (var key in vm.order) {\n if (key !== fieldName)\n vm.order[key] = 0;\n }\n }\n\n vm.orderType = vm.order[fieldName];\n vm.orderField = fieldName;\n\n\n vm.searchEvaluation(vm.selectedPage, vm.order[fieldName], fieldName, vm.searchActualCategory, vm.searchPredictedCategory);\n }\n\n vm.getNumber = function (num) {\n return new Array(num);\n }\n\n vm.changeRowNumber = function () {\n //vm.searchEvaluationRowCount();\n vm.searchEvaluation(vm.selectedPage, null, null, vm.searchActualCategory, vm.searchPredictedCategory);\n }\n\n vm.changeActualCategory = function () {\n vm.searchEvaluation(vm.selectedPage, null, null, vm.searchActualCategory, vm.searchPredictedCategory);\n }\n \n $scope.enterKey = function (keyEvent) {\n if (keyEvent.which === 13) {\n //vm.searchEvaluationRowCount();\n vm.searchEvaluation(vm.selectedPage, null, null, vm.searchActualCategory, vm.searchPredictedCategory);\n }\n }\n\n vm.searchEvaluation = function (pageNo, orderType, orderField,actualCategory,predictedCategory) {\n if (orderType == 1)\n orderType = \"asc\";\n else if (orderType == 2)\n orderType = \"desc\";\n else\n orderType = null;\n\n api.classification.getEvaluationCount(vm.moduleId, vm.searchText, actualCategory, predictedCategory)\n .then(function (resp) {\n vm.evaluationResultsCount = resp;\n vm.pageNumber = parseInt(((vm.evaluationResultsCount - 1) / vm.rowNumber) + 1);\n\n var startPoint = (pageNo - 1) * vm.rowNumber;\n\n while (startPoint > vm.evaluationResultsCount) {\n pageNo--;\n startPoint = startPoint - vm.rowNumber;\n if (startPoint <= 0) {\n startPoint = 0;\n break;\n }\n }\n\n api.classification.searchEvaluation(vm.moduleId, vm.searchText, startPoint, vm.rowNumber, orderField, orderType, actualCategory, predictedCategory)\n .then(function (resp) {\n vm.evaluationResults = resp;\n vm.selectedPage = pageNo;\n vm.firstItemIndex = (pageNo - 1) * vm.rowNumber;\n },\n function (resp) {\n $log.error(resp);\n });\n\n },\n function (resp) {\n $log.error(resp);\n });\n\n }\n\n vm.searchEvaluationRowCount = function () {\n api.classification.getEvaluationCount(vm.moduleId, vm.searchText)\n .then(function (resp) {\n vm.evaluationResultsCount = resp;\n vm.pageNumber = parseInt(((vm.evaluationResultsCount - 1) / vm.rowNumber) + 1);\n },\n function (resp) {\n $log.error(resp);\n });\n }\n\n vm.init = function () {\n\n vm.searchEvaluation(1, null, null, vm.searchActualCategory, vm.searchPredictedCategory);\n api.module.categories(vm.moduleId)\n .then(function (resp) {\n vm.categories = resp;\n console.log(vm.categories);\n }, function (resp) {\n $log.error(resp);\n } )\n };\n vm.init();\n }\n})();\n\n\n(function () {\n 'use strict';\n\n angular\n .module('app.modules')\n .controller('CreateReportController', CreateReportController);\n\n /** @ngInject */\n\n function CreateReportController($scope, $state, $stateParams, $mdDialog, $log, $translate, api, ReportService,user) {\n var vm = this;\n //$log.info($stateParams.rm);\n vm.report = {};\n vm.added = [];\n vm.dragging = false;\n vm.createProcessing = false;\n\n vm.msScrollOptions = {\n suppressScrollX: true\n };\n\n vm.workspaces = user.workspaces;\n vm.filteredWorkspace = -1;\n\n vm.filterWorkspace = filterWorkspace;\n vm.filteredModules = [];\n\n function filterWorkspace(){\n if(vm.filteredWorkspace == -1){\n vm.filteredModules = vm.modules;\n }else{\n vm.filteredModules = vm.modules.filter(function(m){\n return m.workspaceId === vm.filteredWorkspace.id;\n });\n }\n }\n\n vm.sortableCardOptions = {\n cancel: \".unsortable\",\n appendTo: 'body',\n connectWith: '.board-list',\n delay: 75,\n distance: 7,\n forcePlaceholderSize: true,\n placeholder: 'board-list-item',\n tolerance: 'pointer',\n start: function(event, ui) {\n vm.dragging = true;\n var model = ui.item.sortable.model;\n angular.forEach(vm.added, function(item) {\n if (item.name == model.name) {\n item.sorting = true;\n }\n });\n $scope.$apply();\n $log.info(model.name + \" start | \" + vm.dragging);\n },\n stop: function(event, ui) {\n angular.forEach(vm.added, function(item) {\n item.sorting = false;\n });\n vm.dragging = false;\n $log.info(ui.item.sortable.model.name + \" stop | \" + vm.dragging);\n }\n };\n\n vm.showInfo = function() {\n $log.info(\"showInfo | \" + vm.added.length + \" | \" + vm.dragging);\n return vm.added.length == 0 && !vm.dragging;\n };\n\n vm.showIcon = function($index, item) {\n return ($index + 1 < vm.added.length) && !item.sorting;\n }\n\n //Methods\n\n vm.filters = {\n search: ''\n };\n vm.filtersDefaults = angular.copy(vm.filters);\n\n //Stages\n api.report.modules()\n .then(function(response) {\n vm.modules = response;\n vm.filteredModules = response;\n },\n function(response) {\n $log.error(response);\n });\n\n vm.sortableOptions = {\n handle: '.handle',\n forceFallback: true,\n ghostClass: 'todo-item-placeholder',\n fallbackClass: 'todo-item-ghost',\n fallbackOnBody: true,\n sort: true\n };\n\n\n // Methods\n vm.createReport = createReport;\n vm.preventDefault = preventDefault;\n vm.getIcon = getIcon;\n vm.cancel = cancel;\n vm.validation = validation;\n vm.addedSentimentModule = null;\n vm.addedNerModule = null;\n\n /**\n * Prevent default\n *\n * @param e\n */\n function preventDefault(e) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n function createReport($event) {\n if (user.workspaces && user.workspaces.length > 1) {\n var report = {\n name: vm.report.name,\n definition: vm.report.definition,\n modules: vm.added\n };\n ReportService.createReport($scope, $state, $event, report);\n } else if (user.workspaces && user.workspaces.length == 1) {\n var report = {\n name: vm.report.name,\n definition: vm.report.definition,\n modules: vm.added,\n workspaceId: user.workspaces[0].id \n };\n vm.createProcessing = true;\n api.report.save(report)\n .then(function (response) {\n $state.go('app.report.data', {\n id: response.id\n });\n vm.createProcessing = false;\n },\n function (response) {\n vm.createProcessing = false;\n $log.error(response);\n });\n }\n }\n\n function validation(){\n if(vm.report.name && vm.report.name.length > 0 && vm.report.definition && vm.report.definition.length > 0 && vm.added && vm.added.length > 0){\n return true;\n }else{\n return false;\n }\n }\n\n function cancel() {\n $state.go('app.modules.list');\n }\n\n function getIcon(module) {\n switch (module.moduleType.id) {\n case 1:\n return \"icon-source-fork\";\n case 5:\n return \"icon-emoticon\";\n case 6:\n return \"icon-code-tags\";\n case 7:\n return \"icon-emoticon\";\n }\n }\n\n vm.addModule = function () {\n var item = vm.selected;\n if(vm.added.indexOf(vm.selected)<0){\n var moduleAdded = false;\n if(item.moduleTypeId == 7 || item.moduleTypeId == 5){\n if(vm.addedSentimentModule != null){\n vm.filteredModules.push(vm.addedSentimentModule);\n vm.added[vm.added.indexOf(vm.addedSentimentModule)] = vm.selected;\n moduleAdded = true;\n }\n vm.addedSentimentModule = item;\n }else if(item.moduleTypeId == 6){\n if(vm.addedNerModule != null){\n vm.filteredModules.push(vm.addedNerModule);\n vm.added[vm.added.indexOf(vm.addedNerModule)] = vm.selected;\n moduleAdded = true;\n }\n vm.addedNerModule = item;\n }\n if(!moduleAdded){\n vm.added.push(vm.selected);\n }\n }\n $.each(vm.filteredModules, function (i) {\n if (vm.filteredModules[i].id === item.id) {\n vm.filteredModules.splice(i, 1);\n return false;\n }\n });\n vm.selected = null;\n }\n\n vm.removeModule = function () {\n var item = vm.selectedAdded;\n if(item.moduleTypeId == 7 || item.moduleTypeId == 5){\n vm.addedSentimentModule = null;\n }else if(item.moduleTypeId == 6){\n vm.addedNerModule = null;\n }\n removeModule(item);\n vm.selectedAdded = null;\n }\n\n function removeModule(item) {\n $.each(vm.added, function(i) {\n if (vm.added[i].id === item.id) {\n vm.added.splice(i, 1);\n vm.filteredModules.push(item);\n return false;\n }\n });\n }\n\n $scope.$watchCollection(function() {\n return vm.added;\n }, function(data) {\n if (data) {\n $.each(data, function (index, val) {\n val.rank = index + 1;\n });\n } else {\n return;\n }\n });\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.modules')\n .controller('CreateModulePipelineController', CreateModulePipelineController);\n\n /** @ngInject */\n function CreateModulePipelineController($scope, $state, $stateParams, $mdDialog, $log, api, user, PipelineService) {\n var vm = this;\n //$log.info($stateParams.rm);\n vm.pipeline = {};\n vm.added = [];\n vm.parentModule = $stateParams.parentModule ? $stateParams.parentModule:null;\n vm.dragging = false;\n vm.rm = \"app.modules.create.\" + $stateParams.rm;\n vm.module = $stateParams.module;\n vm.createProcessing = false;\n\n vm.stages = [];\n vm.msScrollOptions = {\n suppressScrollX: true\n };\n\n vm.sortableCardOptions = {\n cancel: \".unsortable\",\n appendTo: 'body',\n connectWith: '.board-list',\n delay: 75,\n distance: 7,\n forcePlaceholderSize: true,\n placeholder: 'board-list-item',\n tolerance: 'pointer',\n start: function (event, ui) {\n vm.dragging = true;\n var model = ui.item.sortable.model;\n angular.forEach(vm.added, function (item) {\n if (item.name == model.name) {\n item.sorting = true;\n }\n });\n $scope.$apply();\n $log.info(model.name + \" start | \" + vm.dragging);\n },\n stop: function (event, ui) {\n angular.forEach(vm.added, function (item) {\n item.sorting = false;\n });\n vm.dragging = false;\n $log.info(ui.item.sortable.model.name + \" stop | \" + vm.dragging);\n }\n };\n\n vm.showInfo = function () {\n return vm.added.length == 0 && !vm.dragging;\n };\n\n vm.showIcon = function ($index, item) {\n return ($index + 1 < vm.added.length) && !item.sorting;\n }\n\n //Methods\n\n vm.filters = {\n search: ''\n };\n vm.filtersDefaults = angular.copy(vm.filters);\n\n //Stages\n api.pipeline.stages()\n .then(function (response) {\n vm.stages = response;\n },\n function (response) {\n $log.error(response);\n });\n\n vm.sortableOptions = {\n handle: '.handle',\n forceFallback: true,\n ghostClass: 'todo-item-placeholder',\n fallbackClass: 'todo-item-ghost',\n fallbackOnBody: true,\n sort: true\n };\n\n\n // Methods\n vm.createPipeline = createPipeline;\n vm.preventDefault = preventDefault;\n vm.getIcon = getIcon;\n vm.cancel = cancel;\n\n /**\n * Prevent default\n *\n * @param e\n */\n function preventDefault(e) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n /*function createPipeline() {\n var pipeline = {\n name: vm.pipeline.name,\n definition: vm.pipeline.definition,\n stages: vm.added\n };\n vm.createProcessing = true;\n api.pipeline.save(pipeline)\n .then(function (response) {\n $state.go(vm.rm, { module: vm.module });\n vm.createProcessing = false;\n },\n function (response) {\n vm.createProcessing = false;\n $log.error(response);\n });\n }*/\n\n function createPipeline($event) {\n if (user.workspaces && user.workspaces.length > 1) {\n var pipeline = {\n name: vm.pipeline.name,\n definition: vm.pipeline.definition,\n stages: vm.added\n };\n PipelineService.createPipeline($scope, $state, $event, pipeline)\n .then(function (response) {\n if (response){\n if(vm.parentModule){\n $state.go(vm.rm, { module: vm.module,parentModule :vm.parentModule });\n }else{\n $state.go(vm.rm, { module: vm.module });\n }\n }\n }, function (err) {\n console.log(err);\n });\n } else {\n var pipeline = {\n name: vm.pipeline.name,\n definition: vm.pipeline.definition,\n stages: vm.added\n };\n vm.createProcessing = true;\n\n api.pipeline.save(pipeline)\n .then(function (response) {\n vm.createProcessing = false;\n if(vm.parentModule){\n $state.go(vm.rm, { module: vm.module,parentModule :vm.parentModule });\n }else{\n $state.go(vm.rm, { module: vm.module });\n }\n //$state.go(vm.rm, {\n // module: vm.module\n //});\n },\n function (response) {\n vm.createProcessing = false;\n $log.error(response);\n });\n }\n }\n\n function cancel() {\n if(vm.parentModule){\n $state.go(vm.rm, { module: vm.module,parentModule :vm.parentModule });\n }else{\n $state.go(vm.rm, { module: vm.module });\n }\n }\n\n function getIcon(stage) {\n switch (stage.id) {\n case 1:\n return \"icon-xml\";\n case 2:\n return \"icon-link-off\";\n case 3:\n return \"icon-twitter-circle\";\n case 4:\n return \"icon-twitter-retweet\";\n case 5:\n return \"icon-twitter-box\";\n case 6:\n return \"icon-hexagon-outline\";\n case 7:\n return \"icon-arrange-send-to-back\";\n case 8:\n return \"icon-arrange-bring-to-front\";\n }\n }\n\n vm.addStage = function () {\n var item = vm.selected;\n vm.added.push(vm.selected);\n $.each(vm.stages, function (i) {\n if (vm.stages[i].id === item.id) {\n vm.stages.splice(i, 1);\n return false;\n }\n });\n vm.selected = null;\n }\n\n vm.removeStage = function () {\n var item = vm.selectedAdded;\n $.each(vm.added, function (i) {\n if (vm.added[i].id === item.id) {\n vm.added.splice(i, 1);\n return false;\n }\n });\n vm.stages.push(item);\n vm.selectedAdded = null;\n }\n\n $scope.$watchCollection(function () {\n return vm.added;\n }, function (data) {\n if (data) {\n $.each(data, function (index, val) {\n val.rank = index + 1;\n });\n } else {\n return;\n }\n });\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.modules')\n .controller('CreateModuleController', CreateModuleController);\n\n /** @ngInject */\n function CreateModuleController($scope, $state, $stateParams, $mdDialog, $log, $filter, api, user, ModuleService, $mdToast) {\n var vm = this;\n vm.module = $stateParams.module ? $stateParams.module : {};\n vm.parentModule = $stateParams.parentModule ? $stateParams.parentModule:null;\n vm.pipeline = null;\n vm.order = 'name';\n vm.classifier = null;\n vm.createProcessing = false;\n vm.user = user;\n vm.rm = $state.current.data.type;\n vm.types = [];\n vm.pipelines = [];\n vm.classifiers = [];\n vm.msScrollOptions = {\n suppressScrollX: true\n };\n\n //Methods\n vm.getIcon = getIcon;\n vm.setCurrentPage = setCurrentPage;\n vm.setClassifierCurrentPage = setClassifierCurrentPage;\n vm.createPipeline = createPipeline;\n vm.createModule = createModule;\n\n\n vm.search = '';\n vm.searchClassifier = '';\n vm.filtersDefaults = angular.copy(vm.filters);\n vm.pagination = {\n current: 1,\n last: 1\n };\n\n vm.paginationClassifier = {\n current: 1,\n last: 1\n };\n\n // Data\n //Pipelines\n switch (vm.rm) {\n case \"classification\":\n case \"sentimentspecial\":\n case \"clustering\":\n case \"topicmodeling\":\n case \"rootcause\":\n api.pipeline.list()\n .then(function (response) {\n vm.pipelines = response;\n vm.pagination.last = calculatePageCounts(vm.pipelines.length);\n },\n function (response) {\n $log.error(response);\n });\n break;\n\n }\n\n if (vm.rm == 'rootcause') {\n //Classifier Modules\n api.module.classifiers()\n .then(function (response) {\n vm.classifiers = response;\n },\n function (response) {\n $log.error(response);\n });\n }\n\n function setCurrentPage(page) {\n if (page > 0 && page <= vm.pagination.last)\n vm.pagination.current = page;\n }\n\n function setClassifierCurrentPage(page) {\n if (page > 0 && page <= vm.pagination.last)\n vm.paginationClassifier.current = page;\n }\n\n function calculatePageCounts(count) {\n var l = 14;\n var lastpage = Math.ceil(count / l);\n return lastpage > 0 ? lastpage : 1;\n }\n\n function createPipeline() {\n $state.go('app.modules.create.pipeline', { rm: vm.rm, module: vm.module,parentModule: vm.parentModule });\n }\n\n function createModule($event) {\n if (user.workspaces && user.workspaces.length > 0) {\n var callApi = true;\n var workspaceId = null;\n if (!vm.parentModule && user.workspaces.length == 1)\n workspaceId = vm.user.workspaces[0].id;\n else if (vm.parentModule) {\n workspaceId = vm.parentModule.workspaceId;\n var userWorkspaces = user.workspaces.filter(function (item) { return item.id == workspaceId });\n if (!userWorkspaces || userWorkspaces.length == 0)\n callApi = false;\n }\n if (callApi) {\n var item = createModuleObject(workspaceId);\n if (vm.parentModule) {\n vm.createProcessing = true;\n api.module.save(item)\n .then(function (response) {\n vm.createProcessing = false;\n var id = response.id;\n var typeId = getModuleTypeId(vm.rm);\n var route = getRoute(typeId)\n $state.go(route, { id: id, isnew: true });\n },\n function (response) {\n vm.createProcessing = false;\n $log.error(response);\n });\n } else {\n ModuleService.createModule($scope, $state, $event, item);\n }\n }\n } else {\n $mdToast.show($mdToast.simple().textContent(\"Mevcut bir workspace bulunamadı.\"));\n }\n }\n\n function createModuleObject(workspaceId) {\n return {\n name: vm.module.name,\n definition: vm.module.definition,\n indicator: vm.module.indicator ? vm.module.indicator : null,\n parent: vm.parentModule ? vm.parentModule.id : null,\n workspaceId: workspaceId,\n moduleType: { id: getModuleTypeId(vm.rm) },\n pipeline: vm.pipeline,\n classifier: vm.classifier ? vm.classifier.id : null\n };\n }\n\n function getIcon(type) {\n switch (type.id) {\n case 1:\n return \"icon-source-fork\";//\"icon-apps\";\n case 2:\n return \"icon-linode\"; //\"icon-basket-fill\";\n case 3:\n return \"icon-tooltip-text\"; //\"icon-pound-box\";\n case 4:\n return \"icon-nfc-tap\"; //icon-source-pull; icon-source-fork\n case 5:\n return \"icon-emoticon\"; //\"icon-tag-faces\";\n case 6:\n return \"icon-code-tags\"; //icon-format-color; icon-image-filter-center-focus\n case 7:\n return \"icon-emoticon\";\n }\n }\n\n function getRoute(type) {\n switch (type) {\n case 1:\n case 2:\n case 3:\n case 4:\n case 7:\n return \"app.module.overview\";\n case 5:\n case 6:\n return \"app.module.test\";\n }\n };\n\n function getModuleTypeId(name) {\n switch (name) {\n case \"classification\":\n return 1;\n case \"clustering\":\n return 2;\n case \"topicmodeling\":\n return 3;\n case \"rootcause\":\n return 4;\n case \"sentiment\":\n return 5;\n case \"namedentity\":\n return 6;\n case \"sentimentspecial\":\n return 7;\n }\n }\n\n $scope.$watch('vm.search', function (text) {\n if (!vm.pipelines) return;\n\n var length = vm.pipelines.length;\n var filtered = $filter('filter')(vm.pipelines, text)\n if (filtered) {\n var length = filtered.length;\n }\n vm.pagination.last = calculatePageCounts(length);\n });\n\n $scope.$watch('vm.module', function () {\n $scope.newModuleForm.$setDirty();\n });\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.modules')\n .controller('CreateController', CreateController);\n\n /** @ngInject */\n\n function CreateController($scope, $log, api) {\n var vm = this;\n vm.types = [];\n //Methods\n vm.getIcon = getIcon;\n vm.getRoute = getRoute;\n vm.getPermission = getPermission;\n vm.createProcessing = false;\n\n // Data\n //Module Types\n api.module.types()\n .then(function(response) {\n vm.types = response;\n },\n function(response) {\n $log.error(response);\n });\n\n function getIcon(type) {\n switch (type.id) {\n case 1:\n return \"icon-source-fork\"; //\"icon-apps\";\n case 2:\n return \"icon-linode\"; //\"icon-basket-fill\";\n case 3:\n return \"icon-tooltip-text\"; //\"icon-pound-box\";\n case 4:\n return \"icon-nfc-tap\"; //icon-source-pull; icon-source-fork\n case 5:\n return \"icon-emoticon\"; //\"icon-tag-faces\";\n case 6:\n return \"icon-code-tags\"; //icon-format-color; icon-image-filter-center-focus\n case 7:\n return \"icon-emoticon\";\n }\n }\n\n function getRoute(type) {\n switch (type.id) {\n case 1:\n return \"app.modules.create.classification\";\n case 2:\n return \"app.modules.create.clustering\";\n case 3:\n return \"app.modules.create.topicmodeling\";\n case 4:\n return \"app.modules.create.rootcause\";\n case 5:\n return \"app.modules.create.sentiment\";\n case 6:\n return \"app.modules.create.namedentity\";\n case 7:\n return \"app.modules.create.sentimentspecial\"\n }\n };\n\n function getPermission(type) {\n switch (type.id) {\n case 1:\n return \"MODULE/CLASSIFICATION/CREATE\";\n case 2:\n return \"MODULE/CLUSTERING/CREATE\";\n case 3:\n return \"MODULE/TOPICMODELING/CREATE\";\n case 4:\n return \"MODULE/ROOTCAUSE/CREATE\";\n case 5:\n return \"MODULE/SENTIMENT/CREATE\";\n case 6:\n return \"MODULE/NAMEDENTITY/CREATE\";\n case 7:\n return \"MODULE/CLASSIFICATION/CREATE\";\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.modules')\n .controller('ClassificationCategoryController', ClassificationCategoryController);\n\n /** @ngInject */\n function ClassificationCategoryController($rootScope, $scope, $state, $stateParams, $log, $interval, $mdToast, $translate, api, $$module, $element, DTOptionsBuilder, DTColumnDefBuilder, ModuleService, ModuleCategoryService) {\n\n var vm = this;\n vm.moduleId = $stateParams.id;\n vm.module = $$module;\n vm.getCategories = getCategories;\n vm.attributeTitles = vm.module.moduleFields.map(function(f){return f.fieldTitle});\n vm.newAttributeTitle = \"\";\n vm.newAttributeType = 300;\n vm.deleteAttribute = null;\n\n vm.loaders = {\n addCategoryButton: false,\n replaceCategoryButton: false,\n deleteCategoryButton: false,\n addAttributeButton: false,\n deleteAttributeButton: false \n }\n\n //Category Alias\n vm.aliasSelectedCategory = null;\n vm.selectedCategoryAlias = null;\n vm.aliasSearchCategoryName = \"\";\n vm.categoryAliases = [];\n vm.searchCategories = searchCategories;\n vm.addCategoryAlias = addCategoryAlias;\n vm.removeCategoryAlias = removeCategoryAlias;\n\n vm.deleteMainCategorySearch = deleteMainCategorySearch;\n vm.deleteSub1CategorySearch = deleteSub1CategorySearch;\n vm.deleteSub2CategorySearch = deleteSub2CategorySearch;\n vm.categorySearch = categorySearch;\n vm.categoryAddingSearch = categoryAddingSearch;\n vm.changeOldSelectCategory = changeOldSelectCategory;\n vm.changeOldSelectSub1Category = changeOldSelectSub1Category;\n vm.changeOldSelectSub2Category = changeOldSelectSub2Category;\n vm.changeNewSelectCategory = changeNewSelectCategory;\n vm.changeNewSelectSub1Category = changeNewSelectSub1Category;\n vm.changeNewSelectSub2Category = changeNewSelectSub2Category;\n vm.changeDeleteSelectMainCategory = changeDeleteSelectMainCategory;\n vm.changeDeleteSelectSub1Category = changeDeleteSelectSub1Category;\n vm.changeDeleteSelectSub2Category = changeDeleteSelectSub2Category;\n\n vm.changeAddingSelectMainCategory = changeAddingSelectMainCategory;\n vm.changeAddingSelectSub1Category = changeAddingSelectSub1Category;\n vm.changeAddingSelectSub2Category = changeAddingSelectSub2Category;\n vm.changeAddingMainCategoryText = changeAddingMainCategoryText;\n vm.changeAddingSub1CategoryText = changeAddingSub1CategoryText;\n vm.changeAddingSub2CategoryText = changeAddingSub2CategoryText;\n\n vm.addCategorySearch = {\n mainCategory: null,\n sub1Category: null,\n sub2Category: null\n }\n\n vm.addCategories = addCategories;\n vm.deleteCategory = deleteCategory;\n vm.replace = replace;\n vm.addAttribute = addAttribute;\n vm.deleteAttribute = deleteAttribute;\n\n vm.showToast = showSimpleToast;\n init();\n function init(){\n getCategories();\n }\n\n function addAttribute($event){\n if(vm.attributeTitles.indexOf(vm.newAttributeTitle) >-1) return;\n vm.loaders.addAttributeButton = true;\n var request = {'fieldTitle':vm.newAttributeTitle, 'fieldType':vm.newAttributeType}\n api.module.addField(request, vm.module.id)\n .then(function (response) {\n vm.attributeTitles.push(response.fieldTitle);\n vm.module.moduleFields.push(response);\n vm.newAttributeTitle = \"\";\n vm.loaders.addAttributeButton = false;\n }, function (err) {\n vm.loaders.addCategoryButton = false;\n });\n }\n\n function deleteAttribute(attribute){\n vm.module.moduleFields.forEach(function(x){x.deleteWarning = null;});\n vm.loaders.deleteAttributeButton = true;\n api.module.deleteField(attribute.fieldName, vm.module.id)\n .then(function (response) {\n if(response.status == 200){\n vm.attributeTitles.splice(vm.attributeTitles.indexOf(attribute.fieldTitle), 1); \n vm.module.moduleFields.splice(vm.module.moduleFields.indexOf(attribute),1);\n }else if(response.status == 300){\n attribute.deleteWarning = $translate.instant('MODULES.ATTRIBUTE.WARN.'+response.messageCode);\n }\n vm.loaders.deleteAttributeButton = false;\n }, function (err) {\n vm.loaders.deleteAttributeButton = false;\n }); \n }\n\n function refreshModels() {\n vm.categories = [];\n vm.deleteMainCategories = [];\n vm.deleteSub1Categories = [];\n vm.deleteSub2Categories = [];\n vm.selectedDeleteMainCategory = null;\n vm.selectedDeleteSub1Category = null;\n vm.selectedDeleteSub2Category = null;\n vm.searchDeleteMainCategory = null;\n vm.searchDeleteSub1Category = null;\n vm.searchDeleteSub2Category = null;\n vm.addMainCategory = null;\n vm.addSub1Category = null;\n vm.addSub2Category = null;\n vm.addCategorySearch.mainCategory = null;\n vm.addCategorySearch.sub1Category = null;\n vm.addCategorySearch.sub2Category = null;\n vm.addCategoryRequest = {};\n vm.deleteCategoryRequest = {};\n vm.selectedReplace = {\n selectedMainOld: null,\n selectedSub1Old: null,\n selectedSub2Old: null,\n selectedMainNew: null,\n selectedSub1New: null,\n selectedSub2New: null\n };\n vm.categoryCodes = {\n mainCategory: null,\n sub1Category: null,\n sub2Category: null\n }\n }\n\n vm.checkChildrenCategories = checkChildrenCategories;\n\n function showSimpleToast(text) {\n $mdToast.show($mdToast.simple().textContent(text));\n };\n\n function checkChildrenCategories(category) {\n if (category && category.id) {\n var children = vm.categories.filter(function (c) {\n return c.parent != null && c.parent == category.id;\n });\n if (children && children.length > 0)\n return true;\n }\n return false;\n }\n\n\n // Add Category start\n\n function addCategories($event) {\n vm.loaders.addCategoryButton = true;\n var request = prepareAddCategoryRequest();\n api.module.addHierCategory(request)\n .then(function (_res) {\n ModuleCategoryService.successAddCategoryDialog($scope, $state, $event, $$module)\n .then(function (response) {\n vm.loaders.addCategoryButton = false;\n }, function (err) {\n //console.log(err);\n vm.loaders.addCategoryButton = false;\n })\n getCategories();\n }, function (err) {\n //console.log(err);\n //getCategories();\n vm.loaders.addCategoryButton = false;\n });\n }\n\n function prepareAddCategoryRequest() {\n var request = {\n mainCategory: null,\n sub1Category: null,\n sub2Category: null,\n categories: [],\n moduleId: vm.moduleId\n };\n if (vm.addMainCategory) {\n request.mainCategory = vm.addMainCategory;\n request.mainCategory.code = vm.categoryCodes.mainCategory;\n } else if (vm.addCategorySearch.mainCategory && vm.addCategorySearch.mainCategory.length > 0) {\n var founded = vm.categories.filter(function (cat) {\n return !cat.parent && cat.name === vm.addCategorySearch.mainCategory;\n });\n if (founded && founded.length == 1) {\n request.mainCategory = founded[0];\n } else {\n request.mainCategory = {\n id: null,\n name: vm.addCategorySearch.mainCategory\n }\n }\n request.mainCategory.code = vm.categoryCodes.mainCategory;\n }\n if (vm.addSub1Category) {\n request.sub1Category = vm.addSub1Category;\n request.sub1Category.code = vm.categoryCodes.sub1Category;\n } else if (vm.addCategorySearch.sub1Category && vm.addCategorySearch.sub1Category.length > 0) {\n var parentId = null;\n if (request.mainCategory.id)\n parentId = request.mainCategory.id;\n var founded = vm.categories.filter(function (cat) {\n if (parentId)\n return cat.parent && cat.parent == parentId && cat.name === vm.addCategorySearch.sub1Category;\n else\n return false;\n });\n if (founded && founded.length == 1) {\n request.sub1Category = founded[0];\n } else {\n request.sub1Category = {\n id: null,\n name: vm.addCategorySearch.sub1Category,\n parent: request.mainCategory.id ? request.mainCategory.id : null\n }\n }\n request.sub1Category.code = vm.categoryCodes.sub1Category;\n }\n if (vm.addSub2Category) {\n request.sub2Category = vm.addSub2Category;\n request.sub2Category.code = vm.categoryCodes.sub2Category;\n } else if (vm.addCategorySearch.sub2Category && vm.addCategorySearch.sub2Category.length > 0) {\n var parentId = null;\n if (request.sub1Category.id)\n parentId = request.sub1Category.id;\n var founded = vm.categories.filter(function (cat) {\n if (parentId)\n return cat.parent && cat.parent == parentId && cat.name === vm.addCategorySearch.sub2Category;\n else\n return false;\n });\n if (founded && founded.length == 1) {\n request.sub2Category = founded[0];\n } else {\n request.sub2Category = {\n id: null,\n name: vm.addCategorySearch.sub2Category,\n parent: request.sub1Category.id ? request.sub1Category.id : null\n }\n }\n request.sub2Category.code = vm.categoryCodes.sub2Category;\n }\n if (request.mainCategory) {\n request.categories.push(request.mainCategory);\n if (request.sub1Category) {\n request.categories.push(request.sub1Category);\n if (request.sub2Category)\n request.categories.push(request.sub2Category);\n }\n }\n return request;\n }\n\n\n function changeAddingSelectMainCategory(item) {\n vm.addMainCategory = item;\n vm.categoryCodes.mainCategory = item == null ? null : item.code;\n vm.addCategorySearch.sub1Category = null;\n vm.addSub1Category = null;\n vm.categoryCodes.sub1Category = null;\n vm.addCategorySearch.sub2Category = null;\n vm.addSub2Category = null;\n vm.categoryCodes.sub2Category = null;\n }\n\n function changeAddingSelectSub1Category(item) {\n vm.addSub1Category = item;\n vm.categoryCodes.sub1Category = item == null ? null : item.code;\n vm.addCategorySearch.sub2Category = null;\n vm.addSub2Category = null;\n vm.categoryCodes.sub2Category = null;\n }\n\n function changeAddingSelectSub2Category(item) {\n vm.addSub2Category = item;\n vm.categoryCodes.sub2Category = item == null ? null : item.code;\n }\n\n function changeAddingMainCategoryText(item) {\n vm.categoryCodes.mainCategory = null;\n if (!item.name && item.length == 0) {\n vm.addCategorySearch.sub1Category = null;\n vm.addSub1Category = null;\n vm.categoryCodes.sub1Category = null;\n vm.addCategorySearch.sub2Category = null;\n vm.addSub2Category = null;\n vm.categoryCodes.sub2Category = null;\n }\n }\n\n function changeAddingSub1CategoryText(item) {\n vm.categoryCodes.sub1Category = null;\n if (!item.name && item.length == 0) {\n vm.addCategorySearch.sub2Category = null;\n vm.addSub2Category = null;\n vm.categoryCodes.sub2Category = null;\n }\n }\n\n function changeAddingSub2CategoryText(item) {\n vm.categoryCodes.sub2Category = null;\n }\n\n function categoryAddingSearch(query, cat) {\n var results = query ? vm.categories.filter(createFilterFor(query)) : vm.categories;\n if (cat) {\n results = results.filter(function (c) {\n return c.parent == cat.id;\n });\n } else {\n results = [];\n }\n return results;\n }\n\n //Add category end\n\n //Delete category start\n\n function deleteCategory($event) {\n vm.loaders.deleteCategoryButton = true;\n var categoryId;\n if (vm.selectedDeleteSub2Category) {\n categoryId = vm.selectedDeleteSub2Category.id;\n } else if (vm.selectedDeleteSub1Category) {\n categoryId = vm.selectedDeleteSub1Category.id;\n } else if (vm.selectedDeleteMainCategory) {\n categoryId = vm.selectedDeleteMainCategory.id;\n }\n var req = {\n moduleId: vm.moduleId,\n categoryId: categoryId\n }\n api.module.deleteHierCategory(req)\n .then(function (res) {\n ModuleCategoryService.deleteCategory($scope, $state, $event, $$module, res)\n .then(function (response) {\n vm.loaders.deleteCategoryButton = false;\n getCategories();\n }, function (err) {\n console.log(err);\n vm.loaders.deleteCategoryButton = false;\n getCategories();\n })\n }, function (err) {\n vm.loaders.deleteCategoryButton = false;\n console.log(err);\n getCategories();\n });\n }\n\n function changeDeleteSelectMainCategory(item) {\n vm.selectedDeleteMainCategory = item;\n vm.deleteSub1Categories = vm.categories.filter(function (cat) {\n return cat.parent == vm.selectedDeleteMainCategory.id;\n })\n }\n\n function changeDeleteSelectSub1Category(item) {\n vm.selectedDeleteSub1Category = item;\n vm.deleteSub2Categories = vm.categories.filter(function (cat) {\n return cat.parent == vm.selectedDeleteSub1Category.id;\n })\n }\n\n function changeDeleteSelectSub2Category(item) {\n vm.selectedDeleteSub2Category = item;\n }\n\n function deleteMainCategorySearch(query) {\n var results = query ? vm.deleteMainCategories.filter(createFilterFor(query)) : vm.deleteMainCategories;\n return results;\n }\n\n function deleteSub1CategorySearch(query) {\n var results = query ? vm.deleteSub1Categories.filter(createFilterFor(query)) : vm.deleteSub1Categories;\n return results;\n }\n\n function deleteSub2CategorySearch(query) {\n var results = query ? vm.deleteSub2Categories.filter(createFilterFor(query)) : vm.deleteSub2Categories;\n return results;\n }\n //Delete category end\n\n //Replace category start\n\n function replace($event) {\n var existsCatId = null;\n var mappedCatId = null;\n if (vm.selectedReplace.selectedMainOld) {\n if (vm.selectedReplace.selectedSub1Old) {\n if (vm.selectedReplace.selectedSub2Old) {\n existsCatId = vm.selectedReplace.selectedSub2Old.id;\n } else {\n existsCatId = vm.selectedReplace.selectedSub1Old.id;\n }\n } else {\n existsCatId = vm.selectedReplace.selectedMainOld.id;\n }\n }\n if (vm.selectedReplace.selectedMainNew) {\n if (vm.selectedReplace.selectedSub1New) {\n if (vm.selectedReplace.selectedSub2New) {\n mappedCatId = vm.selectedReplace.selectedSub2New.id;\n } else {\n mappedCatId = vm.selectedReplace.selectedSub1New.id;\n }\n } else {\n mappedCatId = vm.selectedReplace.selectedMainNew.id;\n }\n }\n if (existsCatId && mappedCatId) {\n var request = {\n moduleId: vm.moduleId,\n existsCategoryId: existsCatId,\n mappedCategoryId: mappedCatId,\n replaceable: false\n };\n api.module.replaceCategory(request)\n .then(function (res) {\n //api.module.reports(vm.moduleId)\n // .then(function (reports) {\n ModuleCategoryService.replaceCategory($scope, $state, $event, res);\n // }, function (err) {\n // console.log(err);\n // })\n }, function (err) {\n console.log(err);\n })\n }\n }\n\n\n\n function changeOldSelectCategory(item) {\n vm.selectedReplace.selectedMainOld = item;\n }\n\n function changeOldSelectSub1Category(item) {\n vm.selectedReplace.selectedSub1Old = item;\n }\n\n function changeOldSelectSub2Category(item) {\n vm.selectedReplace.selectedSub2Old = item;\n }\n\n function changeNewSelectCategory(item) {\n vm.selectedReplace.selectedMainNew = item;\n }\n\n function changeNewSelectSub1Category(item) {\n vm.selectedReplace.selectedSub1New = item;\n }\n\n function changeNewSelectSub2Category(item) {\n vm.selectedReplace.selectedSub2New = item;\n }\n //Replace category end\n\n function getCategories() {\n vm.loaders.replaceCategoryButton = true;\n refreshModels();\n api.module.categories(vm.moduleId)\n .then(function (r) {\n vm.loaders.replaceCategoryButton = false;\n vm.categories = r;\n getCategoryAliases();\n vm.deleteMainCategories = vm.categories.filter(function (item) {\n return !item.parent;\n });\n }, function (e) {\n vm.loaders.replaceCategoryButton = true;\n })\n vm.selectedItem = null;\n vm.searchText = null;\n }\n\n function categorySearch(query, cat) {\n var results = query ? vm.categories.filter(createFilterFor(query)) : vm.categories;\n if (cat) {\n results = results.filter(function (c) {\n return c.parent == cat.id;\n });\n } else {\n results = results.filter(function (c) {\n return !c.parent\n });\n }\n\n return results;\n }\n\n function createFilterFor(query) {\n var lowercaseQuery = query.toLocaleLowerCase('tr-TR');\n return function filterFn(category) {\n return ((vm.getCategoryTitle(category).toLocaleLowerCase('tr-TR')).indexOf(lowercaseQuery) != -1);\n };\n }\n\n function createFilterForCategoryAlias(query) {\n var lowercaseQuery = query.toLocaleLowerCase('tr-TR');\n return function filterFn(category) {\n return (category.name.toLocaleLowerCase('tr-TR').indexOf(lowercaseQuery) != -1);\n };\n }\n\n function searchCategories(query) {\n var results = query ? vm.categories.filter(createFilterForCategoryAlias(query)) : vm.categories;\n return results;\n }\n\n function addCategoryAlias() {\n if (!vm.aliasSelectedCategory || !vm.selectedCategoryAlias.enAlias || !vm.selectedCategoryAlias.trAlias) return;\n vm.saveCategoryAliasProcessing = true;\n var catName = vm.aliasSelectedCategory.parentModuleCategory ? vm.aliasSelectedCategory.parentModuleCategory.name + \" -> \" : \"\";\n catName += vm.aliasSelectedCategory.name;\n var categoryAliasRequest = {\n catId: vm.aliasSelectedCategory.id,\n catName: catName,\n enAlias: vm.selectedCategoryAlias.enAlias,\n trAlias: vm.selectedCategoryAlias.trAlias,\n enLocalVariableId: vm.selectedCategoryAlias.enLocalVariableId,\n trLocalVariableId: vm.selectedCategoryAlias.trLocalVariableId,\n }\n var languages = [\"tr\", \"en\"];\n var localVariables = [];\n for (var i = 0; i < languages.length; i++) {\n localVariables.push({\n id: vm.selectedCategoryAlias[languages[i] + 'LocalVariableId'],\n language: languages[i],\n groupCode: \"MODULE\",\n groupId: vm.module.id,\n itemCode: \"MODULECATEGORY\",\n itemId: vm.selectedCategoryAlias.catId,\n value: vm.selectedCategoryAlias[languages[i] + 'Alias']\n })\n }\n\n api.localization.saveLocalVariables(localVariables)\n .then(function (response) {\n if (response) {\n response.forEach(function (k) {\n if (k.language == \"tr\") { categoryAliasRequest.trLocalVariableId = k.id; vm.selectedCategoryAlias.trLocalVariableId = k.id; };\n if (k.language == \"en\") { categoryAliasRequest.enLocalVariableId = k.id; vm.selectedCategoryAlias.enLocalVariableId = k.id; };\n })\n vm.categoryAliases = vm.categoryAliases.filter(function (m) { return m.catId != categoryAliasRequest.catId })\n vm.categoryAliases.push(categoryAliasRequest)\n vm.saveCategoryAliasProcessing = false;\n }\n }, function (error) {\n vm.saveCategoryAliasProcessing = false;\n console.log(error);\n });\n }\n\n vm.aliasSelectedCategoryChange = function (item) {\n if (!item) return;\n vm.selectedCategoryAlias = vm.categoryAliases.filter(function (k) { return k.catId == item.id })[0];\n if (vm.selectedCategoryAlias == null) {\n vm.selectedCategoryAlias = {\n catId: item.id,\n catName: item.name,\n enAlias: \"\",\n trAlias: \"\"\n }\n }\n }\n\n function getCategoryAliases() {\n api.localization.findLocalVariables({\n groupCode: \"MODULE\",\n groupId: vm.module.id,\n itemCode: \"MODULECATEGORY\"\n })\n .then(function (r) {\n var categoryAliases = [];\n r.forEach(function (k) {\n var categoryAlias = categoryAliases.filter(function (m) { return m.catId == k.itemId; })[0]\n if (categoryAlias == null) {\n var category = vm.categories.filter(function (m) { return m.id == k.itemId })[0]\n var catName = category && category.parentModuleCategory ? category.parentModuleCategory.name + \" -> \" : \"\";\n catName += category.name;\n categoryAlias = {\n catId: k.itemId,\n catName: catName\n }\n categoryAliases.push(categoryAlias);\n }\n if (k.language == \"tr\") {\n categoryAlias['trAlias'] = k.value;\n categoryAlias['trLocalVariableId'] = k.id;\n } else if (k.language == \"en\") {\n categoryAlias['enAlias'] = k.value;\n categoryAlias['enLocalVariableId'] = k.id;\n }\n })\n vm.categoryAliases = categoryAliases;\n })\n }\n\n function removeCategoryAlias(alias) {\n api.localization.removeLocalVariables({\n groupCode: \"MODULE\",\n groupId: vm.module.id,\n itemCode: \"MODULECATEGORY\",\n itemId: alias.catId\n })\n .then(function (r) {\n vm.categoryAliases = vm.categoryAliases.filter(function (f) {\n return f.catId != alias.catId;\n })\n })\n }\n\n vm.getCategoryTitle = function (cat) {\n var title = cat.name;\n if (cat.localVariables) {\n var localVariable = cat.localVariables.filter(function (k) { return $translate.use() == k.language; })[0];\n if (localVariable) title = localVariable.value;\n }\n return title;\n }\n\n vm.colors = [\n [\"#1f77b4\", \"#fff\"],\n [\"#aec7e8\", \"#000\"],\n [\"#ff7f0e\", \"#000\"],\n [\"#ffbb78\", \"#000\"],\n [\"#2ca02c\", \"#fff\"],\n [\"#98df8a\", \"#000\"],\n [\"#d62728\", \"#fff\"],\n [\"#ff9896\", \"#000\"],\n [\"#9467bd\", \"#000\"],\n [\"#c5b0d5\", \"#000\"],\n [\"#8c564b\", \"#fff\"],\n [\"#c49c94\", \"#000\"],\n [\"#e377c2\", \"#000\"],\n [\"#f7b6d2\", \"#000\"],\n [\"#7f7f7f\", \"#fff\"],\n [\"#c7c7c7\", \"#000\"],\n [\"#bcbd22\", \"#000\"],\n [\"#dbdb8d\", \"#000\"],\n [\"#17becf\", \"#000\"],\n [\"#9edae5\", \"#000\"]\n ];\n\n vm.init = function () {\n \n };\n vm.init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.modules')\n .controller('AnalysisOverviewController', AnalysisOverviewController);\n\n /** @ngInject */\n function AnalysisOverviewController($q,$rootScope, $scope, $state, $translate,\n $stateParams, $log, $mdToast, $mdDialog,\n $mdMedia, $document, api, Upload, FileReader, ModuleService, SampleFactory, $$module, msNavigationSidebarService,$interval, $utils) {\n var vm = this;\n moment.locale('tr');\n vm.module = $$module;\n vm.type = $stateParams.type;\n vm.text = \"CLASSIFICATION.ANALYZE\";\n vm.uploadPermission = \"MODULE/\" + vm.type.toUpperCase() + \"/DATA/ADD\";\n vm.deletePermission = \"MODULE/\" + vm.type.toUpperCase() + \"/DATA/DELETE\";\n vm.hasData = true;\n vm.samples = [];\n vm.categories = [];\n vm.mainCategories = [];\n vm.moduleCategories = [];\n vm.moduleCategoryTree = [];\n vm.tags = [];\n vm.alltags = [];\n vm.clusterNumbers = [];\n vm.allclusters = [];\n vm.allclusterNumbers = [];\n vm.selectedItems = [];\n vm.selectedItemObj = [];\n vm.searching = false;\n vm.editing=false;\n vm.pagination = {\n current: 1,\n last: 1,\n count: 1\n };\n vm.hasHeader = false;\n vm.isOpen = false;\n vm.selectedMode = 'md-scale';\n\n vm.showNewSamples = false;\n vm.moduleId = $stateParams.id;\n\n vm.customCategories = [];\n vm.customTags = [];\n vm.clusters = [];\n \n vm.feedbackMode = false;\n\n vm.fileUploaded = false;\n vm.uploadCurrentTab = 0;\n vm.msScrollOptions = {\n suppressScrollX: true\n };\n vm.searchText = null;\n vm.allChecked = false;\n vm.dropifyConfig = {\n messages: {\n 'default': $translate.instant('SHARED.MESSAGES.DROPIFY_DEFAULT'),\n 'replace': $translate.instant('SHARED.MESSAGES.DROPIFY_REPLACE'),\n 'remove': $translate.instant('SHARED.MESSAGES.DROPIFY_REMOVE'),\n 'error': $translate.instant('SHARED.MESSAGES.DROPIFY_ERROR')\n }\n };\n\n $rootScope.$on('$translateChangeSuccess', function(event, current, previous) {\n vm.dropifyConfig = {\n messages: {\n 'default': $translate.instant('SHARED.MESSAGES.DROPIFY_DEFAULT'),\n 'replace': $translate.instant('SHARED.MESSAGES.DROPIFY_REPLACE'),\n 'remove': $translate.instant('SHARED.MESSAGES.DROPIFY_REMOVE'),\n 'error': $translate.instant('SHARED.MESSAGES.DROPIFY_ERROR')\n }\n };\n });\n //Data\n vm.file = null;\n vm.previewData = {};\n vm.previewLoaded = vm.previewData && vm.previewData.length > 0;\n vm.processing = false;\n vm.processMessage = \"\";\n vm.analysisUpdateDate = null;\n\n vm.getCategories = getCategories;\n\n vm.loaders = {\n addCategoryButton: false,\n replaceCategoryButton: false,\n deleteCategoryButton: false\n }\n\n vm.deleteMainCategorySearch = deleteMainCategorySearch;\n vm.deleteSub1CategorySearch = deleteSub1CategorySearch;\n vm.deleteSub2CategorySearch = deleteSub2CategorySearch;\n vm.changeNewSelectCategory = changeNewSelectCategory;\n vm.changeNewSelectSub1Category = changeNewSelectSub1Category\n vm.changeNewSelectSub2Category = changeNewSelectSub2Category;\n vm.changeDeleteSelectMainCategory = changeDeleteSelectMainCategory;\n vm.changeDeleteSelectSub1Category = changeDeleteSelectSub1Category;\n vm.changeDeleteSelectSub2Category = changeDeleteSelectSub2Category;\n\n vm.changeAddingSelectMainCategory = changeAddingSelectMainCategory;\n vm.changeAddingSelectSub1Category = changeAddingSelectSub1Category;\n vm.changeAddingSelectSub2Category = changeAddingSelectSub2Category;\n vm.changeAddingMainCategoryText = changeAddingMainCategoryText;\n vm.changeAddingSub1CategoryText = changeAddingSub1CategoryText;\n vm.checkSelectedItems =checkSelectedItems;\n vm.addCategorySearch = {\n mainCategory: null,\n sub1Category: null,\n sub2Category: null\n }\n\n //vm.deleteCategory = deleteCategory;\n vm.searchSamplesforSelecting=searchSamplesforSelecting;\n //Methods\n vm.saveSamples = saveSamples;\n vm.preview = showPreview;\n vm.saveSamplesFile = saveSamplesFile;\n vm.validateOptions = validateOptions;\n vm.search = search;\n vm.toggleCategoryFilter = toggleCategoryFilter;\n vm.toggleTagFilter = toggleTagFilter;\n vm.toggleClusterFilter = toggleClusterFilter;\n vm.toggleClusterNoFilter = toggleClusterNoFilter;\n vm.toggleEditMode = toggleEditMode;\n vm.toggleEditing = toggleEditing;\n vm.resetFilters = resetFilters;\n vm.setCurrentPage = setCurrentPage;\n vm.toggleHeader = toggleHeader;\n vm.removeColumn = removeColumn;\n vm.removeCategory = removeCategory;\n vm.categorySearch = categorySearch;\n vm.queryCategorySearch = queryCategorySearch;\n vm.toggleCheck = toggleCheck;\n vm.toggleCheckAll = toggleCheckAll;\n vm.removeSelectedSamples = removeSelectedSamples;\n vm.downloadModuleClassification = downloadModuleClassification;\n vm.findSimilarity = findSimilarity;\n vm.categoryAddingSearch =categoryAddingSearch;\n vm.checkAddCategoryButton=checkAddCategoryButton;\n vm.deleteSampleById =deleteSampleById;\n vm.addCategory =addCategory;\n vm.analyze=analyze;\n vm.isTrainable=isTrainable;\n //vm.checkStatus = checkStatus;\n vm.analyzing = false;\n vm.multiRemoveCategory=multiRemoveCategory;\n vm.multiAddCategory = multiAddCategory;\n\n \n\n //Train\n function analyze($event) {\n ModuleService.basicConfirmDialog($scope, $event, $translate.instant('CLASSIFICATION.CONFIRM.ANALYZE_TITLE'), $translate.instant('CLASSIFICATION.CONFIRM.ANALYZE_BODY'), \"app/main/apps/modules/services/basic-confirm-dialog-blue.html\")\n .then(function (response) {\n if (response) {\n var moduleId = $stateParams.id;\n vm.analyzing = true;\n api.samples.similarity(moduleId)\n .then(function (response) {\n console.log(response)\n vm.analysisStatus = response.paramValue;\n //vm.checkStatus();\n vm.check();\n //vm.analyzing = false;\n vm.enable = !isDisable();\n },\n function (response) {\n //vm.analyzing = false;\n $log.error(response);\n });\n }\n })\n };\n\n\n /*function checkStatus(){\n api.samples.checkStatus()\n .then(function(response){\n vm.analyzing = response;\n console.log(response)\n if(!vm.analyzing){\n vm.text= \"CLASSIFICATION.ANALYZE\";\n }else{\n vm.text = \"CLASSIFICATION.ANALYZING\";\n }\n },\n function(response){\n $log.error(response);\n });\n }*/\n\n function isTrainable() {\n switch (vm.type) {\n case \"Classification\":\n case \"Clustering\":\n case \"TopicModeling\":\n case \"RootCause\":\n vm.trainable = true;\n break;\n default:\n vm.trainable = false;\n break;\n }\n }\n\n isTrainable();\n //checkStatus();\n getLatestAnalysis();\n\n function isDisable() {\n if (vm.analysisStatus === \"1\") return true;\n if (vm.analysisStatus === \"2\") return true;\n }\n\n function getLatestAnalysis() {\n var moduleId = $stateParams.id;\n if (!moduleId) return;\n if (!vm.trainable) return;\n api.samples.findLatestAnalysis(moduleId)\n .then(function (response) {\n //$log.log(response);\n vm.analysisStatus = response ? response.paramValue : \"0\";\n console.log(response)\n var time = moment(response.updateDate).toDate().toLocaleString(\"en-US\", { timeZone: \"Europe/Istanbul\" });\n //vm.analysisUpdateDate = time;\n switch (vm.analysisStatus) {\n case \"-1\":\n vm.analysisUpdateDate = $translate.instant('CLASSIFICATION.ERROR_DATE') + \": \" + time;\n vm.analyzing = false;\n vm.processMessage = \"\";\n vm.text = \"CLASSIFICATION.ERROR\";\n break;\n case \"1\":\n vm.analyzing = true;\n vm.processMessage = \"\";\n vm.analysisUpdateDate = \"\";\n vm.text = \"CLASSIFICATION.QUEUEING\";\n vm.check();\n break;\n case \"2\":\n vm.analyzing = true;\n vm.analysisUpdateDate = $translate.instant('CLASSIFICATION.START_DATE') + \": \" + time;\n vm.getProcessTraces(response.jobTypeGroupCode);\n if (vm.processMessage == \"\") {\n vm.text = \"CLASSIFICATION.ANALYZING\";\n } else {\n vm.text = \"CLASSIFICATION.COMPLETED\";\n }\n vm.check();\n break;\n default:\n vm.analyzing = false;\n vm.processMessage = \"\";\n vm.text = \"CLASSIFICATION.ANALYZE\";\n vm.analysisUpdateDate = $translate.instant('CLASSIFICATION.END_DATE') + \": \" + time;\n break;\n\n }\n },\n function (response) {\n $log.error(response);\n });\n };\n\n //check\n var stop;\n vm.check = function () {\n // Don't start a new fight if we are already fighting\n if (angular.isDefined(stop)) return;\n\n stop = $interval(function () {\n if (vm.analysisStatus === \"1\" || vm.analysisStatus === \"2\") {\n getLatestAnalysis();\n } else {\n vm.stopCheck();\n }\n vm.enable = !isDisable();\n }, 10000);\n };\n\n vm.stopCheck = function () {\n if (angular.isDefined(stop)) {\n $interval.cancel(stop);\n if (stop.$$state.status === \"2\") {\n if (vm.analysisStatus === \"0\") {\n vm.analyzing = false;\n } else if (vm.analysisStatus === \"-1\") {\n vm.analyzing = false;\n }\n }\n stop = undefined;\n }\n };\n\n\n vm.getProcessTraces = function (requestId) {\n api.report.getProcesses(requestId)\n .then(function (r, status) {\n vm.processMessage = r.length != 0 ? r[0].message : \"\";\n }, function (e, status) {\n vm.processMessage = \"\";\n })\n }\n\n \n vm.filters = {\n search: '',\n cattag: '',\n categoryId: null,\n tag: '',\n clusterId: null,\n clusterNo: null\n };\n vm.filtersDefaults = angular.copy(vm.filters);\n vm.showAll = true;\n\n vm.order = '';\n vm.orderDescending = false;\n\n vm.colors = ['blue-bg', 'blue-grey-bg', 'orange-bg', 'pink-bg', 'purple-bg'];\n $scope.colors = [\"#800026\", \"#bd0026\", \"#e31a1c\", \"#fc4e2a\", \"#fd8d3c\", \"#feb24c\", \"#fed976\"];\n \n \n\n function toggleCategoryFilter(item) {\n vm.filters.categoryId = item.id;\n vm.pagination.current = 1;\n searchSamples();\n };\n\n function toggleTagFilter(item) {\n vm.filters.tag = item.name;\n vm.pagination.current = 1;\n searchSamples();\n };\n\n function toggleClusterFilter(item) {\n vm.filters.clusterId = item.id;\n vm.pagination.current = 1;\n searchSamples();\n };\n function toggleClusterNoFilter(item) {\n vm.filters.clusterNo = item.name;\n vm.pagination.current = 1;\n searchSamples();\n };\n function toggleEditMode() {\n //vm.pagination.current = 1;\n searchSamples();\n }\n function toggleCheckAll($event) {\n vm.allChecked = (!vm.allChecked);\n vm.samples.forEach(function (item) {\n item.isChecked = vm.allChecked;\n });\n }\n function toggleEditing() {\n vm.editing = (!vm.editing);\n }\n function refreshModels() {\n vm.moduleCategories = [];\n vm.deleteMainCategories = [];\n vm.deleteSub1Categories = [];\n vm.deleteSub2Categories = [];\n vm.selectedDeleteMainCategory = null;\n vm.selectedDeleteSub1Category = null;\n vm.selectedDeleteSub2Category = null;\n vm.searchDeleteMainCategory = null;\n vm.searchDeleteSub1Category = null;\n vm.searchDeleteSub2Category = null;\n vm.addMainCategory = null;\n vm.addSub1Category = null;\n vm.addSub2Category = null;\n vm.addCategorySearch.mainCategory = null;\n vm.addCategorySearch.sub1Category = null;\n vm.addCategorySearch.sub2Category = null;\n vm.addCategoryRequest = {};\n vm.deleteCategoryRequest = {};\n vm.selectedReplace = {\n selectedMainOld: null,\n selectedSub1Old: null,\n selectedSub2Old: null,\n selectedMainNew: null,\n selectedSub1New: null,\n selectedSub2New: null\n }\n \n }\n function categorySearch(query, cat) {\n var results = query ? vm.moduleCategoryTree.filter(createFilterFor(query)) : vm.moduleCategoryTree;\n if (cat) {\n results = results.filter(function (c) {\n return c.parent == cat.id;\n });\n } else {\n results = results.filter(function (c) {\n return !c.parent\n });\n }\n\n return results;\n }\n function categoryAddingSearch(query, cat) {\n var results = query ? cat.children.filter(createFilterFor(query)) : cat.children;\n if (cat) {\n results = results.filter(function (c) {\n return c.parent == cat.id;\n });\n } else {\n results = [];\n }\n return results;\n }\n\n vm.checkChildrenCategories = checkChildrenCategories;\n\n function checkChildrenCategories(category) {\n /*if (category && category.id) {\n var children = vm.moduleCategories.filter(function (c) {\n return c.parent != null && c.parent == category.id;\n });\n if (children && children.length > 0)\n return true;\n }\n return false;*/\n\n if (category && category.id) \n if (category.children!=null && category.children.length > 0)\n return true;\n \n return false;\n\n \n }\n\n function getCategories() {\n var def = $q.defer();\n vm.loaders.replaceCategoryButton = true;\n refreshModels();\n api.module.categories(vm.moduleId)\n .then(function (r) {\n vm.loaders.replaceCategoryButton = false;\n vm.moduleCategories = r;\n vm.deleteMainCategories = vm.moduleCategories.filter(function (item) {\n return !item.parent;\n })\n def.resolve(data);\n }, function (e) {\n vm.loaders.replaceCategoryButton = true;\n def.reject(false);\n })\n vm.selectedItem = null;\n vm.searchText = null;\n return def.promise;\n }\n\n function getCategoryTree() {\n api.module.categoryTree(vm.moduleId)\n .then(function (response) {\n vm.moduleCategoryTree = response;\n }, function (e) {\n $log.error(e);\n })\n }\n\n function changeNewSelectCategory(item) {\n vm.selectedReplace.selectedMainNew = item;\n }\n\n function changeNewSelectSub1Category(item) {\n vm.selectedReplace.selectedSub1New = item;\n }\n\n function changeNewSelectSub2Category(item) {\n vm.selectedReplace.selectedSub2New = item;\n }\n function changeDeleteSelectMainCategory(item) {\n vm.selectedDeleteMainCategory = item;\n vm.deleteSub1Categories = vm.moduleCategories.filter(function (cat) {\n return cat.parent == vm.selectedDeleteMainCategory.id;\n })\n }\n\n function changeDeleteSelectSub1Category(item) {\n vm.selectedDeleteSub1Category = item;\n vm.deleteSub2Categories = vm.moduleCategories.filter(function (cat) {\n return cat.parent == vm.selectedDeleteSub1Category.id;\n })\n }\n\n function changeDeleteSelectSub2Category(item) {\n vm.selectedDeleteSub2Category = item;\n }\n\n function deleteMainCategorySearch(query) {\n var results = query ? vm.deleteMainCategories.filter(createFilterFor(query)) : vm.deleteMainCategories;\n return results;\n }\n\n function deleteSub1CategorySearch(query) {\n var results = query ? vm.deleteSub1Categories.filter(createFilterFor(query)) : vm.deleteSub1Categories;\n return results;\n }\n\n function deleteSub2CategorySearch(query) {\n var results = query ? vm.deleteSub2Categories.filter(createFilterFor(query)) : vm.deleteSub2Categories;\n return results;\n }\n \n function changeAddingSelectMainCategory(item) {\n vm.addMainCategory = item;\n vm.addCategorySearch.sub1Category = null;\n vm.addSub1Category = null;\n vm.addCategorySearch.sub2Category = null;\n vm.addSub2Category = null;\n }\n\n function changeAddingSelectSub1Category(item) {\n vm.addSub1Category = item;\n vm.addCategorySearch.sub2Category = null;\n vm.addSub2Category = null;\n }\n\n function changeAddingSelectSub2Category(item) {\n vm.addSub2Category = item;\n }\n\n function changeAddingMainCategoryText(item) {\n if (!item || item.length == 0) {\n vm.addCategorySearch.sub1Category = null;\n vm.addSub1Category = null;\n vm.addCategorySearch.sub2Category = null;\n vm.addSub2Category = null;\n }\n }\n\n function changeAddingSub1CategoryText(item) {\n if (!item || item.length == 0) {\n vm.addCategorySearch.sub2Category = null;\n vm.addSub2Category = null;\n }\n }\n function checkAddCategoryButton() {\n if (vm.addMainCategory && !vm.checkChildrenCategories(vm.addMainCategory)) {\n return true;\n }\n if (vm.addMainCategory && vm.addSub1Category && !vm.checkChildrenCategories(vm.addSub1Category)) {\n return true;\n }\n\n if (vm.addMainCategory && vm.addSub1Category && vm.addSub2Category ) {\n return true;\n }\n\n return false;\n\n }\n\n\n function resetFilters() {\n vm.filters = {\n search: '',\n cattag: '',\n categoryId: null,\n tag: '',\n clusterId: null,\n clusterNo: null\n };\n vm.pagination.current = 1;\n searchSamples();\n }\n\n //Module\n function saveSamples() {\n api.samples.save(vm.moduleId, vm.newsamples)\n .then(function (response) {\n vm.newsamples = [];\n $state.go('app.classification.samples', {\n id: vm.moduleId\n });\n },\n function (response) {\n $log.error(response);\n });\n }\n\n function search() {\n vm.pagination.current = 1;\n searchSamples();\n }\n\n\n function downloadModuleClassification($event) {\n var copyFilters = vm.filters.facets;\n var json = JSON.stringify(copyFilters, function (key, value) {\n if (key === \"$$hashKey\") {\n return undefined;\n }\n return value;\n });\n var data = {\n moduleId: vm.module.id,\n categoryId: vm.filters.categoryId > 0 ? vm.filters.categoryId.toString() : null,\n query: vm.filters.search ? vm.filters.search : null,\n tag: vm.filters.tag ? vm.filters.tag : null\n };\n downloadJquery('/api/module/export', data, 'POST');\n }\n\n function downloadJquery(url, data, method) {\n if (url && data) {\n data = typeof data === 'string' ? data : jQuery.param(data);\n var inputs = '';\n jQuery.each(data.split('&'), function () {\n var pair = this.split('=');\n inputs += '';\n });\n jQuery('
' + inputs + '
')\n .appendTo('body').submit().remove();\n }\n };\n\n function searchSamples(init) {\n // You can do an API call here to send the form to your server\n vm.searching = true;\n vm.selectedItem =[];\n vm.selectedItemObj = [];\n vm.filters.search = $utils.fixQueryQuotes(vm.filters.search);\n var query = {\n text: vm.filters.search,\n moduleId: vm.moduleId,\n categoryId: vm.filters.categoryId ? vm.filters.categoryId : null,\n tag: vm.filters.tag,\n clusterId: vm.filters.clusterId,\n clusterNo: vm.filters.clusterNo,\n start: (vm.pagination.current - 1) * 10,\n rows: 10\n };\n\n api.samples.search(query)\n .then(function (response) {\n vm.catPages = {};\n vm.clickedCats = {};\n vm.samples = response.samples;\n vm.categories.forEach(function (category, index) {\n recursiveDeleteCategoriesFromSideNav(category, index, 'categories');\n });\n msNavigationSidebarService.deleteItem('categories');\n msNavigationSidebarService.deleteItem('tags');\n msNavigationSidebarService.deleteItem('nominals');\n msNavigationSidebarService.deleteItem('clusterNumbers');\n \n vm.categories = response.categories;\n vm.tags = response.tags;\n vm.clusters = response.clusters;\n vm.clusterNumbers = response.clusterNumbers;\n vm.pagination.count = response.count;\n vm.pagination.last = calculatePageCounts(response.count);\n vm.pagination.totalNumber = Math.ceil(vm.pagination.count / 10);\n vm.pagination.number = vm.pagination.current;\n vm.searching = false;\n if(init==true){\n vm.allclusterNumbers = vm.clusterNumbers;\n vm.alltags = vm.tags;\n vm.moduleCategories = vm.categories\n setCategoriesToSideNav(vm.moduleCategories);\n\n }else{\n setCategoriesToSideNav(vm.moduleCategories);\n }\n },\n function (response) {\n console.log(\"err\");\n console.log(response);\n $log.error(response);\n vm.searching = false;\n });\n }\n\n vm.catPages = {};\n\n function moreAndMore(params, flag) {\n var deferred = $q.defer();\n vm.catPages[params.id] = vm.catPages[params.id] ? vm.catPages[params.id] + 1 : params.flag ? 0 : 1;\n vm.filters.search = $utils.fixQueryQuotes(vm.filters.search);\n var query = {\n text: vm.filters.search,\n moduleId: vm.moduleId,\n categoryId: vm.filters.categoryId ? vm.filters.categoryId : null,\n tag: vm.filters.tag,\n nominalAttributes: vm.filters.nominalAttributes,\n clusterId: vm.filters.clusterId,\n start: (vm.pagination.current - 1) * 10,\n rows: 10\n };\n api.samples.searchPageable(query, params.id, params.search, vm.catPages[params.id])\n .then(function (response) {\n if (!params.id) {\n vm.categories = vm.categories.concat(response);\n response.forEach(function (category, index) {\n recursiveSetCategoriesToSideNav(category, index, 'categories');\n });\n deferred.resolve(response);\n } else {\n var category = vm.categories.filter(function (k) { return k.id == params.id; })[0];\n vm.categories = vm.categories.concat(response);\n if (category) {\n if (!category.children) category.children = [];\n category.children = category.children.concat(response);\n }\n var parent = \"categories\"\n var cat = vm.categories.filter(function (m) { return m.id == params.parent })[0];\n while (cat) {\n parent = parent + \".\" + cat.id\n cat = vm.categories.filter(function (m) { return m.id == cat.parent })[0];\n }\n response.forEach(function (cat, index) {\n recursiveSetCategoriesToSideNav(cat, index, parent + \".\" + params.id);\n })\n deferred.resolve(response);\n }\n },\n function (response) {\n $log.error(response);\n vm.searching = false;\n });\n return deferred.promise;\n }\n\n function searchCategories(params) {\n var query = {\n text: vm.filters.search,\n moduleId: vm.moduleId,\n categoryId: vm.filters.categoryId ? vm.filters.categoryId : null,\n tag: vm.filters.tag,\n nominalAttributes: vm.filters.nominalAttributes,\n clusterId: vm.filters.clusterId,\n start: (vm.pagination.current - 1) * 10,\n rows: 10\n };\n api.samples.searchPageable(query, params.id, params.search, 0)\n .then(function (response) {\n if (!params.id) {\n vm.catPages = {};\n vm.clickedCats = {};\n if (vm.categories && vm.categories.length > 0) {\n vm.categories.forEach(function (category, index) {\n recursiveClearSidenavCategories(category, 'categories');\n });\n }\n vm.categories = response;\n if (vm.categories && vm.categories.length > 0) {\n vm.categories.forEach(function (category, index) {\n recursiveSetCategoriesToSideNav(category, index, 'categories');\n });\n }\n } else {\n delete vm.catPages[params.id];\n delete vm.clickedCats[params.id];\n var parent = \"categories\"\n var cat = vm.categories.filter(function (m) { return m.id == params.parent })[0];\n while (cat) {\n parent = parent + \".\" + cat.id\n cat = vm.categories.filter(function (m) { return m.id == cat.parent })[0];\n }\n var clearCategories = vm.categories.filter(function (m) { return m.parent == params.id });\n if (clearCategories && clearCategories.length > 0) {\n clearCategories.forEach(function (category, index) {\n recursiveClearSidenavCategories(category, parent + \".\" + params.id);\n });\n }\n vm.categories = vm.categories.filter(function (m) { return m.parent != params.id });\n vm.categories = vm.categories.concat(response);\n\n if (response && response.length > 0) {\n response.forEach(function (category, index) {\n recursiveSetCategoriesToSideNav(category, index, parent + \".\" + params.id);\n });\n }\n }\n\n\n },\n function (response) {\n $log.error(response);\n });\n }\n\n function searchSamplesforSelecting() {\n // You can do an API call here to send the form to your server\n var query = {\n text: vm.filters.search,\n moduleId: vm.moduleId,\n categoryId: vm.filters.categoryId ? vm.filters.categoryId : null,\n tag: vm.filters.tag,\n clusterId: vm.filters.clusterId,\n clusterNo: vm.filters.clusterNo,\n };\n\n api.samples.search(query)\n .then(function (response) {\n console.log(response);\n vm.samplesforSelect = response.samples;\n },\n function (response) {\n console.log(\"err\");\n console.log(response);\n $log.error(response);\n });\n }\n function findSimilarity() {\n // You can do an API call here to send the form to your server\n vm.searching = true;\n var query = {\n text: vm.filters.search,\n moduleId: vm.moduleId,\n categoryId: vm.filters.categoryId ? vm.filters.categoryId : null,\n tag: vm.filters.tag,\n clusterId: vm.filters.clusterId,\n start: (vm.pagination.current - 1) * 10,\n rows: 10\n };\n\n api.samples.search(query)\n .then(function (response) {\n vm.samples = response.samples;\n vm.categories = response.categories;\n vm.tags = response.tags;\n vm.clusters = response.clusters;\n vm.pagination.count = response.count;\n vm.pagination.last = calculatePageCounts(response.count);\n vm.searching = false;\n setCategoriesToSideNav();\n },\n function (response) {\n $log.error(response);\n vm.searching = false;\n });\n }\n function toggleHeader(value) {\n var val = value;\n preview(vm.file);\n }\n\n function showPreview() {\n vm.hasHeader = false;\n preview(vm.file);\n }\n\n function preview(file) {\n if (!file) return;\n vm.previewData = [];\n vm.processing = true;\n SampleFactory.preview($scope, vm.file, vm.hasHeader)\n .then(function (data) {\n vm.previewData = data;\n renderPreview();\n vm.previewLoaded = true;\n vm.processing = false;\n vm.uploadCurrentTab = 1;\n }, function (reason) {\n $log.error('Failed: ' + reason);\n vm.uploadCurrentTab = 0;\n });\n };\n\n function renderPreview() {\n if (vm.customCategories && vm.previewData) {\n var columns = vm.previewData.columns;\n var data = vm.previewData.data;\n for (var i in vm.customCategories) {\n var item = vm.customCategories[i];\n var column = {\n name: item.name,\n type: 1,\n readonly: true,\n custom: true,\n value: item\n };\n\n var exists = vm.previewData.columns.some(function (element) {\n return element.name == column.name;\n });\n\n if (!exists)\n vm.previewData.columns.push(column);\n }\n\n //Tags\n for (var i in vm.customTags) {\n var item = vm.customTags[i];\n var column = {\n name: item,\n type: 3,\n readonly: true,\n custom: true,\n value: item\n };\n\n var exists = vm.previewData.columns.some(function (element) {\n return element.name == column.name;\n });\n\n if (!exists)\n vm.previewData.columns.push(column);\n }\n }\n }\n\n function removeColumn(event, column) {\n var index = null;\n var type = null;\n for (var i in vm.previewData.columns) {\n var item = vm.previewData.columns[i];\n if (item.name == column.name) {\n index = i;\n type = item.type;\n break;\n }\n }\n\n if (index)\n vm.previewData.columns.splice(index, 1);\n\n switch (type) {\n case 1:\n index = null;\n for (var i in vm.customCategories) {\n var item = vm.customCategories[i];\n if (item.name == column.name) {\n index = i;\n break;\n }\n }\n if (index)\n vm.customCategories.splice(index, 1);\n break;\n case 3:\n index = null;\n for (var i in vm.customTags) {\n var item = vm.customTags[i];\n if (item == column.name) {\n index = i;\n break;\n }\n }\n if (index)\n vm.customTags.splice(index, 1);\n break;\n }\n\n renderPreview();\n }\n\n //Samples File Save\n function saveSamplesFile(file) {\n var options = {\n categories: [],\n contents: [],\n tags: [],\n hasHeaders: vm.hasHeader,\n customCategories: vm.customCategories,\n customTags: vm.customTags,\n delimiter: vm.previewData.delimiter\n };\n\n for (var i in vm.previewData.columns) {\n var column = vm.previewData.columns[i];\n if (!column.custom) {\n if (column.type === '1') {\n options.categories.push(i);\n } else if (column.type === '2') {\n options.contents.push(i);\n } else if (column.type === '3') {\n options.tags.push(i);\n }\n }\n }\n\n if (!validateOptions(options)) {\n var message = \"The file must have one column with the text sample and a second column with the category or select a default category.\";\n var parent = $document[0].querySelector('#toastBounds');\n var toast = $mdToast.simple()\n .content(message)\n .action('OK')\n .highlightAction(true)\n .hideDelay(0)\n .position('fit')\n .theme(\"error-toast\")\n .parent(parent);\n\n $mdToast.show(toast);\n angular.forEach(vm.uploadSampleFileForm.$error.required, function (field) {\n field.$setDirty();\n });\n return;\n }\n\n vm.uploadSampleFileForm.$setPristine();\n vm.uploadSampleFileForm.$setUntouched();\n vm.processing = true;\n Upload.upload({\n url: api.samples.url + '/upload',\n data: {\n moduleId: vm.moduleId,\n file: file,\n options: options\n }\n }).then(function (resp) {\n $log.log('Success ' + resp.config.data.file.name + 'uploaded. Response: ' + resp.data);\n vm.processing = false;\n vm.file = null;\n vm.previewData = {};\n vm.uploadCurrentTab = 0;\n $state.go('app.classification.samples', {\n id: vm.moduleId\n }, {\n reload: true\n });\n }, function (resp) {\n $log.error('Error status: ' + resp.status);\n vm.processing = false;\n }, function (evt) {\n var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);\n $log.log('progress: ' + progressPercentage + '% ' + evt.config.data.file.name);\n });\n }\n\n function validateOptions(options) {\n if (options.contents.length <= 0) return false;\n\n if (options.contents.length > 0) {\n if (options.categories.length <= 0) {\n if (options.customCategories.lenght <= 0) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n function calculatePageCounts(count) {\n var l = 10;\n var lastpage = Math.ceil(count / l);\n return lastpage;\n }\n\n function setCurrentPage(page) {\n if (page < 1)\n page = 1;\n var row = 10;\n vm.pagination.totalNumber = Math.ceil(vm.pagination.count / row);\n if (page > vm.pagination.totalNumber)\n page = vm.pagination.totalNumber;\n\n if (page > 0) {\n vm.pagination.current = page;\n searchSamples();\n }\n\n }\n\n\n vm.showAddCategoryDialog = function (ev) {\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'SamplesCategoryDialogController as vm',\n templateUrl: 'app/main/apps/classification/views/samples/upload-add-category.html',\n parent: angular.element(document.body),\n targetEvent: ev,\n clickOutsideToClose: true,\n fullscreen: useFullScreen\n })\n .then(function (answer) {\n vm.customCategories.push(answer);\n $log.log('You said the information was \"' + angular.toJson(answer, false) + '\".');\n renderPreview();\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n };\n\n vm.showAddTagDialog = function (ev) {\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'SamplesTagDialogController as vm',\n templateUrl: 'app/main/apps/classification/views/samples/upload-add-tag.html',\n parent: angular.element(document.body),\n targetEvent: ev,\n clickOutsideToClose: true,\n fullscreen: useFullScreen\n })\n .then(function (answer) {\n vm.customTags.push(answer);\n $log.log('You said the information was \"' + angular.toJson(answer, false) + '\".');\n renderPreview();\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n };\n\n vm.showAddSampleDialog = function (ev) {\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'AddClassificationSampleDialogController as vm',\n templateUrl: 'app/main/apps/classification/views/samples/add-sample.html',\n parent: angular.element(document.body),\n targetEvent: ev,\n clickOutsideToClose: true,\n fullscreen: useFullScreen\n })\n .then(function (answer) {\n vm.newsamples.push(answer);\n $log.log('You said the information was \"' + angular.toJson(answer, false) + '\".');\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n };\n\n // Delete Sample Data\n vm.deleteSampleData = function ($event) {\n var query = {\n text: vm.filters.search,\n moduleId: vm.moduleId,\n categoryId: vm.filters.categoryId ? vm.filters.categoryId : null,\n tag: vm.filters.tag,\n clusterNo: vm.filters.clusterNo\n };\n api.samples.delete(query)\n .then(function (response) {\n ModuleService.deleteSampleData($scope, $state, $event, response);\n },\n function (response) {\n $log.error(response);\n });\n //vm.filters.search = null;\n //vm.filters.categoryId = null;\n //vm.filters.tag = null;\n //vm.filters.clusterId = null;\n }\n function deleteSampleById($event) {\n var selectedItems = vm.samples\n .filter(function(doc){return doc.isChecked;});\n var selectedItemIds = selectedItems\n .map(function(doc){ return doc.id;});\n \n var query = {\n text: vm.filters.search,\n moduleId: vm.moduleId,\n categoryId: vm.filters.categoryId ? vm.filters.categoryId : null,\n tag: vm.filters.tag,\n clusterId: vm.filters.clusterId,\n documentIds: selectedItemIds\n };\n api.samples.deleteSamplesById(query)\n .then(function (response) {\n ModuleService.deleteSampleDataById($scope, $state, $event, response)\n .then(function (result) {\n if (result) {\n searchSamples();\n }\n });\n },\n function (response) {\n $log.error(response);\n });\n //vm.filters.search = null;\n //vm.filters.categoryId = null;\n //vm.filters.tag = null;\n //vm.filters.clusterId = null;\n }\n function addCategory(event, item) {\n //event.target.disabled = true;\n var categoryId;\n if (vm.addSub2Category) {\n categoryId = vm.addSub2Category.id;\n } else if (vm.addSub1Category) {\n categoryId = vm.addSub1Category.id;\n } else if (vm.addMainCategory) {\n categoryId = vm.addMainCategory.id;\n }\n var req = {\n documentId: item.id,\n categoryId: categoryId,\n moduleId: vm.moduleId\n };\n api.samples.addCategoryDocumentToModule(req)\n .then(function (res) {\n console.log(res);\n vm.samples[vm.samples.indexOf(item)] = res.samples[0];\n }, function (err) {\n console.log(err);\n })\n }\n function multiAddCategory(event) {\n //event.target.disabled = true;\n var selectedItems = vm.samples\n .filter(function(doc){return doc.isChecked;});\n var selectedItemIds = selectedItems\n .map(function(doc){ return doc.id;});\n var selectedIdIndexes = [];\n vm.samples\n .forEach(function(doc,index){\n if(doc.isChecked){\n var result = {\n id:doc.id,\n index:index\n }\n selectedIdIndexes.push(result);\n }\n });\n \n var categoryId;\n if (vm.addSub2Category) {\n categoryId = vm.addSub2Category.id;\n } else if (vm.addSub1Category) {\n categoryId = vm.addSub1Category.id;\n } else if (vm.addMainCategory) {\n categoryId = vm.addMainCategory.id;\n }\n var req = {\n documentId: selectedItemIds[0],\n categoryId: categoryId,\n moduleId: vm.moduleId,\n documentIds: selectedItemIds\n };\n api.samples.addCategoryDocumentToModule(req)\n .then(function (res) {\n console.log(res);\n var i =0\n for (var index in res.samples) {\n var item = res.samples[index]\n var result = selectedIdIndexes.filter(function (c) {\n return c.id === item.id;\n });\n if(result && result.length > 0){\n item[\"isChecked\"] = true;\n vm.samples[result[0].index] = item;\n }\n \n }\n vm.selectedItems = [];\n vm.selectedItemObj = [];\n \n }, function (err) {\n vm.selectedItems = [];\n vm.selectedItemObj = [];\n console.log(err);\n })\n }\n function removeCategory(req, event, item, categories,$index) {\n var category = categories[categories.length-1]\n var categoryId;\n if (vm.selectedDeleteSub2Category) {\n categoryId = vm.selectedDeleteSub2Category.id;\n } else if (vm.selectedDeleteSub1Category) {\n categoryId = vm.selectedDeleteSub1Category.id;\n } else if (vm.selectedDeleteMainCategory) {\n categoryId = vm.selectedDeleteMainCategory.id;\n }\n categoryId = category.id;\n var req = {\n moduleId: vm.moduleId,\n categoryId: categoryId,\n documentId: item.id\n }\n api.samples.deleteCategoryDocumentFromModule(req)\n .then(function (res) {\n vm.samples[vm.samples.indexOf(item)] = res.samples[0];\n console.log(res);\n }, function (err) {\n console.log(err);\n });\n }\n this.editDocument = function ($scope, $event, pagination, api, categories) {\n\n showEditDocumentDialog($scope, $event, \"aa\", pagination, api, categories)\n .then(function (answer) {\n if (!answer) return;\n\n var data = {\n id: report.id\n };\n\n });\n }\n function checkSelectedItems(){\n var selectedItems = vm.samples\n .filter(function(doc){return doc.isChecked;});\n if(selectedItems.length>0){\n return true;\n }else{\n return false;\n }\n }\n function multiRemoveCategory($event) {\n //vm.loaders.deleteCategoryButton = true;\n //req.processing = true;\n var selectedItems = vm.samples\n .filter(function(doc){return doc.isChecked;});\n var selectedItemIds = selectedItems\n .map(function(doc){ return doc.id;});\n var selectedIdIndexes = [];\n vm.samples\n .forEach(function(doc,index){\n if(doc.isChecked){\n var result = {\n id:doc.id,\n index:index\n }\n selectedIdIndexes.push(result);\n }\n });\n \n var categoryId;\n if (vm.addSub2Category) {\n categoryId = vm.addSub2Category.id;\n } else if (vm.addSub1Category) {\n categoryId = vm.addSub1Category.id;\n } else if (vm.addMainCategory) {\n categoryId = vm.addMainCategory.id;\n }\n var req = {\n moduleId: vm.moduleId,\n categoryId: categoryId,\n documentId: selectedItemIds[0],\n documentIds: selectedItemIds\n }\n api.samples.deleteCategoryDocumentFromModule(req)\n .then(function (res) {\n console.log(res);\n var i =0\n for (var index in res.samples) {\n var item = res.samples[index]\n var result = selectedIdIndexes.filter(function (c) {\n return c.id === item.id;\n });\n if(result && result.length > 0){\n item[\"isChecked\"] = true;\n vm.samples[result[0].index] = item;\n }\n \n }\n vm.selectedItems = [];\n vm.selectedItemObj = [];\n \n }, function (err) {\n vm.selectedItems = [];\n vm.selectedItemObj = [];\n console.log(err);\n })\n }\n // Delete Category\n vm.deleteCategory = function ($event, category) {\n ModuleService.deleteCategory($scope, $state, $event, vm.module, category);\n }\n\n // Delete Category Data\n vm.deleteCategoryData = function ($event, category) {\n ModuleService.deleteCategoryData($scope, $state, $event, vm.module, category);\n }\n\n //\n\n function queryCategorySearch(query) {\n var results = query ? vm.module.moduleCategories.filter(createFilterFor(query)) : [];\n return results;\n }\n\n\n /**\n * Create filter function for a query string\n */\n function createFilterFor(query) {\n var lowercaseQuery = angular.lowercase(query);\n return function filterFn(item) {\n var lowercaseName = angular.lowercase(vm.getCategoryTitle(item));\n return (lowercaseName.indexOf(lowercaseQuery) === 0);\n };\n }\n\n function toggleCheck(item, $event) {\n }\n\n\n function removeSelectedSamples($event) {\n if (vm.allChecked) {\n vm.newsamples = [];\n } else {\n var i;\n for (i = vm.newsamples.length - 1; i >= 0; i -= 1) {\n if (vm.newsamples[i].checked) {\n vm.newsamples.splice(i, 1);\n }\n }\n }\n vm.allChecked = false;\n }\n function removeSelectedCategories($event) {\n if (vm.allChecked) {\n vm.newsamples = [];\n } else {\n var i;\n for (i = vm.newsamples.length - 1; i >= 0; i -= 1) {\n if (vm.newsamples[i].checked) {\n vm.newsamples.splice(i, 1);\n }\n }\n }\n vm.allChecked = false;\n }\n function clearNavigationSidebar(){\n msNavigationSidebarService.clearNavigationItems();\n }\n function setCategoriesToSideNav(moduleCategories,$event) {\n //$scope.$apply();\n //msNavigationSidebarService.navigation = []\n //msNavigationSidebarService.clearNavigation();\n msNavigationSidebarService.saveItem('categories', {\n title: 'Categories',\n group: true,\n weight: 1,\n searchCategories: function (stateParams) {\n searchCategories(stateParams);\n },\n childrenCount: 1,\n class: 'navigation-dashboards',\n translate: 'SHARED.CATEGORIES',\n click: function (stateParams) {\n var deferred = $q.defer();\n toggleCategoryFilter();\n deferred.resolve([]);\n return deferred.promise;\n }\n });\n\n if (vm.moduleCategories && vm.moduleCategories.length > 0) {\n vm.moduleCategories.forEach(function (category, index) {\n if(category.parent==null)\n recursiveDeleteCategoriesFromSideNav(category, index, 'categories');\n });\n \n vm.categories.forEach(function (category, index) {\n if(category.parent==null)\n recursiveSetCategoriesToSideNav(category, index, 'categories');\n });\n }\n \n if (vm.alltags && vm.alltags.length > 0) {\n msNavigationSidebarService.saveItem('tags', {\n title: 'Tags',\n group: true,\n weight: 2,\n default: true,\n childrenCount: 1,\n translate: 'SHARED.TAGS',\n click: function (stateParams) {\n //toggleCategoryFilter();\n }\n });\n vm.alltags.forEach(function (tag, index) {\n msNavigationSidebarService.deleteItem('tags.'+ tag.name, {\n title: tag.name,\n icon: 'icon-tile-four',\n class: 'navigation-dashboards',\n stateParams: {\n 'tag': tag\n },\n badge: {\n content: tag.count,\n color: 'rgb(73, 183, 236)'\n },\n click: function (stateParams) {\n toggleTagFilter(stateParams.tag);\n },\n hidden: function (node) {\n return false;\n },\n weight:index\n });\n });\n vm.tags.forEach(function (tag, index) {\n msNavigationSidebarService.saveItem('tags.'+ tag.name, {\n title: tag.name,\n icon: 'icon-tile-four',\n class: 'navigation-dashboards',\n default: true,\n childrenCount: 1,\n stateParams: {\n 'tag': tag\n },\n badge: {\n content: tag.count,\n color: 'rgb(73, 183, 236)'\n },\n click: function (stateParams) {\n toggleTagFilter(stateParams.tag);\n },\n hidden: function (node) {\n return false;\n },\n weight:index\n });\n });\n }\n if (vm.allclusterNumbers && vm.allclusterNumbers.length > 0) {\n msNavigationSidebarService.saveItem('clusterNumbers', {\n title: 'ClusterNumbers',\n group: true,\n weight: 2,\n default: true,\n childrenCount: 1,\n translate: 'CLASSIFICATION.GROUP',\n click: function (stateParams) {\n //toggleCategoryFilter();\n }\n });\n vm.allclusterNumbers.forEach(function (clusterNo, index) {\n if(clusterNo.count>1){\n msNavigationSidebarService.deleteItem('clusterNumbers.'+ clusterNo.name, {\n title: clusterNo.name,\n icon: 'icon-tile-four',\n class: 'navigation-dashboards',\n stateParams: {\n 'clusterNo': clusterNo\n },\n badge: {\n content: clusterNo.count,\n color: 'rgb(73, 183, 236)'\n },\n click: function (stateParams) {\n toggleClusterNoFilter(stateParams.clusterNo);\n },\n hidden: function (node) {\n return false;\n },\n weight:index\n });\n }\n });\n vm.clusterNumbers.forEach(function (clusterNo, index) {\n var num = 1;\n if(vm.filters.clusterNo!=null || vm.filters.categoryId!=null || vm.filters.tag!=\"\")\n num = 0;\n if(clusterNo.count>num){\n msNavigationSidebarService.saveItem('clusterNumbers.'+ clusterNo.name, {\n title: clusterNo.name,\n icon: 'icon-tile-four',\n class: 'navigation-dashboards',\n default: true,\n childrenCount: 1,\n stateParams: {\n 'clusterNo': clusterNo\n },\n badge: {\n content: clusterNo.count,\n color: 'rgb(73, 183, 236)'\n },\n click: function (stateParams) {\n toggleClusterNoFilter(stateParams.clusterNo);\n },\n hidden: function (node) {\n return false;\n },\n weight:index\n });\n }\n });\n }\n\n }\n\n function recursiveSetCategoriesToSideNav(category, weight, parent) {\n if(category.count>0){\n msNavigationSidebarService.saveItem(parent + \".\" + category.id, {\n title: category.name,\n localVariables: category.localVariables,\n icon: 'icon-tile-four',\n class: 'navigation-dashboards',\n childrenCount: category.childrenCount,\n stateParams: {\n 'id': category.id,\n 'parent': category.parent\n },\n badge: {\n content: category.count,\n color: 'rgb(73, 183, 236)'\n },\n click: function (stateParams) {\n var deferred = $q.defer();\n event.stopPropagation();\n toggleCategoryFilter(stateParams);\n deferred.resolve([]);\n return deferred.promise;\n },\n moreAndMore: function (stateParams) {\n var deferred = $q.defer();\n deferred.resolve(moreAndMore(stateParams));\n return deferred.promise;\n },\n searchCategories: function (stateParams) {\n searchCategories(stateParams);\n },\n hidden: function (node) {\n return false;\n },\n weight: weight\n });\n \n if (category.children && category.children.length > 0) {\n category.children.forEach(function (cat, index) {\n recursiveSetCategoriesToSideNav(cat, index, parent + \".\" + category.id);\n })\n }\n }\n } \n function recursiveDeleteCategoriesFromSideNav(category, weight, parent) {\n msNavigationSidebarService.deleteItem(parent + \".\" + category.id, {\n title: category.name,\n icon: 'icon-tile-four',\n class: 'navigation-dashboards',\n stateParams: {\n 'id': category.id\n },\n badge: {\n content: category.count,\n color: 'rgb(73, 183, 236)'\n },\n click: function (stateParams) {\n toggleCategoryFilter(stateParams);\n },\n hidden: function (node) {\n return false;\n },\n weight: weight\n });\n if (category.children && category.children.length > 0) {\n category.children.forEach(function (cat, index) {\n recursiveDeleteCategoriesFromSideNav(cat, index, parent + \".\" + category.id);\n })\n }\n }\n\n\n function recursiveClearSidenavCategories(category, parent) {\n msNavigationSidebarService.deleteItem(parent + \".\" + category.id)\n if (category.children && category.children.length > 0) {\n category.children.forEach(function (cat, index) {\n recursiveClearSidenavCategories(cat, index, parent + \".\" + category.id);\n })\n }\n }\n\n $rootScope.$on('$stateChangeStart',\n function (event, toState, toParams, fromState, fromParams) {\n msNavigationSidebarService.clearNavigationItems();\n })\n\n vm.getCategoryTitle = function (cat) {\n var title = cat.name;\n if (cat.localVariables) {\n var localVariable = cat.localVariables.filter(function (k) { return $translate.use() == k.language; })[0];\n if (localVariable) title = localVariable.value;\n }\n return title;\n }\n\n function init() {\n ModuleService\n .hasData(vm.moduleId)\n .then(function (response) {\n //getCategories();\n getCategoryTree();\n searchSamples(init = true);\n vm.allclusters = vm.clusters;\n vm.allclusterNumbers = vm.clusterNumbers;\n vm.moduleCategories = vm.categories;\n vm.alltags = vm.tags;\n });\n console.log(vm);\n }\n init();\n\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.management', [])\n .config(config);\n\n /** @ngInject */\n function config($stateProvider, $translatePartialLoaderProvider, msApiProvider, msNavigationServiceProvider) {\n var navigation = 'app/navigation/layouts/horizontal-navigation/navigation.html';\n var navigationcss = 'app/navigation/layouts/horizontal-navigation/navigation.scss';\n\n // State\n $stateProvider\n .state('app.management', {\n abstract: true,\n url: '/management'\n })\n .state('app.management.users', {\n abstract: true,\n url: '/users'\n })\n .state('app.management.users.list', {\n url: '?{type:any}',\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: function($stateParams) {\n var template = 'app/main/apps/management/user/views/list.html';\n return template;\n },\n controllerProvider: function($stateParams) {\n var controller = 'UsersController as vm';\n return controller;\n }\n }\n },\n bodyClass: 'users'\n })\n .state('app.management.users.new', {\n url: '/new',\n params: {\n mode: 'create'\n },\n resolve: {\n $$user: function() {\n return {\n id: null,\n workspaces: [],\n roles: []\n };\n },\n $$userRegisterRequest: function () {\n return null;\n },\n $$userDemoRequest: function () {\n return null;\n }\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm',\n css : navigationcss\n },\n 'content@app': {\n templateUrl: function($stateParams) {\n var template = 'app/main/apps/management/user/views/edit.html';\n return template;\n },\n controllerProvider: function($stateParams) {\n var controller = 'UserEditController as vm';\n return controller;\n }\n }\n },\n bodyClass: 'users'\n })\n .state('app.management.users.demo', {\n url: '/demo/:id',\n params: {\n mode: 'request'\n },\n resolve: {\n $$userDemoRequest: function ($http, $stateParams, $rootScope, $q) {\n return $http({\n method: 'POST',\n url: '/api/account/userdemorequest/' + $stateParams.id\n })\n .then(function (response) {\n return response.data;\n });\n },\n $$user: function () {\n return {\n id: null,\n workspaces: [],\n roles: []\n };\n },\n $$userRegisterRequest: function () {\n return null;\n }\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm',\n css: navigationcss\n },\n 'content@app': {\n templateUrl: function ($stateParams) {\n var template = 'app/main/apps/management/user/views/userdemorequest.html';\n return template;\n },\n controllerProvider: function ($stateParams) {\n var controller = 'UserEditController as vm';\n return controller;\n }\n }\n },\n bodyClass: 'users'\n })\n .state('app.management.users.request', {\n url: '/request/:id',\n params: {\n mode: 'request'\n },\n resolve: {\n $$userRegisterRequest: function ($http, $stateParams, $rootScope, $q) {\n return $http({\n method: 'GET',\n url: '/api/account/userregisterrequest/' + $stateParams.id\n })\n .then(function (response) {\n return response.data;\n });\n },\n $$user: function () {\n return {\n id: null,\n workspaces: [],\n roles: []\n };\n },\n $$userDemoRequest: function () {\n return null;\n }\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm',\n css: navigationcss\n },\n 'content@app': {\n templateUrl: function ($stateParams) {\n var template = 'app/main/apps/management/user/views/userregisterrequest.html';\n return template;\n },\n controllerProvider: function ($stateParams) {\n var controller = 'UserEditController as vm';\n return controller;\n }\n }\n },\n bodyClass: 'users'\n })\n .state('app.management.users.request.new', {\n url: '/request/:id',\n params: {\n mode: 'request'\n },\n resolve: {\n $$userRegisterRequest: function ($http, $stateParams, $rootScope, $q) {\n return $http({\n method: 'GET',\n url: '/api/account/userregisterrequest/' + $stateParams.id\n })\n .then(function (response) {\n return response.data;\n });\n },\n $$user: function () {\n return {\n id: null,\n workspaces: [],\n roles: []\n };\n },\n $$userDemoRequest: function () {\n return null;\n }\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm',\n css: navigationcss\n },\n 'content@app': {\n templateUrl: function ($stateParams) {\n var template = 'app/main/apps/management/user/views/edit.html';\n return template;\n },\n controllerProvider: function ($stateParams) {\n var controller = 'UserEditController as vm';\n return controller;\n }\n }\n },\n bodyClass: 'users'\n })\n .state('app.management.users.detail', {\n url: '/detail/:id',\n params: {\n mode: 'detail'\n },\n resolve: {\n $$user: function($http, $stateParams, $rootScope, $q) {\n return $http({\n method: 'GET',\n url: '/api/account/user/' + $stateParams.id\n })\n .then(function(response) {\n return response.data;\n });\n },\n $$userRegisterRequest: function () {\n return null;\n },\n $$userDemoRequest: function () {\n return null;\n }\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: function($stateParams) {\n var template = 'app/main/apps/management/user/views/edit.html';\n return template;\n },\n controllerProvider: function($stateParams) {\n var controller = 'UserEditController as vm';\n return controller;\n }\n }\n },\n bodyClass: 'users'\n })\n //roles\n .state('app.management.roles', {\n abstract: true,\n url: '/roles',\n })\n .state('app.management.roles.list', {\n url: '/',\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: function($stateParams) {\n var template = 'app/main/apps/management/role/views/list.html';\n return template;\n },\n controllerProvider: function($stateParams) {\n var controller = 'RoleListController as vm';\n return controller;\n }\n }\n },\n bodyClass: 'roles'\n })\n .state('app.management.roles.new', {\n url: '/new',\n params: {\n mode: 'create'\n },\n resolve: {\n $$role: function() {\n return {\n id: null\n };\n },\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: function($stateParams) {\n var template = 'app/main/apps/management/role/views/edit.html';\n return template;\n },\n controllerProvider: function($stateParams) {\n var controller = 'RoleEditController as vm';\n return controller;\n }\n }\n },\n bodyClass: 'roles'\n })\n .state('app.management.roles.detail', {\n url: '/detail/:id',\n params: {\n mode: 'detail'\n },\n resolve: {\n $$role: function($http, $stateParams, $rootScope, $q) {\n return $http({\n method: 'GET',\n url: '/api/account/role/' + $stateParams.id\n })\n .then(function(response) {\n return response.data;\n });\n },\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: function($stateParams) {\n var template = 'app/main/apps/management/role/views/edit.html';\n return template;\n },\n controllerProvider: function($stateParams) {\n var controller = 'RoleEditController as vm';\n return controller;\n }\n }\n },\n bodyClass: 'roles'\n })\n //workspaces\n .state('app.management.workspaces', {\n abstract: true,\n url: '/workspaces',\n })\n .state('app.management.workspaces.list', {\n url: '/',\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: function($stateParams) {\n var template = 'app/main/apps/management/workspace/views/list.html';\n return template;\n },\n controllerProvider: function($stateParams) {\n var controller = 'WorkspaceListController as vm';\n return controller;\n }\n }\n },\n bodyClass: 'workspaces'\n })\n .state('app.management.workspaces.new', {\n url: '/new',\n params: {\n mode: 'create'\n },\n resolve: {\n $$workspace: function() {\n return {\n id: null\n };\n }\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: function($stateParams) {\n var template = 'app/main/apps/management/workspace/views/edit.html';\n return template;\n },\n controllerProvider: function($stateParams) {\n var controller = 'WorkspaceEditController as vm';\n return controller;\n }\n }\n },\n bodyClass: 'workspaces'\n })\n .state('app.management.workspaces.detail', {\n url: '/detail/:id',\n params: {\n mode: 'detail'\n },\n resolve: {\n $$workspace: function($http, $stateParams, $rootScope, $q) {\n return $http({\n method: 'GET',\n url: '/api/account/workspace/' + $stateParams.id\n })\n .then(function(response) {\n return response.data;\n });\n }\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: function($stateParams) {\n var template = 'app/main/apps/management/workspace/views/edit.html';\n return template;\n },\n controllerProvider: function($stateParams) {\n var controller = 'WorkspaceEditController as vm';\n return controller;\n }\n }\n },\n bodyClass: 'workspaces'\n }).state('app.management.modules', {\n abstract: true,\n url: '/modules'\n })\n .state('app.management.modules.list', {\n url: '/',\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: function($stateParams) {\n var template = 'app/main/apps/management/module/views/list.html';\n return template;\n },\n controllerProvider: function($stateParams) {\n var controller = 'ModuleListController as vm';\n return controller;\n }\n }\n },\n bodyClass: 'modules'\n })\n\n // Translation\n //$translatePartialLoaderProvider.addPart('app');\n\n // Navigation\n msNavigationServiceProvider.saveItem('management_users', {\n title: 'User Management',\n translate: \"MANAGEMENT.USER_MANAGEMENT\",\n state: 'app.management.users.list',\n weight: 1,\n hidden: function($scope, $state) {\n var result = true;\n if ($state)\n result = !$state.includes(\"**.management.**\");\n return result;\n }\n });\n\n msNavigationServiceProvider.saveItem('management_roles', {\n title: 'Role Management',\n translate: \"MANAGEMENT.ROLE_MANAGEMENT\",\n state: 'app.management.roles.list',\n weight: 2,\n hidden: function($scope, $state) {\n var result = true;\n if ($state)\n result = !$state.includes(\"**.management.**\");\n return result;\n }\n });\n\n msNavigationServiceProvider.saveItem('management_workspaces', {\n title: 'Workspace Management',\n translate: \"MANAGEMENT.WORKSPACE_MANAGEMENT\",\n state: 'app.management.workspaces.list',\n weight: 3,\n hidden: function($scope, $state) {\n var result = true;\n if ($state)\n result = !$state.includes(\"**.management.**\");\n return result;\n }\n });\n\n msNavigationServiceProvider.saveItem('management_modules', {\n title: 'Module Management',\n translate: \"MANAGEMENT.MODULE_MANAGEMENT\",\n state: 'app.management.modules.list',\n weight: 4,\n hidden: function($scope, $state) {\n var result = true;\n if ($state)\n result = !$state.includes(\"**.management.**\");\n return result;\n }\n });\n\n }\n\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.management')\n .service('WorkspaceService', WorkspaceService)\n .controller('DeleteWorkspaceDialogController', DeleteWorkspaceDialogController)\n .controller('SaveWorkspaceDialogController', SaveWorkspaceDialogController)\n .controller('BasicSuccessDialogController', BasicSuccessDialogController);\n\n /** @ngInject */\n function WorkspaceService($q, $log, $translate, $mdMedia, $mdDialog, api) {\n // Delete Pipeline\n this.delete = function($scope, $state, $event, workspace) {\n showDeleteConfirmDialog($scope, $event, workspace)\n .then(function(answer) {\n if (!answer) return;\n\n api.account.workspace.delete(role)\n .then(function(response) {\n var successTitle = $translate.instant('PIPELINE.CONFIRM.DELETE_PIPELINE_RESULT_SUCCESS_TITLE');\n var successBody = $translate.instant('PIPELINE.CONFIRM.DELETE_PIPELINE_RESULT_SUCCESS_BODY');\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function() {\n $state.go('app.management.workspaces.list');\n });\n },\n function(response) {\n $log.error(response);\n });\n });\n }\n\n this.save = function($scope, $state, $event, workspace) {\n showSaveConfirmDialog($scope, $event, workspace)\n .then(function(answer) {\n if (!answer) return;\n\n api.account.role.save(role)\n .then(function(response) {\n var successTitle = $translate.instant('PIPELINE.CONFIRM.SAVE_PIPELINE_RESULT_SUCCESS_TITLE');\n var successBody = $translate.instant('PIPELINE.CONFIRM.SAVE_PIPELINE_RESULT_SUCCESS_BODY');\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function() {\n $state.reload();\n });\n },\n function(response) {\n $log.error(response);\n });\n });\n }\n\n function showDeleteConfirmDialog($scope, $event, workspace) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'DeleteWorkspaceDialogController as vm',\n templateUrl: 'app/main/apps/management/workspace/services/delete-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n pipeline: pipeline\n }\n })\n .then(function(answer) {\n deferred.resolve(answer);\n }, function() {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function() {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function(wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showSaveConfirmDialog($scope, $event, workspace) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'SaveWorkspaceDialogController as vm',\n templateUrl: 'app/main/apps/management/workspace/services/save-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n workspace: workspace\n }\n })\n .then(function(answer) {\n deferred.resolve(answer);\n }, function() {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function() {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function(wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showSuccessDialog($scope, $event, title, body) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'BasicSuccessDialogController as vm',\n templateUrl: 'app/main/apps/management/workspace/services/success-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body\n }\n })\n .then(function(answer) {\n deferred.resolve();\n }, function(answer) {\n deferred.resolve();\n });\n $scope.$watch(function() {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function(wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n }\n\n function DeleteWorkspaceDialogController($scope, $state, $stateParams, $log, $mdDialog, workspace) {\n var vm = this;\n vm.workspace = workspace;\n vm.workspaceId = $stateParams.id;\n vm.order = 'order';\n vm.orderDescending = false;\n vm.icons = ['none', 'icon-source-fork', 'icon-linode', 'icon-tooltip-text', 'icon-nfc-tap', 'icon-emoticon', 'icon-code-tags', 'icon-emoticon']\n\n vm.msScrollOptions = {\n suppressScrollX: true\n };\n\n vm.cancel = function() {\n $mdDialog.cancel();\n };\n vm.ok = function() {\n $mdDialog.hide(true);\n };\n\n }\n\n function SaveWorkspaceDialogController($scope, $state, $stateParams, $log, $mdDialog, workspace) {\n var vm = this;\n vm.workspace = workspace;\n\n vm.cancel = function() {\n $mdDialog.cancel();\n };\n vm.ok = function() {\n $mdDialog.hide(true);\n };\n\n }\n\n function BasicSuccessDialogController($mdDialog, title, body) {\n var vm = this;\n vm.title = title;\n vm.body = body;\n\n vm.cancel = function() {\n $mdDialog.cancel();\n };\n vm.ok = function() {\n $mdDialog.hide(true);\n };\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.management')\n .controller('WorkspaceListController', WorkspaceListController);\n\n /** @ngInject */\n function WorkspaceListController($rootScope, $scope, $state, $stateParams, $log, $timeout, $translate, api) {\n var vm = this;\n vm.workspaces = [];\n //Methods\n vm.itemCountForOnePage = 10;\n vm.pagination = {\n current: 1,\n last: 1\n };\n\n vm.filters = {\n search: ''\n };\n vm.filtersDefaults = angular.copy(vm.filters);\n\n vm.order = '-';\n vm.orderDescending = true;\n\n vm.sortableOptions = {\n handle: '.handle',\n forceFallback: true,\n ghostClass: 'todo-item-placeholder',\n fallbackClass: 'todo-item-ghost',\n fallbackOnBody: true,\n sort: true\n };\n vm.msScrollOptions = {\n suppressScrollX: true\n };\n\n vm.setCurrentPage = function(page) {\n if (page > 0 && page <= vm.pagination.last)\n vm.pagination.current = page;\n }\n\n vm.myFilter = function (item) {\n return item.name.toLowerCase().includes(vm.filters.search.toLowerCase()) ? true : false;\n };\n\n function calculatePageCounts(count) {\n var l = vm.itemCountForOnePage;\n var lastpage = Math.ceil(count / l);\n return lastpage;\n }\n\n vm.setNumberOfPages = function () {\n vm.pagination.current = 1;\n vm.pagination.last = calculatePageCounts(vm.workspaces.length);\n }\n\n $scope.$watchCollection('filtered', function() {\n if (!vm.roles) return;\n\n var length = vm.workspaces.length;\n if ($scope.filtered) {\n var length = $scope.filtered.length;\n }\n vm.pagination.last = calculatePageCounts(length);\n });\n\n api.account.workspace.list()\n .then(function(response) {\n vm.workspaces = response;\n vm.pagination.last = calculatePageCounts(vm.workspaces.length);\n },\n function(response) {\n $log.error(response);\n });\n\n vm.open = function open(item) {\n $state.go('app.management.workspaces.detail', {\n id: item.id\n });\n };\n\n vm.init = function() {};\n\n vm.init();\n\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.management')\n .controller('WorkspaceEditController', WorkspaceEditController);\n\n /** @ngInject */\n function WorkspaceEditController($rootScope, $scope, $state, $stateParams, $log, api, WorkspaceService, $$workspace, $q, $translate, appSettings, user, $integration) {\n var vm = this;\n console.log($integration)\n vm.integration = $integration;\n vm.mode = $stateParams.mode;\n vm.workspace = $$workspace;\n vm.user = user;\n \n //Methods\n vm.save = function() {\n vm.saveProcessing = true;\n api.account.workspace.save(vm.workspace)\n .then(function (response) {\n if (vm.isWebSourceActive) {\n api.source.saveSystemRules(setRules(vm.rules), response.id)\n .then(function (response) {\n $state.go('app.management.workspaces.list');\n vm.saveProcessing = false;\n },\n function (response) {\n $log.error(response);\n vm.saveProcessing = false;\n });\n } else {\n $state.go('app.management.workspaces.list');\n vm.saveProcessing = false;\n }\n \n },\n function(response) {\n $log.error(response);\n vm.saveProcessing = false;\n });\n\n }\n\n vm.cancel = function() {\n $state.go('app.management.workspaces.list');\n }\n\n\n\n\n\n //SYSTEM RULE START///\n ////////////////////////////////////////////////////////////////\n\n\n vm.rules = [];\n vm.selectedRule = {};\n vm.categories = [];\n vm.sites = [];\n vm.languages = [];\n vm.keywords = [];\n vm.siteTypes = [];\n vm.contentTypes = [];\n vm.activeSources = appSettings.activeSources;\n vm.saveProcessing = false;\n vm.isWebSourceActive = vm.activeSources.includes('WEBSOURCE') ? true : false;\n vm.rule = {\n id: null,\n name: \"\",\n showCat: false,\n type: \"INCLUDE\",\n selectedCategories: {\n values: [],\n operator: \"OR\"\n },\n selectedSites: {\n values: [],\n operator: \"OR\"\n },\n selectedLanguages: {\n values: [],\n operator: \"OR\"\n },\n selectedKeywords: {\n values: [],\n operator: \"OR\"\n },\n selectedSitetypes: {\n values: [],\n operator: \"OR\"\n },\n selectedContenttypes: {\n values: [],\n operator: \"OR\"\n }\n }\n vm.emptyRule = JSON.parse(JSON.stringify(vm.rule));\n vm.dropzoneFields = [];\n vm.dropzone = {\n cancel: \".unsortable\"\n }\n vm.dragging = false;\n vm.filters = {\n sites: \"\",\n sitetypes: \"\",\n categories: \"\",\n keywords: \"\",\n contentTypes: \"\",\n languages: \"\"\n }\n\n var selecteds = [\"selectedCategories\", \"selectedSites\", \"selectedLanguages\", \"selectedKeywords\", \"selectedSitetypes\", \"selectedContenttypes\"];\n var conditionTypes = [\"CATEGORY\", \"SITE\", \"LANGUAGE\", \"KEYWORD\", \"SITE_TYPE\", \"CONTENT_TYPE\"];\n\n function setRules(rules) {\n var systemRules = [];\n for (var j = 0; j < rules.length; j++) {\n var conditions = [];\n for (var i = 0; i < selecteds.length; i++) {\n var values = [];\n rules[j][selecteds[i]].values.forEach(function (k) {\n values.push(k);\n });\n if(values.length != 0){\n conditions.push({\n type: conditionTypes[i],\n values: values,\n operator: rules[j][selecteds[i]].operator\n });\n }\n }\n systemRules.push({\n id: rules[j].id,\n name: rules[j].name,\n type: rules[j].type,\n conditions: conditions,\n deleted: rules[j].deleted\n })\n }\n return systemRules;\n }\n\n vm.addRule = function () {\n if (vm.rule.name == \"\" || (vm.rule.selectedCategories.values.length == 0 &&\n vm.rule.selectedSites.values.length == 0 &&\n vm.rule.selectedLanguages.values.length == 0 &&\n vm.rule.selectedKeywords.values.length == 0 &&\n vm.rule.selectedSitetypes.values.length == 0 &&\n vm.rule.selectedContenttypes.values.length == 0)) { return; }\n vm.rules.push(vm.rule);\n vm.rule = JSON.parse(JSON.stringify(vm.emptyRule));\n }\n\n vm.sortableCardOptions = {\n cancel: \".unsortable\",\n appendTo: 'body',\n connectWith: '.dropzone',\n delay: 75,\n distance: 7,\n forcePlaceholderSize: true,\n placeholder: '.dragitem',\n tolerance: 'pointer',\n start: function (event, ui) {\n vm.dragging = true;\n var model = ui.item.sortable.model;\n angular.forEach(vm.added, function (item) {\n if (item.name == model.name) {\n item.sorting = true;\n }\n });\n //$scope.$apply();\n setTimeout(function () { $scope.$apply(); }, 10);\n },\n update: function (e, ui) {\n if (ui.item.sortable.droptarget[0].classList[0] !== \"dropzone\")\n ui.item.sortable.cancel();\n },\n stop: function (e, ui) {\n if (ui.item.sortable.droptarget == undefined) {\n $scope.$apply(vm.dragging = false);\n return;\n } else if (ui.item.sortable.droptarget[0].classList[0] == \"dropzone\") {\n // run code when item is dropped in the dropzone\n vm.rule = ui.item.sortable.model;\n $scope.$apply(vm.dragging = false);\n } else {\n $scope.$apply(vm.dragging = false);\n }\n\n\n }\n };\n\n function createFilterConditions(query, selector) {\n if(selector == undefined){\n selector = 'name';\n }\n var lowercaseQuery = angular.lowercase(query);\n return function filterFn(condition) {\n var lowercaseName = angular.lowercase(condition[selector]);\n return lowercaseName.includes(lowercaseQuery)\n };\n }\n\n\n vm.removeSite = function (site) {\n vm.rule.selectedSites.values.forEach(function (k, index) {\n if (k === site) {\n vm.rule.selectedSites.values.splice(index, 1);\n }\n })\n }\n vm.removeSiteType = function (sitetype) {\n vm.rule.selectedSitetypes.values.forEach(function (k, index) {\n if (k === sitetype) {\n vm.rule.selectedSitetypes.values.splice(index, 1);\n }\n })\n }\n vm.removeCategory = function (category) {\n vm.rule.selectedCategories.values.forEach(function (k, index) {\n if (k === category) {\n vm.rule.selectedCategories.values.splice(index, 1);\n }\n })\n }\n vm.removeContentType = function (contenttype) {\n vm.rule.selectedContenttypes.values.forEach(function (k, index) {\n if (k === contenttype) {\n vm.rule.selectedContenttypes.values.splice(index, 1);\n }\n })\n }\n vm.removeLanguage = function (language) {\n vm.rule.selectedLanguages.values.forEach(function (k, index) {\n if (k === language) {\n vm.rule.selectedLanguages.values.splice(index, 1);\n }\n })\n }\n vm.removeKeyword = function (keyword) {\n vm.rule.selectedKeywords.values.forEach(function (k, index) {\n if (k === keyword) {\n vm.rule.selectedKeywords.values.splice(index, 1);\n }\n })\n }\n\n vm.saveKeyword = function (keyword, $event) {\n vm.keywordSaveProcessing = true;\n api.source.saveKeyword($stateParams.id, keyword.name)\n .then(function (response) {\n vm.keywordSaveProcessing = false;\n vm.selectedKeywordChange(response)\n },\n function (response) {\n vm.keywordSaveProcessing = false;\n $log.error(response);\n });\n }\n\n ///////////// AUTOCOMPLETE START /////////////////\n\n vm.searchSites = function (query) {\n var def = $q.defer();\n if (query.length == 3) {\n api.source.getSitesByName($stateParams.id, query)\n .then(function (response) {\n def.resolve(response);\n vm.sites = response;\n },\n function (response) {\n $log.error(response);\n });\n return def.promise;\n } else {\n var results = query ? vm.sites.filter(createFilterConditions(query)) : vm.sites;\n return results;\n }\n }\n\n vm.searchKeywords = function (query) {\n var def = $q.defer();\n var addNeyKeyword = [{ name: query, question: true }]\n if (query.length == 3) {\n api.source.getKeywords(vm.user.selectedWorkspace.id, query)\n .then(function (response) {\n var flag = response.filter(function (m) { return m.name == query });\n if (flag.length < 1) {\n response = addNeyKeyword.concat(response);\n }\n def.resolve(response);\n vm.keywords = response;\n },\n function (response) {\n $log.error(response);\n });\n return def.promise;\n } else {\n vm.keywords = vm.keywords.filter(function (k) { return !k.question; })\n var results = query ? vm.keywords.filter(createFilterConditions(query, 'keyword')) : vm.keywords;\n var flag = results.filter(function (m) { return m.name == query });\n if (flag.length < 1) {\n results = addNeyKeyword.concat(results);\n }\n return results;\n }\n }\n\n vm.searchSitetypes = function (query) {\n var results = query ? vm.siteTypes.filter(createFilterConditions(query)) : vm.siteTypes;\n return results;\n }\n\n vm.searchContentTypes = function (query) {\n var results = query ? vm.contentTypes.filter(createFilterConditions(query)) : vm.contentTypes;\n return results;\n }\n\n vm.searchCategories = function (query) {\n var results = query ? vm.categories.filter(createFilterConditions(query)) : vm.categories;\n return results;\n }\n\n vm.searchLanguages = function (query) {\n var results = query ? vm.languages.filter(createFilterConditions(query)) : vm.languages;\n return results;\n }\n\n vm.selectedSiteChange = function (item) {\n if (item == undefined) return;\n if (!includes(vm.rule.selectedSites.values, item.name) && item != undefined) {\n vm.rule.selectedSites.values.push(item);\n }\n vm.filters.sites = \"\";\n }\n\n vm.selectedSitetypeChange = function (item) {\n if (item == undefined) return;\n if (!includes(vm.rule.selectedSitetypes.values, item.name) && item != undefined) {\n vm.rule.selectedSitetypes.values.push(item);\n }\n vm.filters.sitetypes = \"\";\n }\n\n vm.selectedContentTypeChange = function (item) {\n if (item == undefined) return;\n if (!includes(vm.rule.selectedContenttypes.values, item.name) && item != undefined) {\n vm.rule.selectedContenttypes.values.push(item);\n }\n vm.filters.contentTypes = \"\";\n }\n\n vm.selectedCategoryChange = function (item) {\n if (item == undefined) return;\n if (!includes(vm.rule.selectedCategories.values, item.name) && item != undefined) {\n vm.rule.selectedCategories.values.push(item);\n }\n vm.filters.categories = \"\";\n }\n\n vm.selectedLanguageChange = function (item) {\n if (item == undefined) return;\n if (!includes(vm.rule.selectedLanguages.values, item.name) && item != undefined) {\n vm.rule.selectedLanguages.values.push(item);\n }\n vm.filters.languages = \"\";\n }\n\n vm.selectedKeywordChange = function (item) {\n if (item == undefined || item.question == true) return;\n if (!includes(vm.rule.selectedKeywords.values, item.name) && item != undefined) {\n vm.rule.selectedKeywords.values.push({\n id: item.id,\n name: item.keyword,\n code: item.keyword,\n });\n }\n vm.filters.keywords = \"\";\n }\n\n function includes(array, item) {\n var flag = false;\n array.forEach(function (k) {\n if (k.name == item) flag = true;\n })\n return flag;\n }\n //////////////// AUTOCOMPLETE END ////////////////////\n\n\n vm.getConditions = function () {\n api.source.getRuleLookupMap(vm.user.selectedWorkspace.id, true)\n .then(function(response){\n vm.siteTypes = response[\"SITE_TYPES\"];\n vm.categories = response[\"CATEGORIES\"];\n vm.contentTypes = response[\"CONTENT_TYPES\"];\n vm.languages= response[\"LANGUAGES\"];\n }, function(response){\n $log.error(response);\n //TODO handle error.\n });\n }\n\n vm.editRule = function (item) {\n vm.addRule();\n vm.rule = item;\n vm.rules.forEach(function (k, index) {\n if (k == item) vm.rules.splice(index, 1)\n })\n }\n\n vm.deleteRule = function (item) {\n item.deleted = true;\n }\n\n function showSuccessDialog($scope, $event, title, body) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'BasicDialogController as vm',\n templateUrl: 'app/main/apps/sources/services/basic-confirm-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body,\n state: $state\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function (answer) {\n deferred.resolve();\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function getSystemRules() {\n api.source.getSystemRules($stateParams.id)\n .then(function (response) {\n var selecteds = [\"selectedCategories\", \"selectedSites\", \"selectedLanguages\", \"selectedKeywords\", \"selectedSitetypes\", \"selectedContenttypes\"];\n //TODO put this and same array in source.service.js\n var conditionTypes = [\"CATEGORY\", \"SITE\", \"LANGUAGE\", \"KEYWORD\", \"SITE_TYPE\", \"CONTENT_TYPE\"];\n for (var i = 0; i < response.length; i++) {\n var rule = {\n id: response[i].id,\n name: response[i].name,\n type: response[i].type\n }\n for (var j = 0; j < selecteds.length; j++) {\n var condition = response[i].conditions.filter(function (k) {\n return k.type == conditionTypes[j];\n })[0]\n rule[selecteds[j]] = {};\n rule[selecteds[j]].values = [];\n if (condition != null) {\n condition.values.forEach(function (m) {\n rule[selecteds[j]].values.push(m)\n })\n rule[selecteds[j]].operator = condition.operator;\n } else {\n rule[selecteds[j]].operator = \"OR\";\n }\n }\n vm.rules.push(rule);\n }\n },\n function (response) {\n $log.error(response);\n });\n }\n\n\n vm.init = function () {\n if (vm.isWebSourceActive) {\n vm.getConditions();\n getSystemRules();\n }\n };\n\n vm.init();\n\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.management')\n .service('UserService', UserService)\n .controller('DeleteUserDialogController', DeleteUserDialogController)\n .controller('SaveUserDialogController', SaveUserDialogController)\n .controller('BasicSuccessDialogController', BasicSuccessDialogController)\n .controller('SearchADUserDialogController', SearchADUserDialogController)\n .controller('SaveUserFilterFieldDialogController', SaveUserFilterFieldDialogController);\n\n /** @ngInject */\n function UserService($q, $log, $translate, $mdMedia, $mdDialog, api,$window) {\n // Delete Pipeline\n this.delete = function($scope, $state, $event, user) {\n showDeleteConfirmDialog($scope, $event, user)\n .then(function(answer) {\n if (!answer) return;\n\n api.account.user.delete(user)\n .then(function(response) {\n var successTitle = $translate.instant('MANAGEMENT.USER.CONFIRM.DELETE_RESULT_SUCCESS_TITLE');\n var successBody = $translate.instant('MANAGEMENT.USER.CONFIRM.DELETE_RESULT_SUCCESS_BODY');\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function() {\n $state.go('app.management.users.list');\n });\n },\n function(response) {\n $log.error(response);\n });\n });\n }\n\n this.activation = function ($scope, $state, $event, user) {\n var successTitle = $translate.instant('MANAGEMENT.USER.CONFIRM.ACTIVATE_TITLE');\n var successBody = $translate.instant('MANAGEMENT.USER.CONFIRM.ACTIVATE_BODY');\n if (user.lockOutEnabled) {\n successTitle = $translate.instant('MANAGEMENT.USER.CONFIRM.DEACTIVATE_TITLE');\n successBody = $translate.instant('MANAGEMENT.USER.CONFIRM.DEACTIVATE_BODY');\n }\n console.log(\"assss\")\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function (answer) {\n if (!answer) return;\n\n api.account.user.activation(user.id)\n .then(function (response) {\n successTitle = $translate.instant('MANAGEMENT.USER.CONFIRM.ACTIVATE_SUCCESS_TITLE');\n successBody = $translate.instant('MANAGEMENT.USER.CONFIRM.ACTIVATE_SUCCESS_BODY');\n if (user.lockOutEnabled) {\n successTitle = $translate.instant('MANAGEMENT.USER.CONFIRM.DEACTIVATE_SUCCESS_TITLE');\n successBody = $translate.instant('MANAGEMENT.USER.CONFIRM.DEACTIVATE_SUCCESS_BODY');\n }\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function () {\n $state.go('app.management.users.list');\n });\n },\n function (response) {\n $log.error(response);\n });\n });\n }\n\n this.deleteUserRegisterRequest = function ($scope, $state, $event, id) {\n showDeleteUserRegisterRequestConfirmDialog($scope, $event)\n .then(function (answer) {\n if (!answer) return;\n api.account.deleteUserRegisterRequest(id)\n .then(function (response) {\n var successTitle = $translate.instant('MANAGEMENT.USER.CONFIRM.DELETE_REQUEST_RESULT_SUCCESS_TITLE');\n var successBody = $translate.instant('MANAGEMENT.USER.CONFIRM.DELETE_REQUEST_RESULT_SUCCESS_BODY');\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function () {\n $state.go('app.management.users.list');\n });\n },\n function (response) {\n $log.error(response);\n });\n });\n }\n\n this.changePass = function ($scope, $state, $event) {\n var successTitle = $translate.instant('MANAGEMENT.USER.CONFIRM.CHANGE_PASS_TITLE');\n var successBody = $translate.instant('MANAGEMENT.USER.CONFIRM.CHANGE_PASS_BODY');\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function () {\n $state.go('app.management.users.list');\n });\n }\n\n this.save = function ($scope, $state, $event, user, mode, samlActive, activeUser, userRegisterRequestId, isMailActive) {\n if (mode === 'create' || mode === 'request') {\n if (samlActive) user['samlActive'] = true;\n if (mode === 'request' && userRegisterRequestId) {\n user.registerRequestId = userRegisterRequestId;\n }\n api.account.user.save(user)\n .then(function (response) {\n var successTitle = \"\";\n var successBody = \"\";\n if ((user.type == \"DEFAULT\" || user.type == null) && isMailActive && !user.integration) {\n successTitle = $translate.instant('MANAGEMENT.USER.CONFIRM.CREATE_RESULT_SUCCESS_TITLE_DEFAULT');\n successBody = $translate.instant('MANAGEMENT.USER.CONFIRM.CREATE_RESULT_SUCCESS_BODY_DEFAULT');\n } else {\n successTitle = $translate.instant('MANAGEMENT.USER.CONFIRM.CREATE_RESULT_SUCCESS_TITLE');\n successBody = $translate.instant('MANAGEMENT.USER.CONFIRM.CREATE_RESULT_SUCCESS_BODY');\n }\n \n //$$user.workspaces = user.workspaces;\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function() {\n// $window.location.reload();\n $state.go('app.management.users.list',{},{reload:true});\n //$state.reload('app.toolbar');\n \n });\n },\n function(response) {\n $log.error(response);\n });\n } else {\n showSaveConfirmDialog($scope, $event, user)\n .then(function(answer) {\n if (!answer) return;\n\n api.account.user.save(user)\n .then(function(response) {\n var successTitle = $translate.instant('MANAGEMENT.USER.CONFIRM.SAVE_RESULT_SUCCESS_TITLE');\n var successBody = $translate.instant('MANAGEMENT.USER.CONFIRM.SAVE_RESULT_SUCCESS_BODY');\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function() {\n //$state.go('app.management.users.list',{},{reload:true});\n //$state.reload('app.toolbar');\n if(user.userName===activeUser.userName){\n $window.location.reload();\n }\n });\n },\n function(response) {\n $log.error(response);\n });\n });\n }\n }\n\n this.searchADUser = function ($scope, $state, $event, user) {\n showSearchADUserDialog($scope, $event, user)\n .then(function (answer) {\n if (!answer) return;\n user.name = answer.fullName;\n user.userName = answer.userName;\n user.email=answer.email;\n });\n };\n\n this.updateUserFilterField = function ($scope, $state, $event, userId) {\n var deferred = $q.defer();\n var promises = [\n api.account.user.filterFields(userId),\n api.account.user.findFilters(userId)\n ];\n $q.all(promises).then(function (responses) {\n var filterFields = responses[0];\n var filters = responses[1];\n showUserFilterFieldDialog($scope, $event, userId, filterFields, filters)\n .then(function (response) {\n deferred.resolve(response);\n });\n },function (response) {\n $log.error(response);\n }\n );\n return deferred.promise;\n };\n\n function showDeleteConfirmDialog($scope, $event, user) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'DeleteUserDialogController as vm',\n templateUrl: 'app/main/apps/management/user/services/delete-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n user: user\n }\n })\n .then(function(answer) {\n deferred.resolve(answer);\n }, function() {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function() {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function(wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showDeleteUserRegisterRequestConfirmDialog($scope, $event) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'DeleteUserDialogController as vm',\n templateUrl: 'app/main/apps/management/user/services/delete-user-register-request-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showSaveConfirmDialog($scope, $event, user) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'SaveUserDialogController as vm',\n templateUrl: 'app/main/apps/management/user/services/save-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n user: user\n }\n })\n .then(function(answer) {\n deferred.resolve(answer);\n }, function() {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function() {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function(wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showSuccessDialog($scope, $event, title, body) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n console.log(\"aaa\")\n $mdDialog.show({\n controller: 'BasicSuccessDialogController as vm',\n templateUrl: 'app/main/apps/management/user/services/success-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body\n }\n })\n .then(function(answer) {\n deferred.resolve(answer);\n }, function(answer) {\n deferred.resolve();\n });\n $scope.$watch(function() {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function(wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showSearchADUserDialog($scope, $event, user) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'SearchADUserDialogController as vm',\n templateUrl: 'app/main/apps/management/user/services/search-ad-user-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n user: user\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showUserFilterFieldDialog($scope, $event, userId, filterFields, filters) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'SaveUserFilterFieldDialogController as vm',\n templateUrl: 'app/main/apps/management/user/services/user-filter-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n userId: userId,\n filterFields: filterFields,\n filters: filters\n }\n }).then(function (answer) {\n deferred.resolve(answer);\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n }\n\n function DeleteUserDialogController($scope, $state, $stateParams, $log, $mdDialog, user) {\n var vm = this;\n vm.user = user;\n vm.userId = $stateParams.id;\n vm.order = 'order';\n vm.orderDescending = false;\n vm.icons = ['none', 'icon-source-fork', 'icon-linode', 'icon-tooltip-text', 'icon-nfc-tap', 'icon-emoticon', 'icon-code-tags', 'icon-emoticon']\n\n vm.msScrollOptions = {\n suppressScrollX: true\n };\n\n vm.cancel = function() {\n $mdDialog.cancel();\n };\n vm.ok = function() {\n $mdDialog.hide(true);\n };\n\n }\n\n function SaveUserDialogController($scope, $state, $stateParams, $log, $mdDialog, user) {\n var vm = this;\n vm.user = user;\n\n vm.cancel = function() {\n $mdDialog.cancel();\n };\n vm.ok = function() {\n $mdDialog.hide(true);\n };\n\n }\n\n function BasicSuccessDialogController($mdDialog, title, body) {\n var vm = this;\n vm.title = title;\n vm.body = body;\n\n vm.cancel = function() {\n $mdDialog.cancel();\n };\n vm.ok = function() {\n $mdDialog.hide(true);\n };\n }\n\n function SearchADUserDialogController($scope, $state, $stateParams, $log, $mdDialog, api, user) {\n var vm = this;\n vm.user = user;\n vm.users = [];\n vm.filters = {\n search: ''\n };\n vm.pagination = {\n current: 1,\n last: 1\n };\n vm.itemCountForOnePage = 10;\n vm.item = null;\n\n\n vm.search = function search() {\n api.account.user.searchADUser(vm.filters.search)\n .then(function (response) {\n if (response)\n vm.users = response;\n else\n vm.users = [];\n var length = vm.groups.length;\n vm.pagination.last = calculatePageCounts(length);\n },\n function (response) {\n $log.error(response);\n });\n };\n\n function calculatePageCounts(count) {\n var l = vm.itemCountForOnePage;\n return Math.ceil(count / l);\n }\n\n vm.setCurrentPage = function (page) {\n if (page > 0 && page <= vm.pagination.last)\n vm.pagination.current = page;\n };\n\n vm.select = function (item) {\n angular.forEach(vm.users, function (user) {\n user.selected = false;\n });\n\n if (vm.item !== item) {\n item.selected = true;\n vm.item = item;\n } else {\n item.selected = false;\n vm.item = null;\n }\n };\n\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(vm.item);\n };\n }\n\n function SaveUserFilterFieldDialogController($scope, $state, $mdDialog, api, userId, filterFields, filters) {\n var vm = this;\n filters.forEach(function (k) {\n var field = filterFields.filter(function (m) { return k.key == m.fieldName })[0];\n if (field != null) {\n k.key = field.id;\n }\n })\n vm.filterFields = filterFields || [];\n vm.filters = filters || [];\n if (vm.filters.length == 0)\n vm.filters.push({ key: null, value: null });\n\n vm.filterCanBeAdded = function () {\n return vm.filters.length < vm.filterFields.length;\n }\n\n vm.addFilter = function () {\n if (vm.filters.length < vm.filterFields.length)\n vm.filters.push({ key: null, value: null });\n };\n\n vm.removeFilter = function (item) {\n if (vm.filters.length == 1) {\n vm.filters[0].key = null;\n vm.filters[0].value = null;\n } else {\n for (var i = vm.filters.length - 1; i--;) {\n if (vm.filters[i].key === item.key && vm.filters[i].value === item.value) vm.filters.splice(i, 1);\n }\n }\n };\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n\n vm.ok = function () {\n $mdDialog.hide(vm.filters);\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n var ngModule = angular\n .module('app.core',\n [\n 'ngAnimate',\n 'ngAria',\n 'ngCookies',\n 'ngMessages',\n 'ngResource',\n 'ngSanitize',\n 'ngMaterial',\n 'angular-chartist',\n 'chart.js',\n 'datatables',\n 'gridshore.c3js.chart',\n 'nvd3',\n 'pascalprecht.translate',\n 'timer',\n 'ui.router',\n 'uiGmapgoogle-maps',\n 'textAngular',\n 'ui.sortable',\n 'ng-sortable',\n 'xeditable',\n 'moment-picker',\n 'angular-jqcloud',\n 'ngFileUpload',\n 'ngDropify',\n 'angularUtils.directives.dirPagination',\n 'filereader',\n 'app.exception',\n 'angular-json-editor',\n 'fishbone',\n 'smDateTimeRangePicker',\n 'ngMaterialDateRangePicker',\n 'colorpicker'\n ]);\n\n var env = {};\n\n if (window) {\n Object.assign(env, window.__env);\n }\n\n ngModule.constant('__env', env);\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.core')\n .filter('filterByWorkspace', filterByWorkspace);\n\n /** @ngInject */\n function filterByWorkspace() {\n return function(items, workspace) {\n var filtered = [];\n if (!items) return filtered;\n if (items.length === 0 || !workspace) return items;\n /*\n items.forEach(function(item) {\n if (item.workspace.name === workspace) {\n filtered.push(item);\n }\n });*/\n\n for (var i = 0; i < items.length; i++) {\n if (items[i].workspaces != null) {\n for (var j = 0; j < items[i].workspaces.length; j++) {\n if (items[i].workspaces[j].name === workspace) {\n filtered.push(items[i]);\n }\n }\n }\n }\n\n\n return filtered;\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.core')\n .filter('filterByUserType', filterByUserType);\n\n /** @ngInject */\n function filterByUserType() {\n return function (items, type) {\n var filtered = [];\n if (!items) return filtered;\n if (items.length === 0 || !type) return items;\n\n items.forEach(function (item) {\n if (type.value === 'DEFAULT') {\n if (!item.type) {\n filtered.push(item);\n } else if (item.type === type.value) {\n filtered.push(item);\n }\n } else {\n if (item.type === type.value) {\n filtered.push(item);\n }\n }\n });\n\n return filtered;\n };\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.core')\n .filter('filterByRole', filterByRole);\n\n /** @ngInject */\n function filterByRole() {\n return function(items, role) {\n var filtered = [];\n if (!items) return filtered;\n if (items.length === 0 || !role) return items;\n\n items.forEach(function(item) {\n if (item.roles && angular.isArray(item.roles)) {\n item.roles.forEach(function(itemrole) {\n if (itemrole.name === role) {\n filtered.push(item);\n }\n });\n }\n\n });\n\n return filtered;\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.management')\n .controller('UsersController', UsersController);\n\n /** @ngInject */\n function UsersController($rootScope, $scope, $state, $stateParams, $log, $timeout, $translate, api, user, UserService, toastService, $location) {\n var vm = this;\n vm.users = [];\n vm.types = [];\n vm.user = user;\n vm.workspaces = [];\n //Methods\n vm.updateUserFilterField = updateUserFilterField;\n vm.itemCountForOnePage = 10;\n vm.pagination = {\n current: 1,\n last: 1\n };\n\n\n vm.isUserRequests = false;\n vm.userRequestType = 'register';\n vm.isUserRegisterRequestFormActive = false;\n vm.userRequestTypeOpen = false;\n vm.rightBottomSettingsButton = {\n isOpen: false,\n selectedMode: 'md-scale'\n };\n \n vm.filters = {\n search: '',\n workspace: null,\n role: null,\n type: null\n };\n vm.filtersDefaults = angular.copy(vm.filters);\n\n vm.order = 'order';\n vm.orderDescending = true;\n\n vm.sortableOptions = {\n handle: '.handle',\n forceFallback: true,\n ghostClass: 'todo-item-placeholder',\n fallbackClass: 'todo-item-ghost',\n fallbackOnBody: true,\n sort: true\n };\n vm.msScrollOptions = {\n suppressScrollX: true\n };\n\n vm.setCurrentPage = function (page) {\n if (page > 0 && page <= vm.pagination.last)\n vm.pagination.current = page;\n }\n\n vm.myFilter = function (item) {\n if (item.name != null) {\n return item.name.toLowerCase().includes(vm.filters.search.toLowerCase()) || item.userName.toLowerCase().includes(vm.filters.search.toLowerCase()) ? true : false;\n } else {\n return item.userName.toLowerCase().includes(vm.filters.search.toLowerCase()) ? true : false;\n }\n };\n\n function calculatePageCounts(count) {\n var l = vm.itemCountForOnePage;\n var lastpage = Math.ceil(count / l);\n return lastpage;\n }\n\n vm.setNumberOfPages = function () {\n vm.pagination.current = 1;\n vm.pagination.last = calculatePageCounts(vm.users.length);\n }\n\n $scope.$watchCollection('filtered', function () {\n if (!vm.users) return;\n\n var length = vm.users.length;\n if ($scope.filtered) {\n var length = $scope.filtered.length;\n }\n vm.pagination.last = calculatePageCounts(length);\n });\n api.account.user.list()\n .then(function (response) {\n vm.users = response;\n vm.pagination.last = calculatePageCounts(vm.users.length);\n },\n function (response) {\n $log.error(response);\n });\n\n vm.open = function open(item) {\n if (item.systemAdmin && vm.user.userName != item.userName) {\n toastService.serverError($translate.instant('MANAGEMENT.USER.ERRORS.USER_IS_ADMIN'));\n } else {\n $state.go('app.management.users.detail', {\n id: item.id\n });\n }\n };\n\n vm.openRequests = function (item) {\n $state.go('app.management.users.request', {\n id: item.id\n });\n }\n\n vm.openDemoRequests = function (item) {\n $state.go('app.management.users.demo', {\n id: item.id\n });\n }\n\n function updateUserFilterField($event, userId) {\n $event.stopPropagation();\n UserService.updateUserFilterField($scope, $state, $event, userId)\n .then(function (response) {\n api.account.user.savefilterFields(userId, response)\n .then(function (response) {\n \n },\n function (response) {\n $log.error(response);\n });\n }, function (err) {\n console.log(err);\n })\n }\n\n api.account.workspace.list()\n .then(function (response) {\n vm.workspaces = response;\n },\n function (response) {\n $log.error(response);\n });\n\n api.account.role.list()\n .then(function (response) {\n vm.roles = response;\n },\n function (response) {\n $log.error(response);\n });\n\n api.account.user.types()\n .then(function (response) {\n vm.types = response;\n },\n function (response) {\n $log.error(response);\n });\n\n api.account.user.findUserRegisterRequests()\n .then(function (response) {\n vm.userRegisterRequests = response;\n //vm.pagination.last = calculatePageCounts(vm.createUserRequests.length);\n },\n function (response) {\n $log.error(response);\n });\n\n api.account.user.findUserDemoRequests()\n .then(function (response) {\n vm.userDemoRequests = response;\n //vm.pagination.last = calculatePageCounts(vm.createUserRequests.length);\n },\n function (response) {\n $log.error(response);\n });\n\n api.webConfiguration.isUserRegisterRequestFormActive()\n .then(function (response) {\n vm.isUserRegisterRequestFormActive = response;\n },\n function (response) {\n $log.error(response);\n });\n\n function setUrlParams() {\n if ($location.search()[\"demo\"]) {\n vm.isUserRequests = true;\n vm.userRequestType = 'demo';\n }\n }\n\n vm.init = function () {\n setUrlParams();\n };\n\n vm.init();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.management')\n .controller('UserEditController', UserEditController);\n\n /** @ngInject */\n function UserEditController($rootScope, $scope, $state, $stateParams, $log, $q, $timeout, api, UserService, $$user, user, $$userRegisterRequest, $$userDemoRequest, $utils) {\n var vm = this;\n vm.mode = $stateParams.mode;\n vm.userRegisterRequest = $$userRegisterRequest;\n vm.userDemoRequest = $$userDemoRequest;\n vm.user = $$user;\n if (vm.userRegisterRequest) {\n vm.user.type = vm.userRegisterRequest.userType;\n vm.user.name = vm.userRegisterRequest.name;\n vm.user.userName = vm.userRegisterRequest.userName;\n vm.user.email = vm.userRegisterRequest.email;\n }\n vm.isEmailActive = false;\n vm.activeUser = user;\n vm.roles = [];\n vm.permissions = [];\n vm.workspaces = [];\n vm.filters = {\n workspace: '',\n role: ''\n };\n vm.samlActive = false;\n vm.submitting = false;\n //Methods\n\n vm.msScrollOptions = {\n suppressScrollX: true\n };\n vm.types = [];\n vm.analysisDocuments = [\"CALL_CENTER_VOICE\", \"VOICE_OF_CUSTOMER\", \"TWITTER_BLOG_FORUM\", \"REAL_WORLD_DATA\", \"SURVEY_DATA\", \"CHATBOT_DATA\", \"EMAIL_DATA\", \"IN_COMPANY_DOCUMENT\", \"OTHER\"];\n vm.selectedAnalysisDocuments = vm.userDemoRequest != null && vm.userDemoRequest.analysisdocument != null ? vm.userDemoRequest.analysisdocument : [];\n vm.analysisDocumentOther = null;\n\n vm.reasons = [\"ARTIFICIAL_INTELLIGENCE\", \"NLP\", \"BIG_DATA\", \"CLOUD\", \"REAL_TIME_DATA_ANALYSIS\", \"SENTIMENT_ANALYSIS\", \"CATEGORIZATION\", \"OTHER\"];\n vm.selectedReasons = vm.userDemoRequest != null && vm.userDemoRequest.reason != null ? vm.userDemoRequest.reason : [];\n vm.reasonOther = null;\n\n api.account.user.types()\n .then(function (response) {\n vm.types = response;\n },\n function (response) {\n $log.error(response);\n });\n\n api.saml.samlActive()\n .then(function (r) {\n if (r)\n vm.samlActive = r;\n }, function (err) {\n console.log(err);\n })\n\n api.account.workspace.list()\n .then(function (response) {\n vm.workspaces = response;\n },\n function (response) {\n $log.error(response);\n });\n\n api.webConfiguration.isMailActive()\n .then(function (response) {\n vm.isEmailActive = response;\n },\n function (response) {\n $log.error(response);\n });\n\n vm.save = function ($event) {\n UserService.save($scope, $state, $event, vm.user, vm.mode, vm.samlActive, vm.activeUser, vm.userRegisterRequest ? vm.userRegisterRequest.id : null, vm.isEmailActive);\n }\n\n vm.delete = function ($event) {\n UserService.delete($scope, $state, $event, vm.user);\n }\n\n vm.cancel = function () {\n $state.go('app.management.users.list');\n }\n\n vm.init = function () {\n if (vm.mode === 'detail') {\n loadWorkspaceRoles();\n }\n saveUserAudit();\n replaceOther();\n };\n\n function saveUserAudit() {\n if (vm.user.id == null) return;\n $utils.saveAudit(vm.user.id, \"USER\", \"OPEN\", vm.user.name);\n }\n\n vm.init();\n // workspace\n vm.workspaceChange = function () {\n loadWorkspaceRoles();\n }\n\n function loadWorkspaceRoles() {\n vm.roles = [];\n if (!vm.user.workspaces || vm.user.workspaces.length < 1) {\n vm.user.roles = [];\n return\n }\n ;\n var workspaceIds = [];\n vm.user.workspaces.forEach(function (w) {\n workspaceIds.push(w.id);\n });\n if (vm.user.roles && vm.user.roles.length > 0) {\n vm.updatedRoles = [];\n vm.user.roles.forEach(function (r) {\n if (r.workspaces && r.workspaces.length > 0) {\n r.workspaces.forEach(function (w) {\n if (workspaceIds.indexOf(w.id) != -1 && !vm.updatedRoles.includes(r)) {\n vm.updatedRoles.push(r);\n }\n });\n }\n });\n vm.user.roles = vm.updatedRoles;\n }\n\n api.account.role.listByWorkspaceIds(workspaceIds)\n .then(function (response) {\n vm.roles = response;\n },\n function (response) {\n $log.error(response);\n });\n }\n\n vm.searchWorkspace = function (query) {\n var results = query ? vm.workspaces.filter(createFilterForWorkspace(query)) : vm.workspaces;\n return results;\n }\n\n function createFilterForWorkspace(query) {\n var lowercaseQuery = angular.lowercase(query);\n return function filterFn(workspace) {\n var lowercaseName = angular.lowercase(workspace.name);\n return (lowercaseName.indexOf(lowercaseQuery) === 0);\n };\n }\n\n //\n\n // roles\n vm.autocompleteRequireMatch = true;\n\n vm.searchRole = function (query) {\n var results = query ? vm.roles.filter(createFilterForRole(query)) : [];\n return results;\n }\n\n function createFilterForRole(query) {\n var lowercaseQuery = angular.lowercase(query);\n return function filterFn(role) {\n var lowercaseName = angular.lowercase(role.name);\n return (lowercaseName.indexOf(lowercaseQuery) === 0);\n };\n }\n\n //\n\n vm.searchADUser = function ($event) {\n UserService.searchADUser($scope, $state, $event, vm.user);\n };\n\n vm.resetPassword = function ($event) {\n var userName = vm.user.userName;\n vm.submitting = true;\n api.account.resetPassword(userName)\n .then(function (response) {\n UserService.changePass($scope, $state, $event);\n vm.submitting = false;\n },\n function (response) {\n $log.error(response);\n });\n }\n\n vm.createNewUserFromUserRegisterRequest = function () {\n $state.go('app.management.users.request.new', {\n id: vm.userRegisterRequest.id\n });\n }\n\n function replaceOther() {\n vm.selectedAnalysisDocuments.forEach(function (k) {\n if (!vm.analysisDocuments.includes(k)) {\n vm.analysisDocumentOther = k;\n vm.selectedAnalysisDocuments.push(\"OTHER\");\n }\n })\n vm.selectedReasons.forEach(function (k) {\n if (!vm.reasons.includes(k)) {\n vm.reasonOther = k;\n vm.selectedReasons.push(\"OTHER\");\n }\n })\n }\n\n vm.toggle = function (item, list) {\n var idx = list.indexOf(item);\n if (idx > -1) {\n list.splice(idx, 1);\n }\n else {\n list.push(item);\n }\n };\n\n vm.exists = function (item, list) {\n if (!(item == 'CALL_CENTER_VOICE' || item == 'VOICE_OF_CUSTOMER' || item == 'TWITTER_BLOG_FORUM' || item == 'REAL_WORLD_DATA' ||\n item == 'SURVEY_DATA' || item == 'CHATBOT_DATA' || item == 'EMAIL_DATA' || item == 'IN_COMPANY_DOCUMENT' || item == 'ARTIFICIAL_INTELLIGENCE' ||\n item == 'NLP' || item == 'BIG_DATA' || item == 'CLOUD' || item == 'REAL_TIME_DATA_ANALYSIS' || item == 'SENTIMENT_ANALYSIS' || item == 'CATEGORIZATION' || item == 'OTHER')) return true;\n return list.indexOf(item) > -1;\n };\n\n vm.saveDemoRequest = function () {\n api.account.saveUserDemoRequest(vm.userDemoRequest)\n .then(function (response) {\n $state.go('app.management.users.list');\n },\n function (response) {\n $log.error(response);\n });\n }\n\n vm.activation = function ($event) {\n UserService.activation($scope, $state, $event, vm.user);\n }\n\n vm.deleteUserRegisterRequest = function ($event) {\n UserService.deleteUserRegisterRequest($scope, $state, $event, vm.userRegisterRequest.id);\n }\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.management')\n .service('RoleService', RoleService)\n .controller('DeleteRoleDialogController', DeleteRoleDialogController)\n .controller('SaveRoleDialogController', SaveRoleDialogController)\n .controller('BasicSuccessDialogController', BasicSuccessDialogController)\n .controller('SearchADGroupDialogController', SearchADGroupDialogController);\n\n /** @ngInject */\n function RoleService($q, $log, $translate, $mdMedia, $mdDialog, api) {\n // Delete Pipeline\n this.delete = function ($scope, $state, $event, role) {\n showDeleteConfirmDialog($scope, $event, role)\n .then(function (answer) {\n if (!answer) return;\n\n api.account.role.delete(role)\n .then(function (response) {\n var successTitle = $translate.instant('MANAGEMENT.ROLE.CONFIRM.DELETE_RESULT_SUCCESS_TITLE');\n var successBody = $translate.instant('MANAGEMENT.ROLE.CONFIRM.DELETE_RESULT_SUCCESS_BODY');\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function () {\n $state.go('app.management.roles.list');\n });\n },\n function (response) {\n $log.error(response);\n });\n });\n }\n\n this.save = function ($scope, $state, $event, role, permissions, mode) {\n var item = {\n role: role,\n permissions: permissions\n };\n if (mode === 'create') {\n api.account.role.save(item)\n .then(function (response) {\n var successTitle = $translate.instant('MANAGEMENT.ROLE.CONFIRM.CREATE_RESULT_SUCCESS_TITLE');\n var successBody = $translate.instant('MANAGEMENT.ROLE.CONFIRM.CREATE_RESULT_SUCCESS_BODY');\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function () {\n $state.go('app.management.roles.list');\n });\n },\n function (response) {\n $log.error(response);\n });\n } else {\n showSaveConfirmDialog($scope, $event, role)\n .then(function (answer) {\n if (!answer) return;\n api.account.role.save(item)\n .then(function (response) {\n var successTitle = $translate.instant('MANAGEMENT.ROLE.CONFIRM.SAVE_RESULT_SUCCESS_TITLE');\n var successBody = $translate.instant('MANAGEMENT.ROLE.CONFIRM.SAVE_RESULT_SUCCESS_BODY');\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function () {\n $state.go('app.management.roles.list');\n });\n },\n function (response) {\n $log.error(response);\n });\n });\n }\n }\n\n function showDeleteConfirmDialog($scope, $event, role) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'DeleteRoleDialogController as vm',\n templateUrl: 'app/main/apps/management/role/services/delete-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n role: role\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n }\n\n function showSaveConfirmDialog($scope, $event, role) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'SaveRoleDialogController as vm',\n templateUrl: 'app/main/apps/management/role/services/save-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n role: role\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showSuccessDialog($scope, $event, title, body) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'BasicSuccessDialogController as vm',\n templateUrl: 'app/main/apps/management/role/services/success-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body\n }\n })\n .then(function (answer) {\n deferred.resolve();\n }, function (answer) {\n deferred.resolve();\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n this.searchADGroup = function ($scope, $state, $event, role) {\n showSearchADGroupDialog($scope, $event, role)\n .then(function (answer) {\n if (!answer) return;\n role.group = answer;\n });\n };\n\n function showSearchADGroupDialog($scope, $event, role) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'SearchADGroupDialogController as vm',\n templateUrl: 'app/main/apps/management/role/services/search-ad-group-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n role: role\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n }\n\n function DeleteRoleDialogController($scope, $state, $stateParams, $log, $mdDialog, role) {\n var vm = this;\n vm.role = role;\n vm.roleId = $stateParams.id;\n vm.order = 'order';\n vm.orderDescending = false;\n vm.icons = ['none', 'icon-source-fork', 'icon-linode', 'icon-tooltip-text', 'icon-nfc-tap', 'icon-emoticon', 'icon-code-tags', 'icon-emoticon']\n\n vm.msScrollOptions = {\n suppressScrollX: true\n };\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n\n }\n\n function SaveRoleDialogController($scope, $state, $stateParams, $log, $mdDialog, role) {\n var vm = this;\n vm.role = role;\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n }\n\n function BasicSuccessDialogController($mdDialog, title, body) {\n var vm = this;\n vm.title = title;\n vm.body = body;\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n }\n\n function SearchADGroupDialogController($scope, $state, $stateParams, $log, $mdDialog, api, role) {\n var vm = this;\n vm.role = role;\n vm.groups = [];\n vm.filters = {\n search: ''\n };\n vm.pagination = {\n current: 1,\n last: 1\n };\n vm.itemCountForOnePage = 10;\n vm.item = null;\n\n\n vm.search = function search() {\n api.account.role.searchADGroup(vm.filters.search)\n .then(function (response) {\n if (response)\n vm.groups = response;\n else\n vm.groups = [];\n var length = vm.groups.length;\n vm.pagination.last = calculatePageCounts(length);\n },\n function (response) {\n $log.error(response);\n });\n };\n\n function calculatePageCounts(count) {\n var l = vm.itemCountForOnePage;\n return Math.ceil(count / l);\n }\n\n vm.setCurrentPage = function (page) {\n if (page > 0 && page <= vm.pagination.last)\n vm.pagination.current = page;\n };\n\n vm.select = function (item) {\n angular.forEach(vm.groups, function (group) {\n group.selected = false;\n });\n\n if (vm.item !== item) {\n item.selected = true;\n vm.item = item;\n } else {\n item.selected = false;\n vm.item = null;\n }\n };\n\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(vm.item.name);\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.core')\n .filter('filterByRoleType', filterByRoleType);\n\n /** @ngInject */\n function filterByRoleType() {\n return function (items, type) {\n var filtered = [];\n if (!items) return filtered;\n if (items.length === 0 || !type) return items;\n\n items.forEach(function (item) {\n if (type.value === 'DEFAULT') {\n if (!item.type) {\n filtered.push(item);\n } else if (item.type === type.value) {\n filtered.push(item);\n }\n } else {\n if (item.type === type.value) {\n filtered.push(item);\n }\n }\n });\n\n return filtered;\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.management')\n .controller('RoleListController', RoleListController);\n\n /** @ngInject */\n function RoleListController($rootScope, $scope, $state, $stateParams, $log, $timeout, $translate, api, RoleService) {\n var vm = this;\n vm.roles = [];\n vm.workspaces = [];\n vm.types = [];\n //Methods\n vm.itemCountForOnePage = 10;\n vm.pagination = {\n current: 1,\n last: 1\n };\n\n vm.filters = {\n search: '',\n workspace: null,\n type: null\n };\n vm.filtersDefaults = angular.copy(vm.filters);\n\n vm.order = '-';\n vm.orderDescending = true;\n\n vm.sortableOptions = {\n handle: '.handle',\n forceFallback: true,\n ghostClass: 'todo-item-placeholder',\n fallbackClass: 'todo-item-ghost',\n fallbackOnBody: true,\n sort: true\n };\n vm.msScrollOptions = {\n suppressScrollX: true\n };\n\n vm.myFilter = function (item) {\n if (item.definition != null) {\n return item.name.toLowerCase().includes(vm.filters.search.toLowerCase()) || item.definition.toLowerCase().includes(vm.filters.search.toLowerCase()) ? true : false;\n } else {\n return item.name.toLowerCase().includes(vm.filters.search.toLowerCase()) ? true : false;\n }\n };\n\n vm.setCurrentPage = function (page) {\n if (page > 0 && page <= vm.pagination.last)\n vm.pagination.current = page;\n }\n\n function calculatePageCounts(count) {\n var l = vm.itemCountForOnePage;\n var lastpage = Math.ceil(count / l);\n return lastpage;\n }\n\n vm.setNumberOfPages = function () {\n vm.pagination.current = 1;\n vm.pagination.last = calculatePageCounts(vm.roles.length);\n }\n\n $scope.$watchCollection('filtered', function () {\n if (!vm.roles) return;\n\n var length = vm.roles.length;\n if ($scope.filtered) {\n var length = $scope.filtered.length;\n }\n vm.pagination.last = calculatePageCounts(length);\n });\n\n api.account.role.list()\n .then(function (response) {\n vm.roles = response;\n vm.pagination.last = calculatePageCounts(vm.roles.length);\n },\n function (response) {\n $log.error(response);\n });\n\n vm.open = function open(item) {\n $state.go('app.management.roles.detail', {\n id: item.id\n });\n };\n\n api.account.workspace.list()\n .then(function (response) {\n vm.workspaces = response;\n },\n function (response) {\n $log.error(response);\n });\n\n api.account.role.types()\n .then(function (response) {\n vm.types = response;\n },\n function (response) {\n $log.error(response);\n });\n\n vm.init = function () {\n };\n\n vm.init();\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.management')\n .controller('RoleEditController', RoleEditController);\n\n /** @ngInject */\n function RoleEditController($rootScope, $scope, $state, $stateParams, $log, api, RoleService, $$role, user, $utils) {\n var vm = this;\n vm.user = user;\n vm.mode = $stateParams.mode;\n vm.role = $$role;\n if (!vm.role.workspaces || !(vm.role.workspaces instanceof Array))\n vm.role.workspaces = [];\n vm.permissions = [];\n vm.workspaces = [];\n vm.filters = {\n workspace: ''\n };\n vm.types = [];\n //Methods\n\n vm.msScrollOptions = {\n suppressScrollX: true\n };\n\n api.account.role.types()\n .then(function (response) {\n vm.types = response;\n },\n function (response) {\n $log.error(response);\n });\n\n api.account.permission.list(vm.role.id)\n .then(function (response) {\n vm.permissions = response;\n },\n function (response) {\n $log.error(response);\n });\n\n /*\n api.account.permission.list(vm.role.id)\n .then(function (response) {\n vm.permissions = response;\n },\n function (response) {\n $log.error(response);\n });*/\n\n api.account.workspace.list()\n .then(function (response) {\n vm.workspaces = response;\n },\n function (response) {\n $log.error(response);\n });\n\n vm.toggle = function (permission) {\n permission.allow = (!permission.allow);\n };\n\n vm.save = function ($event) {\n var permissions = getAllowedPermissions();\n RoleService.save($scope, $state, $event, vm.role, permissions, vm.mode);\n }\n\n vm.delete = function ($event) {\n RoleService.delete($scope, $state, $event, vm.role);\n };\n\n vm.cancel = function () {\n $state.go('app.management.roles.list');\n };\n\n vm.searchADGroup = function ($event) {\n RoleService.searchADGroup($scope, $state, $event, vm.role);\n };\n\n function getAllowedPermissions() {\n var allowed = [];\n angular.forEach(vm.permissions, function (area) {\n angular.forEach(area.scopes, function (scope) {\n angular.forEach(scope.permissions, function (permission) {\n if (permission.allow) {\n allowed.push(permission.name);\n }\n });\n });\n });\n\n return allowed;\n }\n\n vm.searchWorkspace = function (query) {\n var results = query ? vm.workspaces.filter(createFilterForWorkspace(query)) : vm.workspaces;\n return results;\n }\n\n function createFilterForWorkspace(query) {\n var lowercaseQuery = angular.lowercase(query);\n return function filterFn(workspace) {\n var lowercaseName = angular.lowercase(workspace.name);\n return (lowercaseName.indexOf(lowercaseQuery) === 0);\n };\n }\n\n vm.init = function () {\n if (vm.role.id != null) {\n $utils.saveAudit(vm.role.id, \"ROLE\", \"OPEN\", vm.role.name);\n }\n };\n\n vm.init();\n\n }\n})();\n\n(function() {\n \"use strict\";\n\n angular\n .module(\"app.management\")\n .controller(\"ModuleListController\", ModuleListController);\n\n /** @ngInject */\n function ModuleListController(\n $rootScope,\n $scope,\n $state,\n $stateParams,\n $log,\n $timeout,\n $translate,\n api,\n $mdSidenav,\n $q\n ) {\n var vm = this;\n vm.workspaces = [];\n vm.allModules = [];\n vm.facets = [];\n vm.backAllModules = [];\n vm.modules = [];\n vm.pipelines = [];\n vm.reports = [];\n vm.searchingText = null;\n vm.filterSidenav = buildToggler('main-sidenav');\n vm.idTitle = {\n name : 'id',\n search: null,\n order: false,\n desc: false\n }\n vm.nameTitle = {\n name : 'name',\n search: null,\n order: false,\n desc: false\n }\n vm.descriptionTitle = {\n name : 'description',\n search: null,\n order: false,\n desc: false\n }\n vm.workspaceTitle = {\n name : 'workspace',\n search: null,\n order: false,\n desc: false\n }\n vm.isActiveTitle = {\n name : 'isActive',\n search: null,\n order: false,\n desc: false\n }\n vm.dateTitle = {\n name : 'createDate',\n search: null,\n order: false,\n desc: false\n }\n vm.filters = [];\n vm.filters.push(vm.idTitle);\n vm.filters.push(vm.nameTitle);\n vm.filters.push(vm.descriptionTitle);\n vm.filters.push(vm.workspaceTitle);\n vm.filters.push(vm.isActiveTitle);\n vm.filters.push(vm.dateTitle);\n vm.filteredModuleType = 1;\n //Methods\n vm.updateModule = updateModule;\n vm.sorting = sorting;\n vm.searching = searching;\n vm.filterWorkspace = filterWorkspace;\n vm.findModules = findModules;\n vm.go = go;\n \n \n vm.pagination = {\n current: 1,\n last: false,\n first: false,\n total : 1,\n totalPage : (vm.allModules.count / 20)+1\n };\n\n vm.filterModuleType = filterModuleType;\n vm.order = \"order\";\n vm.orderDescending = false;\n\n vm.sortableOptions = {\n handle: \".handle\",\n forceFallback: true,\n ghostClass: \"todo-item-placeholder\",\n fallbackClass: \"todo-item-ghost\",\n fallbackOnBody: true,\n sort: true\n };\n vm.msScrollOptions = {\n suppressScrollX: true\n };\n\n function buildToggler(navID) {\n return function () {\n // Component lookup should always be available since we are not using `ng-if`\n $mdSidenav(navID)\n .toggle()\n .then(function () {\n $log.debug(\"toggle \" + navID + \" is done\");\n });\n };\n }\n\n vm.setCurrentPage = function(page) {\n if (page > 0 && page <= vm.pagination.last) vm.pagination.current = page;\n };\n\n function filterModuleType(){\n vm.allModules = vm.backAllModules.filter(function(item){\n if(vm.filteredModuleType)\n return item.moduleTypeId == vm.filteredModuleType;\n else\n return true;\n })\n }\n\n function go(type,id){\n if(type < 100){\n if(type == 5 || type == 6){\n $state.go('app.module.test', {\n id: id\n }); \n }else{\n $state.go('app.module.overview', {\n id: id\n }); \n }\n }else if(type == 100){\n $state.go('app.pipeline.settings', {\n id: id\n });\n }else if(type == 200){\n $state.go('app.report.overview', {\n id: id\n });\n }\n }\n\n\n function filterWorkspace(){\n vm.allModules = vm.backAllModules.filter(function(item){\n if(vm.workspaceTitle.search)\n return item.workspace.id === vm.workspaceTitle.search;\n else\n return true;\n })\n }\n\n function searching(field){\n var targetFilter = vm.filters.filter(function(item){ return item.name == field;})[0];\n if(!targetFilter) return;\n vm.allModules = vm.backAllModules.filter(function (m){ return m[field].indexOf(targetFilter.search) != -1;});\n /*if(targetFilter.search && targetFilter.search.length > 0){\n vm.allModules = vm.backAllModules.filter(function (m){ return m[field].indexOf(targetFilter.search) != -1;});\n }else{\n vm.allModules = JSON.parse(JSON.stringify(vm.backAllModules));\n }*/\n }\n\n function sorting(field,direction,active){\n var targetFilter = vm.filters.filter(function(item){ return item.name == field;})[0];\n if(!targetFilter) return;\n if(active){\n targetFilter.order = true; \n if(direction == 'desc')\n targetFilter.desc = true; \n else\n targetFilter.desc =false; \n vm.filters.filter(function(item){ return item != targetFilter;}).forEach(function(item){\n item.order = false;\n })\n\n if(targetFilter.order && direction == 'desc'){\n vm.allModules.sort(function (a, b){return a[field].localeCompare(b[field]);});\n }else if(targetFilter.order && direction == 'asc'){\n vm.allModules.sort(function (a, b){return b[field].localeCompare(a[field]);});\n }\n }else{\n targetFilter.order = false;\n }\n \n }\n\n function updateModule(item) {\n item.processing = true;\n api.management.modules.update(item.id, item.editObject).then(\n function(r) {\n item.name = item.editObject.name;\n item.description = item.editObject.description;\n item.workspace = item.editObject.workspace;\n item.isActive = item.editObject.isActive;\n item.processing = false;\n item.editMode = false;\n },\n function(err) {\n $log.error(err);\n item.processing = false;\n item.editMode = false;\n }\n );\n }\n\n function calculatePageCounts(count) {\n var l = 10;\n var lastpage = Math.ceil(count / l);\n return lastpage;\n }\n\n $scope.$watchCollection(\"filtered\", function() {\n if (!vm.roles) return;\n\n var length = vm.workspaces.length;\n if ($scope.filtered) {\n var length = $scope.filtered.length;\n }\n vm.pagination.last = calculatePageCounts(length);\n });\n\n //var searchPromises = [api.module.all(), api.pipeline.list(),api.report.list()];\n /* $q.all(searchPromises).then(function (results) {\n vm.modules = results[0];\n vm.pipelines = results[1];\n vm.reports = results[2];\n vm.allModules = vm.modules.concat(vm.pipelines,vm.reports);\n }, function (err) {\n $log.error(err);\n })*/\n\n function findModules(start,row,moduleId,searchText){\n var request = {\n query: searchText ? searchText : vm.searchingText,\n sort : null,\n type : vm.filteredModuleType,\n start : start,\n row : row,\n moduleIdFilter : moduleId?moduleId:null\n };\n api.management.modules.list(request).then(\n function(r) {\n var docs = r.moduleList;\n vm.facets = r.facets;\n vm.allModules = docs;\n vm.allModules.forEach(function(m) {\n m[\"editMode\"] = false;\n m[\"processing\"] = false;\n m[\"editObject\"] = {\n name: m.name,\n description: m.description,\n workspace: m.workspace,\n isActive: m.isActive,\n moduleTypeId: m.moduleTypeId\n };\n });\n vm.backAllModules = JSON.parse(JSON.stringify(vm.allModules));\n filterModuleType();\n vm.pagination.total = r.totalElements;\n vm.pagination.totalPage = r.totalPages;\n vm.pagination.first = r.first;\n vm.pagination.last = r.last;\n vm.pagination.current = r.number + 1;\n },\n function(err) {\n $log.error(err);\n }\n );\n \n }\n \n api.account.workspace.list().then(\n function(response) {\n vm.workspaces = response;\n vm.pagination.last = calculatePageCounts(vm.workspaces.length);\n },\n function(response) {\n $log.error(response);\n }\n );\n\n /*\n vm.open = function open(item) {\n $state.go('app.management.workspaces.detail', {\n id: item.id\n });\n };*/\n\n\n\n vm.init = function() {\n findModules(0,10);\n };\n\n vm.init();\n }\n})();\n\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.toolbar', [])\n \n .config(config);\n\n /** @ngInject */\n function config($translatePartialLoaderProvider)\n {\n $translatePartialLoaderProvider.addPart('app/toolbar');\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.toolbar')\n .service('ToolbarService', ToolbarService)\n .controller('ChangePasswordDialogController', ChangePasswordDialogController)\n .controller('BasicDialogController', BasicDialogController)\n .controller('UsageStatsDialogController', UsageStatsDialogController)\n \n /** @ngInject */\n function ToolbarService($q, $log, $translate, $mdMedia, $mdDialog, api, $stateParams,user) {\n\n this.showChangePasswordDialog = function ($scope, $event) {\n var deferred = $q.defer();\n changePasswordDialog($scope, $event)\n .then(function (answer) {\n if (!answer) return;\n else\n deferred.resolve(answer);\n });\n return deferred.promise;\n }\n function changePasswordDialog($scope, $event) {\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n var deferred = $q.defer();\n $mdDialog.show({\n controller: 'ChangePasswordDialogController as vm',\n templateUrl: 'app/toolbar/layouts/horizontal-navigation/services/change-password-dialog.html',\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen\n })\n .then(function(answer) {\n deferred.resolve(answer);\n }, function() {\n $log.log('You cancelled the dialog.');\n });\n return deferred.promise;\n };\n\n this.showUsageStatsDialog = function (workspaceId, $event) {\n var deferred = $q.defer();\n usageStatsDialog(workspaceId, $event)\n .then(function (answer) {\n if (!answer) return;\n else\n deferred.resolve(answer);\n });\n return deferred.promise;\n }\n function usageStatsDialog(workspaceId, $event) {\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n var deferred = $q.defer();\n $mdDialog.show({\n controller: 'UsageStatsDialogController as vm',\n templateUrl: 'app/toolbar/layouts/horizontal-navigation/services/usage-stats-dialog.html',\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n workspaceId: workspaceId\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n return deferred.promise;\n };\n }\n\n\n function showSuccessDialog($scope, $event, title, body) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'BasicDialogController as vm',\n templateUrl: 'app/main/apps/modules/services/basic-success-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body\n }\n })\n .then(function (answer) {\n deferred.resolve();\n }, function (answer) {\n deferred.resolve();\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function ChangePasswordDialogController($q, $scope, $state, $stateParams, $log, $mdDialog, $mdMedia, api,$translate,user) {\n var vm = this;\n vm.form = {};\n vm.submitting = false;\n vm.newPassword = null;\n vm.newPasswordConfirm = null;\n vm.oldPassword = null;\n function showSuccessDialog($scope, $event,title,body) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'BasicDialogController as vm',\n templateUrl: 'app/main/apps/modules/services/basic-success-dialog.html',\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body\n }\n })\n .then(function (answer) {\n deferred.resolve();\n }, function (answer) {\n deferred.resolve();\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n }\n vm.changePass = function ($scope, $event) {\n vm.submitting = true;\n var data = {};\n data.newPassword = vm.newPassword;\n data.newPasswordConfirm = vm.newPasswordConfirm;\n data.oldPassword = vm.oldPassword;\n api.account.changePass(data)\n .then(function (response) {\n showSuccessDialog($scope, $event, $translate.instant('CHANGEPASS.CHANGE_PASSWORD'), $translate.instant('CHANGEPASS.CHANGED'))\n .then(function () {\n $state.go('app.modules.list');\n });\n },\n function (response) {\n $log.error(response);\n vm.submitting = false;\n });\n };\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n\n \n }\n\n function UsageStatsDialogController($q, $scope, $state, $stateParams, $log, $mdDialog, $mdMedia, api, $translate, user, workspaceId, $mdToast) {\n var vm = this;\n var now = moment();\n vm.startDate = now.startOf('day').toDate();\n vm.endDate = now.startOf('day').toDate();\n\n vm.download = function () {\n var params = {};\n params.workspaceId = workspaceId;\n var startDate = moment(vm.startDate);\n var endDate = moment(vm.endDate);\n\n if (startDate.isSame(endDate)) {\n endDate = endDate.endOf('day');\n } else if (startDate.isAfter(endDate)) {\n $mdToast.show($mdToast.simple().textContent($translate.instant('REPORT.INFO.BIGGER_START_DATE')));\n return;\n }\n\n params.startDate = startDate.toISOString().split('.')[0] + \"Z\";\n params.endDate = endDate.toISOString().split('.')[0] + \"Z\";\n\n params.language = $translate.use();\n downloadJquery('/api/management/report/usage/statistic', params, 'POST');\n }\n\n function downloadJquery(url, data, method) {\n if (url && data) {\n data = typeof data === 'string' ? data : jQuery.param(data);\n data = data.replaceAll('%3A', ':')\n var inputs = '';\n jQuery.each(data.split('&'), function () {\n var pair = this.split('=');\n inputs += '';\n });\n jQuery('
' + inputs + '
')\n .appendTo('body').submit().remove();\n }\n }\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n\n }\n\n function BasicDialogController($mdDialog, title, body) {\n var vm = this;\n vm.title = title;\n vm.body = body;\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.sources')\n .service('SourceService', SourceService);\n\n /** @ngInject */\n function SourceService($q, $log, $translate, $mdMedia, $mdDialog, api, user, $settings, $state, $stateParams) {\n this.removeWebSource = function ($scope, $state, $event, websourceid) {\n var deferred = $q.defer();\n var title = $translate.instant('SOURCE.CONFIRM.REMOVE_TITLE');\n var body = $translate.instant('SOURCE.CONFIRM.REMOVE_BODY');\n showBasicDeleteDialog($scope, $event, title, body)\n .then(function (answer) {\n if (!answer) { deferred.resolve(\"CANCEL\"); return; }\n api.source.removeTemplate(websourceid)\n .then(function (response) {\n if (response) {\n var successTitle = $translate.instant('SOURCE.CONFIRM.REMOVE_RESULT_SUCCESS_TITLE');\n var successBody = $translate.instant('SOURCE.CONFIRM.REMOVE_RESULT_SUCCESS_BODY');\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function () {\n deferred.resolve(response);\n $state.go('app.modules.list');\n });\n } else {\n var successTitle = $translate.instant('SOURCE.CONFIRM.REMOVE_RESULT_FAIL_TITLE');\n var successBody = $translate.instant('SOURCE.CONFIRM.REMOVE_RESULT_FAIL_BODY');\n showFailDialog($scope, $event, successTitle, successBody)\n .then(function () {\n deferred.resolve(\"CANCEL\");\n });\n }\n },function (error) {\n var successTitle = $translate.instant('SHARED.MESSAGES.DROPIFY_ERROR');\n var successBody = $translate.instant('SOURCE.ERRORS.'+error.message);\n if(successBody == null || successBody == undefined){\n successBody = $translate.instant('SHARED.MESSAGES.DROPIFY_ERROR')\n }\n $log.error(error);\n showFailDialog($scope, $event, successTitle, successBody)\n .then(function () {\n deferred.resolve(\"CANCEL\");\n });\n });\n });\n return deferred.promise;\n }\n\n this.copyWebSource = function ($scope, $state, $event, websourceid) {\n var deferred = $q.defer();\n var title = $translate.instant('SOURCE.CONFIRM.COPY_TITLE');\n var body = $translate.instant('SOURCE.CONFIRM.COPY_BODY');\n showCreateTopicDialog($scope, $event, title, body)\n .then(function (answer) {\n if (!answer) { deferred.resolve(\"CANCEL\"); return; }\n api.source.copyWebsource(user.selectedWorkspace.id,websourceid)\n .then(function (response) {\n var successTitle = $translate.instant('SOURCE.CONFIRM.COPY_RESULT_SUCCESS_TITLE');\n var successBody = $translate.instant('SOURCE.CONFIRM.COPY_RESULT_SUCCESS_BODY');\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function () {\n deferred.resolve(response);\n $state.go('app.modules.list');\n });\n },function (error) {\n var successTitle = $translate.instant('SHARED.MESSAGES.DROPIFY_ERROR');\n var successBody = $translate.instant('SOURCE.ERRORS.'+error.message);\n if(successBody == null || successBody == undefined){\n successBody = $translate.instant('SHARED.MESSAGES.DROPIFY_ERROR')\n }\n $log.error(error);\n showFailDialog($scope, $event, successTitle, successBody)\n .then(function () {\n deferred.resolve(\"CANCEL\");\n });\n });\n });\n return deferred.promise;\n }\n\n this.sourceUrlRuleTrace = function($scope, $state, $event, url, wsId, templateId) {\n\n var deferred = $q.defer();\n api.source.sourceUrlRuleTrace(url, wsId, templateId)\n .then(function(response) {\n deferred.resolve(response);\n }).catch(function(error) {\n var successTitle = $translate.instant('SHARED.MESSAGES.DROPIFY_ERROR');\n var successBody = $translate.instant('SOURCE.ERRORS.'+error.message);\n showFailDialog($scope, $event, successTitle, successBody)\n .then(function () {\n deferred.resolve(\"CANCEL\");\n });\n\n });\n return deferred.promise;\n }\n\n this.saveWebSource = function ($scope, $state, $event, websource, topics, rules) {\n var deferred = $q.defer();\n if (websource.id != null) {\n var title = $translate.instant('SOURCE.CONFIRM.SAVE_TITLE');\n var body = $translate.instant('SOURCE.CONFIRM.SAVE_BODY');\n showCreateTopicDialog($scope, $event, title, body)\n .then(function (answer) {\n if (!answer) { deferred.resolve(\"CANCEL\"); return; }\n setRules(rules, websource);\n websource.topics = topics;\n websource.workspace = user.selectedWorkspace.id;\n if(websource.type == undefined || websource.type == null){\n websource.type = 'PRIVATE';\n }\n if(websource.type == 'PUBLIC'){\n websource.workspace = null;\n }\n api.source.saveTemplate(websource)\n .then(function (response) {\n var successTitle = $translate.instant('SOURCE.CONFIRM.SAVE_RESULT_SUCCESS_TITLE');\n var successBody = $translate.instant('SOURCE.CONFIRM.SAVE_RESULT_SUCCESS_BODY');\n var deferResponse = {\n status: 'SAVE',\n data: response\n };\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function (response) {\n deferred.resolve(deferResponse);\n //$state.go('app.modules.list');\n });\n },function (error) {\n var successTitle = $translate.instant('SHARED.MESSAGES.DROPIFY_ERROR');\n var successBody = $translate.instant('SOURCE.ERRORS.'+error.message);\n if(successBody == null || successBody == undefined){\n successBody = $translate.instant('SHARED.MESSAGES.DROPIFY_ERROR')\n }\n $log.error(error);\n showFailDialog($scope, $event, successTitle, successBody)\n .then(function () {\n deferred.resolve(\"CANCEL\");\n });\n });\n });\n } else {\n setRules(rules, websource);\n websource.topics = topics;\n websource.workspace = user.selectedWorkspace.id;\n if(websource.type == undefined || websource.type == null){\n websource.type = 'PRIVATE';\n }\n if(websource.type == 'PUBLIC'){\n websource.workspace = null;\n }\n api.source.saveTemplate(websource)\n .then(function (response) {\n var successTitle = $translate.instant('SOURCE.CONFIRM.CREATE_RESULT_SUCCESS_TITLE');\n var successBody = $translate.instant('SOURCE.CONFIRM.CREATE_RESULT_SUCCESS_BODY');\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function () {\n deferred.resolve(\"CREATE\");\n $state.go('app.modules.list');\n });\n },\n function (error) {\n var successTitle = $translate.instant('SHARED.MESSAGES.DROPIFY_ERROR');\n var successBody = $translate.instant('SOURCE.ERRORS.'+error.message);\n if(successBody == null || successBody == undefined){\n successBody = $translate.instant('SHARED.MESSAGES.DROPIFY_ERROR')\n }\n $log.error(error);\n showFailDialog($scope, $event, successTitle, successBody)\n .then(function () {\n deferred.resolve(\"CANCEL\");\n });\n deferred.resolve(\"CANCEL\");\n });\n }\n\n\n return deferred.promise;\n }\n this.saveTopic = function ($scope, $state, $event, rules, topic) {\n var deferred = $q.defer();\n if(topic.type == undefined || topic.type == null){\n topic.type = 'PRIVATE';\n }\n if(topic.type == 'PUBLIC'){\n topic.workspace = null;\n }\n if (topic.id != null) {\n var title = $translate.instant('TOPIC.CONFIRM.SAVE_TITLE');\n var body = $translate.instant('TOPIC.CONFIRM.SAVE_BODY');\n showCreateTopicDialog($scope, $event, title, body)\n .then(function (answer) {\n if (!answer) { deferred.resolve(\"CANCEL\"); return; }\n setRules(rules, topic);\n console.log(topic)\n api.source.saveTopic(topic)\n .then(function (response) {\n var successTitle = $translate.instant('TOPIC.CONFIRM.SAVE_RESULT_SUCCESS_TITLE');\n var successBody = $translate.instant('TOPIC.CONFIRM.SAVE_RESULT_SUCCESS_BODY');\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function () {\n deferred.resolve(response);\n //$state.go('app.modules.list');\n /* if ($stateParams.websourceid != null) {\n $state.go('app.sources.web.edit', {\n websourceid: $stateParams.websourceid\n });\n } else {\n $state.go('app.sources.web.new');\n } */\n });\n },function(error) {\n var successTitle = $translate.instant('SHARED.MESSAGES.DROPIFY_ERROR');\n var successBody = $translate.instant('TOPIC.ERRORS.'+error.message);\n if(successBody == null || successBody == undefined){\n successBody = $translate.instant('SHARED.MESSAGES.DROPIFY_ERROR')\n }\n $log.error(error);\n showFailDialog($scope, $event, successTitle, successBody)\n .then(function () {\n deferred.resolve(\"CANCEL\");\n });\n });\n });\n } else {\n setRules(rules, topic);\n console.log(topic)\n api.source.saveTopic(topic)\n .then(function (response) {\n var successTitle = $translate.instant('TOPIC.CONFIRM.CREATE_RESULT_SUCCESS_TITLE');\n var successBody = $translate.instant('TOPIC.CONFIRM.CREATE_RESULT_SUCCESS_BODY');\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function () {\n deferred.resolve(response);\n //$state.go('app.modules.list');\n if ($stateParams.websourceid != null) {\n $state.go('app.sources.web.edit', {\n websourceid: $stateParams.websourceid\n });\n } else {\n $state.go('app.sources.web.new');\n }\n });\n },function (error) {\n var successTitle = $translate.instant('SHARED.MESSAGES.DROPIFY_ERROR');\n var successBody = $translate.instant('TOPIC.ERRORS.'+error.message);\n if(successBody == null || successBody == undefined){\n successBody = $translate.instant('SHARED.MESSAGES.DROPIFY_ERROR')\n }\n $log.error(error);\n showFailDialog($scope, $event, successTitle, successBody)\n .then(function () {\n deferred.resolve(\"CANCEL\");\n });\n });\n }\n\n \n return deferred.promise;\n }\n \n this.removeTopic = function ($scope, $state, $event, topicid) {\n var deferred = $q.defer();\n var title = $translate.instant('TOPIC.CONFIRM.REMOVE_TITLE');\n var body = $translate.instant('TOPIC.CONFIRM.REMOVE_BODY');\n showBasicDeleteDialog($scope, $event, title, body)\n .then(function (answer) {\n if (!answer) { deferred.resolve(\"CANCEL\"); return; }\n api.source.removeTopic(topicid)\n .then(function (response) {\n if (response) {\n var successTitle = $translate.instant('TOPIC.CONFIRM.REMOVE_RESULT_SUCCESS_TITLE');\n var successBody = $translate.instant('TOPIC.CONFIRM.REMOVE_RESULT_SUCCESS_BODY');\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function () {\n deferred.resolve(response);\n $state.go('app.modules.list');\n });\n } else {\n var successTitle = $translate.instant('TOPIC.CONFIRM.REMOVE_RESULT_FAIL_TITLE');\n var successBody = $translate.instant('TOPIC.CONFIRM.REMOVE_RESULT_FAIL_BODY');\n showFailDialog($scope, $event, successTitle, successBody)\n .then(function () {\n deferred.resolve(\"CANCEL\");\n });\n }\n },\n function (error) {\n var successTitle = $translate.instant('SHARED.MESSAGES.DROPIFY_ERROR');\n var successBody = $translate.instant('TOPIC.ERRORS.'+error.message);\n if(successBody == null || successBody == undefined){\n successBody = $translate.instant('SHARED.MESSAGES.DROPIFY_ERROR')\n }\n $log.error(error);\n showFailDialog($scope, $event, successTitle, successBody)\n .then(function () {\n deferred.resolve(\"CANCEL\");\n });\n });\n });\n return deferred.promise;\n }\n\n this.showSuccessDialog = showSuccessDialog;\n\n function showCreateTopicDialog($scope, $event, title, body) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'BasicDialogController as vm',\n templateUrl: 'app/main/apps/sources/services/basic-confirm-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body,\n state: $state\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function (answer) {\n deferred.resolve(answer);\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n }\n\n function showBasicDeleteDialog($scope, $event, title, body) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'BasicDialogController as vm',\n templateUrl: 'app/main/apps/sources/services/basic-delete-confirm-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body,\n state: $state\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function (answer) {\n deferred.resolve(answer);\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n }\n\n function showSuccessDialog($scope, $event, title, body) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'BasicSuccessDialogController as vm',\n templateUrl: 'app/main/apps/pipelines/services/basic-success-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function (answer) {\n deferred.resolve(answer);\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n }\n\n function showFailDialog($scope, $event, title, body) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'BasicDialogController as vm',\n templateUrl: 'app/main/apps/modules/services/basic-fail-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body\n }\n })\n .then(function (answer) {\n deferred.resolve();\n }, function (answer) {\n deferred.resolve();\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n }\n\n var selecteds = [\"selectedCategories\", \"selectedSites\", \"selectedLanguages\", \"selectedKeywords\", \"selectedSitetypes\", \"selectedContenttypes\"];\n var conditionTypes = [\"CATEGORY\", \"SITE\", \"LANGUAGE\", \"KEYWORD\", \"SITE_TYPE\", \"CONTENT_TYPE\"];\n\n function setRules(rules, entity) {\n entity.rules = [];\n for (var j = 0; j < rules.length; j++) {\n var conditions = [];\n for (var i = 0; i < selecteds.length; i++) {\n var values = [];\n rules[j][selecteds[i]].values.forEach(function (k) {\n values.push(k);\n });\n if(values.length !== 0){\n conditions.push({\n type: conditionTypes[i],\n values: values,\n operator: rules[j][selecteds[i]].operator\n })\n }\n \n }\n rules[j].conditions = conditions;\n entity.rules.push(rules[j]);\n }\n }\n }\n\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.sources')\n .service('RuleAnalysisService', RuleAnalysisService)\n .controller('RuleAnalysisController', RuleAnalysisController);\n\n /** @ngInject */\n function RuleAnalysisService($q, $log, $translate, $mdMedia, $mdDialog, api, user, $settings, $state, $stateParams) {\n\n this.showRuleAnalysis = function ($scope, $state, $event, rule, siteTypes, categories, contentTypes, languages) {\n var deferred = $q.defer();\n var title = $translate.instant('SOURCE.RULE_ANALYSIS.NAME');\n rule = JSON.parse(JSON.stringify(rule));\n showRuleAnalysisDialog($scope, $event, title, rule, siteTypes, categories, contentTypes, languages)\n .then(function (answer) {\n if (!answer) { deferred.resolve(\"CANCEL\"); return; };\n\n });\n return deferred.promise;\n }\n\n\n function showRuleAnalysisDialog($scope, $event, title, rule, siteTypes, categories, contentTypes, languages) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'RuleAnalysisController as vm',\n templateUrl: 'app/main/apps/sources/services/rule-analysis-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n state: $state,\n rule: rule,\n siteTypes: siteTypes,\n categories: categories,\n contentTypes: contentTypes,\n languages: languages\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function (answer) {\n deferred.resolve(answer);\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n \n }\n\n function RuleAnalysisController($mdDialog, title, rule, siteTypes, categories, contentTypes, languages, api, $mdMenu, $q, user, $translate) {\n var vm = this;\n vm.user = user;\n vm.title = title;\n vm.rule = rule;\n vm.siteTypes = siteTypes;\n vm.categories = categories;\n vm.contentTypes = contentTypes;\n vm.languages = languages;\n vm.documents = [];\n vm.document = null;\n vm.loading = false;\n vm.page = 1;\n vm.autocompleteRequireMatch = true;\n vm.isDatePickerCreatorStarted = false;\n vm.filters = {\n keyword: ''\n }\n vm.searchRule = searchRule;\n vm.collapsed = true;\n\n vm.pagination = {\n number: 1,\n current: 1,\n last: 1,\n count: 1,\n readyCount: 0,\n totalNumber: 1,\n };\n vm.setCurrentPage = setCurrentPage;\n vm.afterDatePicker = {\n startDate: new Date(new Date().getFullYear(), 0, 1),\n endDate: new Date()\n };\n\n function searchRule() {\n vm.loading = true;\n var selecteds = [\"selectedCategories\", \"selectedSites\", \"selectedLanguages\", \"selectedKeywords\", \"selectedSitetypes\", \"selectedContenttypes\"];\n var conditionTypes = [\"CATEGORY\", \"SITE\", \"LANGUAGE\", \"KEYWORD\", \"SITE_TYPE\", \"CONTENT_TYPE\"];\n var conditions = [];\n for (var i = 0; i < selecteds.length; i++) {\n var values = [];\n vm.rule[selecteds[i]].values.forEach(function (k) {\n values.push(k);\n })\n conditions.push({\n type: conditionTypes[i],\n values: values,\n operator: vm.rule[selecteds[i]].operator\n })\n }\n var rule = Object.assign({},vm.rule);\n const modelConditions =[];\n for (var j = 0; j < selecteds.length; j++) {\n var condition = conditions.filter(function (k) {\n return k.type == conditionTypes[j];\n })[0];\n if(condition.values.length != 0){\n modelConditions.push(condition);\n }\n }\n rule.conditions = modelConditions;\n var ruleSearchModel = {\n rule: rule,\n startDate: vm.startDate,\n endDate: vm.endDate\n }\n api.source.searchRule(ruleSearchModel, vm.page)\n .then(function (response) {\n vm.loading = false;\n vm.documents = response.documents;\n vm.pagination.current = vm.page;\n vm.pagination.number = vm.pagination.current;\n vm.pagination.count = response.numFound;\n vm.pagination.last = calculatePageCounts(response.numFound);\n vm.pagination.totalNumber = Math.ceil(vm.pagination.count / 10);\n },\n function (response) {\n $log.error(response);\n });\n }\n\n vm.searchKeywords = function (query) {\n var def = $q.defer();\n var addNeyKeyword = [{ name: query, question: true }]\n if (query.length == 3) {\n api.source.getKeywords(vm.user.selectedWorkspace.id, query)\n .then(function (response) {\n var flag = response.filter(function (m) { return m.name == query });\n if (flag.length < 1) {\n response = addNeyKeyword.concat(response);\n }\n var modifiedResponse = [];\n for(var i =0;i 1 ? getNewChipGroupNumber() : -1;\n for (var j = 0; j < splitedCatValues.length; j++) {\n var catValue = splitedCatValues[j].substring(1, splitedCatValues[j].length - 1)\n var splitSentiment = catValue.split(\"|\");\n var splitLevels = splitSentiment[0].split(\"->\");\n var chip = {\n key: moduleId,\n value: splitLevels[splitLevels.length - 1],\n type: 100,\n group: group,\n operand: splitedCatValues.length > 1 ? \"OR\" : \"AND\", //group == -1 ? \"AND\" : \"OR\",\n titleKey: splitLevels.length > 1 ? splitLevels[splitLevels.length - 2] : moduleName,\n level: splitLevels.length,\n aspectSentiment: splitSentiment[1] ? splitSentiment[1] : \"\"\n }\n if (splitLevels.length > 1) {\n var parentString = splitLevels[0];\n for (var i = 1; i < splitLevels.length - 1; i++) {\n parentString = parentString + \"->\" + splitLevels[i];\n }\n chip.parentString = parentString;\n }\n chips.push(chip)\n }\n }\n }\n\n if (parameters.filter) {\n for (var i = 0; i < parameters.filter.length; i++) {\n var filter = parameters.filter[i];\n if (parameters.filter[i].startsWith(\"(\") && parameters.filter[i].endsWith(\")\")) {\n filter = parameters.filter[i].substring(1, parameters.filter[i].length - 1);\n }\n var splittedFilter = filter.split(\" OR \");\n var group = splittedFilter.length > 1 ? getNewChipGroupNumber() : -1;\n var operand = splittedFilter.length > 1 ? \"OR\" : \"AND\";\n for (var j = 0; j < splittedFilter.length; j++) {\n var splitKeyValue = splittedFilter[j].split(\"\\\":\\\"\");\n var key = splitKeyValue[0].substring(1, splitKeyValue[0].length);\n var value = splitKeyValue[1].substring(0, splitKeyValue[1].length - 1);\n chips.push({\n key: key,\n value: value,\n type: 300,\n group: group,\n operand: operand,\n titleKey: getChipTitleKey(key)\n })\n }\n }\n }\n\n if (parameters.filterChips) {\n for (var i = 0; i < parameters.filterChips.length; i++) {\n var flag = true;\n for (var j = 0; j < chips.length; j++) {\n if (parameters.filterChips[j] && parameters.filterChips[j].key == chips[i].key && parameters.filterChips[j].value == chips[i].value) {\n flag = false;\n }\n }\n if (flag) {\n chips.push(parameters.filterChips[i]);\n }\n }\n }\n\n return chips;\n }\n\n function getChipTitleKey(key) {\n switch (key) {\n case \"url_s\":\n return \"Url\";\n case \"original_id_s\":\n return \"Id\";\n default:\n return key;\n }\n }\n\n this.isThisFieldType = function (type, value) {\n return (value - (value % 100)) == type;\n }\n\n this.isThisFieldSubType = function (type, value) {\n return (value - (value % 10)) == type;\n }\n\n this.isTextNominal = function (type) {\n return type == 300 || type == 310;\n }\n\n this.isNumericNominal = function (type) {\n return type == 301 || type == 311;\n }\n\n this.isMultiValuedTextNominal = function (type) {\n return type == 302 || type == 312;\n }\n\n this.isMultiValuedNumericNominal = function (type) {\n return type == 303 || type == 313;\n }\n\n this.isSameValueType = function(type1, type2){\n if (this.isTextNominal(type1)) {\n return this.isTextNominal(type2);\n } else if (this.isNumericNominal(type1)) {\n return this.isNumericNominal(type2);\n } else if (this.isMultiValuedTextNominal(type1)) {\n return this.isMultiValuedTextNominal(type2);\n } else if (this.isMultiValuedNumericNominal(type1)) {\n return this.isMultiValuedNumericNominal(type2);\n }\n return type1 == type2;\n }\n\n this.getPatternFilters = function (reportId) {\n var patternFilter = patternFilters.filter(function (f) { return f.reportId == reportId; });\n return patternFilter.length == 0 ? {} : patternFilter[0].filter;\n }\n\n this.setPatternFilters = function (reportId, filter) {\n var founded = patternFilters.filter(function (f) { return f.reportId == reportId; })[0];\n if (founded) {\n founded.filter = filter;\n } else {\n patternFilters.push({\n reportId: reportId,\n filter: filter\n });\n }\n }\n\n this.getFilterChips = function (reportId, defaultFilterChipsString) {\n var founded = filterChips.filter(function (f) { return f.reportId == reportId; });\n if(founded.length == 0){\n return JSON.parse(defaultFilterChipsString);\n }else{\n return founded[0].chips;\n }\n }\n\n this.setFilterChips = function (reportId, chips) {\n var founded = filterChips.filter(function (f) { return f.reportId == reportId; })[0];\n if (founded) {\n founded.chips = chips;\n } else {\n filterChips.push({\n reportId: reportId,\n chips: chips\n });\n }\n }\n\n this.getQuery = function(reportId){\n return queries.filter(function(f){ return f.reportId == reportId;})[0];\n }\n\n this.setQuery = function(reportId,query){\n var founded = queries.filter(function(f){ return f.reportId == reportId;})[0];\n if(founded){\n founded.query = query;\n }else{\n queries.push({\n reportId:reportId,\n query:query\n });\n }\n }\n\n this.removeQuery = function(reportId){\n queries = queries.filter(function(f){ return f.reportId != reportId;});\n }\n\n this.removeAllQueries = function(){\n queries = [];\n }\n\n this.hasData = function (id) {\n var deferred = $q.defer();\n api.report.hasData(id)\n .then(function (response) {\n deferred.resolve(response);\n },\n function (response) {\n $log.error(response);\n });\n return deferred.promise;\n }\n this.getReport = function (id) {\n var deferred = $q.defer();\n api.report.get(id)\n .then(function (response) {\n deferred.resolve(response);\n },\n function (response) {\n $log.error(response);\n });\n return deferred.promise;\n }\n\n this.createReport = function ($scope, $state, $event, report, workspaces) {\n\n var createReportTitle = $translate.instant('REPORT.CREATE');\n \n var lastWorkspace = user.workspaces.filter(function (a) { return a.id == $settings.commonSettings.lastWorkspaceId });\n var otherWorkspaces = user.workspaces.filter(function (a) { return a.id != $settings.commonSettings.lastWorkspaceId });\n var workspace = lastWorkspace.concat(otherWorkspaces);\n\n showCreateReportDialog($scope, $event, report, createReportTitle, workspace, user.permissions)\n .then(function (answer) {\n if (!answer) return;\n report.workspaceId = answer.id;\n api.report.save(report)\n .then(function (response) {\n $state.go('app.modules.list');\n },\n function (response) {\n $log.error(response);\n });\n });\n }\n\n function showCreateReportDialog($scope, $event, report, title, workspaces, workspacePermissions) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'ReportCreateDialogController as vm',\n templateUrl: 'app/main/apps/reports/views/create/create-report-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n report: report,\n title: title,\n workspaces: workspaces,\n workspacePermissions: workspacePermissions\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n this.showReportDataNote = function ($scope,$event,data) {\n showReportDataNoteDialog($scope,$event,data)\n .then(function (answer) {\n if (!answer) return;\n })\n }\n\n function showReportDataNoteDialog($scope,$event,data) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'ReportNoteDialogController as vm',\n templateUrl: 'app/main/apps/reports/views/edit/report-document-note-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n data: data\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n this.addStopLabel = function ($scope, $state, $event, keyword) {\n var confirmTitle = $translate.instant('REPORT.KEYWORD_CHART.CONFIRM.ADD_STOPLABEL_TITLE');\n var confirmBody = $translate.instant('REPORT.KEYWORD_CHART.CONFIRM.ADD_STOPLABEL_BODY', {\n name: keyword\n });\n\n var successTitle = $translate.instant('REPORT.KEYWORD_CHART.SUCCESS.ADD_STOPLABEL_TITLE');\n var successBody = $translate.instant('REPORT.KEYWORD_CHART.SUCCESS.ADD_STOPLABEL_BODY', {\n name: keyword\n });\n\n return showAddDialog($scope, $event, confirmTitle, confirmBody)\n .then(function (answer) {\n return showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function () {\n return true;\n });\n },\n function (response) {\n $log.error(response);\n return false;\n });\n }\n\n this.addNonVisibleChangeCategory = function ($scope, $state, $event, category) {\n var confirmTitle = $translate.instant('REPORT.DASHBOARD_TEMPLATE_2.CATEGORY_DATA_COMPARE.CONFIRM.ADD_NONVISIBLE_TITLE');\n var confirmBody = $translate.instant('REPORT.DASHBOARD_TEMPLATE_2.CATEGORY_DATA_COMPARE.CONFIRM.ADD_NONVISIBLE_BODY', {\n name: category.name\n });\n\n var successTitle = $translate.instant('REPORT.DASHBOARD_TEMPLATE_2.CATEGORY_DATA_COMPARE.SUCCESS.ADD_NONVISIBLE_TITLE');\n var successBody = $translate.instant('REPORT.DASHBOARD_TEMPLATE_2.CATEGORY_DATA_COMPARE.SUCCESS.ADD_NONVISIBLE_TITLE', {\n name: category.name\n });\n\n return showAddDialog($scope, $event, confirmTitle, confirmBody)\n .then(function (answer) {\n return showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function () {\n return true;\n });\n },\n function (response) {\n $log.error(response);\n return false;\n });\n }\n\n this.updateReport = function ($scope, $state, $event, report) {\n var confirmTitle = $translate.instant('REPORT.CONFIRM.UPDATE_REPORT_INFORMATION_TITLE');\n var confirmBody = $translate.instant('REPORT.CONFIRM.UPDATE_REPORT_INFORMATION_BODY');\n\n var successTitle = $translate.instant('REPORT.CONFIRM.UPDATE_REPORT_INFORMATION_SUCCESS_TITLE');\n var successBody = $translate.instant('REPORT.CONFIRM.UPDATE_REPORT_INFORMATION_SUCCESS_BODY');\n\n showUpdateConfirmDialog($scope, $event, confirmTitle, confirmBody)\n .then(function (answer) {\n if (!answer) return;\n api.report.update(report)\n .then(function (response) {\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function () {\n $state.go($state.current, {}, {reload: true});\n });\n },\n function (response) {\n $log.error(response);\n });\n });\n }\n\n this.confirmUploadMappings = function ($scope, $state, $translate, $event, reportId, fileId, uploadMappings) {\n var confirmTitle = $translate.instant('REPORT.DATA_UPLOAD.APPROVE_FIELD_EDITS');\n var confirmBody = {'uploadMappings':uploadMappings,'reportId':reportId,'fileId':fileId};\n showUploadMappingsConfirmDialog($scope, $translate, $event, confirmTitle, confirmBody)\n .then(function (answer) {\n if (!answer) return;\n console.log(uploadMappings)\n api.report.saveFileMappings(reportId,fileId,uploadMappings)\n .then(function(res){\n $state.go('app.report.datasummary', {\n id: reportId\n }, {\n reload: true\n });\n },function(err){\n console.log(err);\n }); \n \n });\n }\n\n this.warning = function($scope, $event, header, problem) {\n showWarningDialog($scope, $event, header, problem)\n .then(function (answer) {\n return;\n });\n }\n\n\n this.selectUploadMappingsTemplate = function ($scope, $state, $event, reportId) {\n var deferred = $q.defer();\n var confirmTitle = $translate.instant('REPORT.DATA_UPLOAD.SELECT_TEMPLATE');\n api.report.findUploadFileMappingTemplatesByReport(reportId)\n .then(function(templates){\n showSelectUploadMappingsTemplateDialog($scope, $event, confirmTitle, templates)\n .then(function(res){\n deferred.resolve(res);\n });\n });\n return deferred.promise;\n }\n\n this.selectPreviewTemplate = function ($scope, $event, $translate, templates) {\n var deferred = $q.defer();\n var confirmTitle = $translate.instant('REPORT.DATA_UPLOAD.SELECT_TEMPLATE');\n showSelectPreviewTemplateDialog($scope, $event, $translate, confirmTitle, templates)\n .then(function(res){\n deferred.resolve(res);\n });\n return deferred.promise;\n }\n\n this.savePreviewTemplate = function($scope, $event, $translate, reportId, templateId, columnOptions, templateColumns, selectedTemplate){\n var deferred = $q.defer();\n showSavePreviewTemplateDialog($scope, $event, $translate, api, reportId, templateId, columnOptions, templateColumns, selectedTemplate)\n .then(function(res){deferred.resolve(res);},function(err){console.error(err); deferred.resolve(err);});\n return deferred.promise;\n }\n\n this.deleteReport = function ($scope, $state, $event, report) {\n var confirmTitle = $translate.instant('REPORT.CONFIRM.DELETE_TITLE');\n var confirmBody = $translate.instant('REPORT.CONFIRM.DELETE_BODY', {\n name: report.name\n });\n\n var successTitle = $translate.instant('REPORT.CONFIRM.DELETE_SUCCESS_TITLE');\n var successBody = $translate.instant('REPORT.CONFIRM.DELETE_SUCCESS_BODY', {\n name: report.name\n });\n\n showConfirmDialog($scope, $event, confirmTitle, confirmBody)\n .then(function (answer) {\n if (!answer) return;\n\n var data = {\n id: report.id\n };\n\n api.report.delete(data)\n .then(function (response) {\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function () {\n $state.go('app.modules.list');\n });\n },\n function (response) {\n $log.error(response);\n });\n });\n }\n\n this.exportInvalidData = function($scope, count,reportId,fileId) {\n var confirmTitle = $translate.instant('REPORT.CONFIRM.EXPORT_INVALID_DATA_TITLE');\n var confirmBody = $translate.instant('REPORT.CONFIRM.EXPORT_INVALID_DATA_BODY', {\n count: count\n });\n\n showExportDialog($scope, confirmTitle, confirmBody)\n .then(function (answer) {\n if (!answer) return;\n var path = '/api/report/'+reportId+'/export/uploadData/'+fileId+'/'+\"invalid\"+'/'+$translate.use();\n downloadJquery(path, 'POST');\n });\n }\n\n function downloadJquery(url, method) {\n if (url) {\n var inputs = '';\n jQuery('
' + inputs + '
')\n .appendTo('body').submit().remove();\n }\n }\n\n this.deleteReportData = function ($scope, $state, $event,report,parameters,count) {\n var confirmTitle = $translate.instant('REPORT.CONFIRM.DELETE_DATA_TITLE');\n var confirmBody = $translate.instant('REPORT.CONFIRM.DELETE_DATA_WITH_COUNT_BODY', {\n name: report.name,\n count: count\n });\n\n var successTitle = $translate.instant('REPORT.CONFIRM.DELETE_DATA_SUCCESS_TITLE');\n var successBody = $translate.instant('REPORT.CONFIRM.DELETE_DATA_SUCCESS_BODY', {\n name: report.name\n });\n\n showConfirmDialog($scope, $event, confirmTitle, confirmBody)\n .then(function (answer) {\n if (!answer) return;\n var request = {\n report: report,\n parameters: parameters,\n count: count\n };\n api.report.removeReportDocuments(report.id,parameters)\n .then(function () {\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function () {\n queries = [];\n /*\n $state.go('app.report.overview', {\n id: report.id\n }, {\n reload: true\n });\n */\n $state.reload();\n //$state.go('app.modules.list');\n });\n },\n function (response) {\n $log.error(response);\n });\n });\n }\n\n this.showUploadMappings = function ($scope, $translate, $event,uploadMappings) {\n var title = $translate.instant('REPORT.DATA_SUMMARY.FIELD_EDIT_INFO');\n var body = {'uploadMappings':uploadMappings}\n showInfoDialog($scope, $translate, $event, title, body)\n .then(function (answer) {\n return;\n });\n }\n\n \n\n this.editDocument = function ($scope, $event, document, noConfirmed, pagination, NGAnnotation, api, reportModules, categories) {\n\n showEditDocumentDialog($scope, $event, \"aa\", document, noConfirmed, pagination, NGAnnotation, api, reportModules, categories)\n .then(function (answer) {\n if (!answer) return;\n\n var data = {\n id: report.id\n };\n\n });\n }\n\n this.assignDocument = function ($scope, $event, document) {\n var deferred = $q.defer();\n showAssignDocumentDialog($scope, $event, document)\n .then(function (answer) {\n if (!answer) return;\n else\n deferred.resolve(answer);\n })\n return deferred.promise;\n }\n\n this.reevaluatePrompt = function ($scope, $event, reportId, user, documentNickname) {\n var deferred = $q.defer();\n showReevaluateReportDialog($q, $scope, $event, reportId, user, documentNickname)\n .then(function (answer) {\n if (!answer) return;\n else\n deferred.resolve(answer);\n })\n return deferred.promise;\n }\n\n this.exportPrompt = function ($scope, $event, reportId,user,params,type, dataCount) {\n var deferred = $q.defer();\n showExportPromptDialog($q, $scope, $event, reportId, user, params, type, dataCount)\n .then(function (answer) {\n if (!answer) return;\n else\n deferred.resolve(answer);\n })\n return deferred.promise;\n }\n\n this.uploadFeedbackPrompt = function ($scope, $event, reportId) {\n var reportModules = api.report.getReportModulesList(reportId)\n .then(function (response) {\n return response;\n }, function (response) {\n console.log(response);\n });\n var deferred = $q.defer();\n showUploadFeedbackPromptDialog($scope, $event, reportId, reportModules)\n .then(function (resp) {\n if (!resp)\n return;\n else\n deferred.resolve(resp);\n })\n return deferred.promise;\n }\n\n this.showSaveReportFiltersDialog = function($scope, $event, filterChips, reportId){\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'SaveReportFiltersDialogController as vm',\n templateUrl: 'app/main/apps/reports/views/settings/save-report-filters-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n filterChips: filterChips,\n reportId: reportId, \n api: api\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function (r) {\n console.log(r);\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n }\n \n function showAssignDocumentDialog($scope, $event, data) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'AssignDialogController as vm',\n templateUrl: 'app/main/apps/reports/views/edit/assigndialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n data: data,\n api: api,\n $stateParams: $stateParams\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function (r) {\n console.log(r);\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n }\n\n\n function showUploadFeedbackPromptDialog($scope, $event, reportId, reportModules) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller : 'UploadFeedbackPromptController as vm',\n templateUrl : 'app/main/apps/reports/views/data/uploadfeedbackprompt.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n reportId: reportId,\n api: api,\n reportModules: reportModules,\n $stateParams: $stateParams\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function (r) {\n //console.log(r);\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n }\n\n function showReevaluateReportDialog($q, $scope, $event, data, user, documentNickname) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'ReevaluateReportController as vm',\n templateUrl: 'app/main/apps/reports/views/data/reevaluatereport.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n data: data,\n api: api,\n $stateParams: $stateParams,\n $q: $q,\n user: user,\n documentNickname: documentNickname\n }\n }).then(function (answer) {\n deferred.resolve(answer);\n }, function (r) {\n console.log(r);\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n }\n\n function showExportPromptDialog($q, $scope, $event, data, user, params, type, dataCount) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'ExportPromptController as vm',\n templateUrl: 'app/main/apps/reports/views/data/exportprompt.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n data: data,\n api: api,\n $stateParams: $stateParams,\n $q:$q,\n user: user,\n params: params,\n type: type,\n dataCount: dataCount\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function (r) {\n console.log(r);\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n }\n\n function showEditDocumentDialog($scope, $event, title, data, noConfirmed, pagination, NGAnnotation, api, reportModules, categories) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'EditDialogController as vm',\n templateUrl: 'app/main/apps/reports/views/edit/editdocumentdialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n data: data,\n api: api,\n $stateParams: $stateParams,\n pagination: pagination,\n NGAnnotation: NGAnnotation,\n reportModules: reportModules,\n categories: categories\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function () {\n if (!noConfirmed) {\n var req = { documentId: data.id }\n api.report.clearEditedFlagDocument(req)\n .then(function (r) {\n console.log(r);\n }, function (r) {\n\n });\n }\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n }\n\n // Delete Category\n\n function showConfirmDialog($scope, $event, title, body) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'BasicDeleteDialogController as vm',\n templateUrl: 'app/main/apps/modules/services/basic-confirm-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showInfoDialog($scope, $translate, $event, title, body) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'UploadMappingsDialogController as vm',\n templateUrl: 'app/main/apps/reports/services/field-mapping-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body,\n api:api,\n dialogType: \"info\",\n $translate: $translate\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showWarningDialog($scope, $event, header, problem){\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'WarningDialogController as vm',\n templateUrl: 'app/main/apps/reports/services/warning-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: header,\n body: problem\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise; \n }\n\n function showExportDialog($scope, title, body) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'BasicExportDialogController as vm',\n templateUrl: 'app/main/apps/reports/services/basic-export-data-dialog.html',\n parent: angular.element(document.body),\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showAddDialog($scope, $event, title, body) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'BasicAddDialogController as vm',\n templateUrl: 'app/main/apps/reports/services/basic-add-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showSelectUploadMappingsTemplateDialog($scope, $event, title, templates) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'SelectUploadMappingsTemplateDialogController as vm',\n templateUrl: 'app/main/apps/reports/services/upload-mapping-template-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: templates,\n dialogType:\"confirm\"\n }\n })\n .then(function (res) {\n deferred.resolve(res);\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showUploadMappingsConfirmDialog($scope, $translate, $event, title, body) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'UploadMappingsDialogController as vm',\n templateUrl: 'app/main/apps/reports/services/field-mapping-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body,\n api:api,\n dialogType:\"confirm\",\n $translate:$translate\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showSelectPreviewTemplateDialog($scope, $event, $translate, title, templates) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'SelectPreviewTemplateDialogController as vm',\n templateUrl: 'app/main/apps/reports/services/select-preview-template-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: templates,\n dialogType:\"confirm\"\n }\n })\n .then(function (res) {\n deferred.resolve(res);\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showSavePreviewTemplateDialog($scope, $event, $translate, api, reportId, templateId, columnOptions, templateColumns, selectedTemplate){\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'SavePreviewTemplateDialogController as vm',\n templateUrl: 'app/main/apps/reports/services/save-preview-template-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n $translate:$translate,\n api:api,\n title: $translate.instant('REPORT.DATA_UPLOAD.SAVE_TEMPLATE'),\n reportId: reportId,\n templateId:templateId,\n selectedTemplate: selectedTemplate,\n data: columnOptions,\n templateColumns: templateColumns\n }\n })\n .then(function (res) {\n deferred.resolve(res);\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n }\n\n function showUpdateConfirmDialog($scope, $event, title, body) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'BasicUpdateDialogController as vm',\n templateUrl: 'app/main/apps/reports/services/basic-update-report-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showSuccessDialog($scope, $event, title, body) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'BasicDialogController as vm',\n templateUrl: 'app/main/apps/modules/services/basic-success-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body\n }\n })\n .then(function (answer) {\n deferred.resolve();\n }, function (answer) {\n deferred.resolve();\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n }\n\n function BasicExportDialogController($mdDialog, title, body) {\n var vm = this;\n vm.title = title;\n vm.body = body;\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n }\n\n function BasicDeleteDialogController($mdDialog, title, body) {\n var vm = this;\n vm.title = title;\n vm.body = body;\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n }\n\n function BasicUpdateDialogController($mdDialog, title, body) {\n var vm = this;\n vm.title = title;\n vm.body = body;\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n }\n\n function BasicAddDialogController($mdDialog, title, body) {\n var vm = this;\n vm.title = title;\n vm.body = body;\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n }\n\n function UploadMappingsDialogController($mdDialog, title, body, api, dialogType, $translate) {\n var vm = this;\n vm.title = title;\n vm.body = body;\n console.log(vm.body)\n vm.dialogType = dialogType;\n vm.getDateValue = function(literalValue){\n var date = moment(literalValue).toDate();\n var dateString = date.getDate() + \"-\" + (date.getMonth()+1) + \"-\" + date.getFullYear();\n return dateString;\n };\n\n vm.literalFieldTypes = [\n {'fieldName':$translate.instant(\"SHARED.NOMINAL_ATTRIBUTE\"),'fieldType':300},\n {'fieldName':$translate.instant(\"SHARED.NUMERIC_NOMINAL_ATTRIBUTE\"),'fieldType':301},\n {'fieldName':$translate.instant(\"SHARED.DATE\"),'fieldType':400},\n {'fieldName':$translate.instant(\"SHARED.ATTRIBUTE\"),'fieldType':500},\n {'fieldName':$translate.instant(\"SHARED.TEXT\"),'fieldType':600},\n {'fieldName':$translate.instant(\"SHARED.INDICATOR\"),'fieldType':800}\n ];\n\n vm.findNameOfLiteralFieldType = function(fieldType){\n for(var i = 0; i< vm.literalFieldTypes.length ;i++){\n var field = vm.literalFieldTypes[i];\n if(field.fieldType === fieldType){\n return field.fieldName;\n }\n }\n }\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n\n vm.uploadAndSaveTemplate = function(){\n saveAsReportTemplate(vm.body,api);\n $mdDialog.hide(true);\n }\n }\n\n function saveAsReportTemplate(body, api){\n api.report.addUploadFileMappingsTemplate(body.reportId, body.fileId)\n .then(function (r) {}, function (r) {});\n }\n\n function SelectUploadMappingsTemplateDialogController($mdDialog, title, body, dialogType) {\n var vm = this;\n vm.title = title;\n vm.body = body;\n vm.dialogType = dialogType;\n\n vm.getDateValue = function(literalValue){\n var date = moment(literalValue).toDate();\n return date.getDate() + \"-\" + (date.getMonth()+1) + \"-\" + date.getFullYear();\n };\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(vm.selectedTemplate);\n };\n }\n\n function SelectPreviewTemplateDialogController($mdDialog, $translate, title, body, dialogType) {\n var vm = this;\n vm.title = title;\n vm.body = body;\n vm.dialogType = dialogType;\n\n vm.getDateValue = function(literalValue){\n var date = moment(literalValue).toDate();\n return date.getDate() + \"-\" + (date.getMonth()+1) + \"-\" + date.getFullYear();\n };\n\n vm.columnFeatureNameMap = {\n 'nominal_attribute':$translate.instant(\"SHARED.NOMINAL_ATTRIBUTE\"),\n 'text':$translate.instant(\"SHARED.TEXT\"),\n 'date':$translate.instant(\"SHARED.DATE\"),\n 'attribute':$translate.instant(\"SHARED.ATTRIBUTE\"),\n 'indicator':$translate.instant(\"SHARED.INDICATOR\"),\n 'predefined_sentiment':$translate.instant(\"SHARED.SENTIMENT\"),\n 'original_id':$translate.instant(\"SHARED.ORIGINAL_ID\"),\n 'predefined_main_category':$translate.instant(\"SHARED.MAIN_CATEGORY\"),\n 'predefined_sub_category':$translate.instant(\"SHARED.SUB_CATEGORY\")\n };\n\n vm.datePartNameMap = {\n 'date':$translate.instant('SHARED.DATE'),\n 'day':$translate.instant('SHARED.DAY'),\n 'month':$translate.instant('SHARED.MONTH'),\n 'year':$translate.instant('SHARED.YEAR'),\n 'time':$translate.instant('SHARED.TIME')\n }\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(vm.selectedTemplate);\n };\n }\n\n function SavePreviewTemplateDialogController($mdDialog, $translate, api, title, reportId, templateId, selectedTemplate, data, templateColumns){\n var vm = this;\n vm.title = title;\n vm.data = data;\n vm.templateColumns = templateColumns;\n vm.selectedTemplate = selectedTemplate;\n vm.updateTemplate = false;\n\n\n vm.columnFeatureNameMap = {\n 'nominal_attribute':$translate.instant(\"SHARED.NOMINAL_ATTRIBUTE\"),\n 'text':$translate.instant(\"SHARED.TEXT\"),\n 'date':$translate.instant(\"SHARED.DATE\"),\n 'attribute':$translate.instant(\"SHARED.ATTRIBUTE\"),\n 'indicator':$translate.instant(\"SHARED.INDICATOR\"),\n 'predefined_sentiment':$translate.instant(\"SHARED.SENTIMENT\"),\n 'original_id':$translate.instant(\"SHARED.ORIGINAL_ID\"),\n 'predefined_main_category':$translate.instant(\"SHARED.MAIN_CATEGORY\"),\n 'predefined_sub_category':$translate.instant(\"SHARED.SUB_CATEGORY\")\n };\n\n vm.datePartNameMap = {\n 'date':$translate.instant('SHARED.DATE'),\n 'day':$translate.instant('SHARED.DAY'),\n 'month':$translate.instant('SHARED.MONTH'),\n 'year':$translate.instant('SHARED.YEAR'),\n 'time':$translate.instant('SHARED.TIME')\n }\n\n vm.setTemplateName = function(){\n if(vm.updateTemplate){\n vm.templateName = vm.selectedTemplate.name;\n }\n }\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n if(vm.updateTemplate && vm.selectedTemplate!=null){\n templateId = vm.selectedTemplate.id;\n }\n api.report.saveUploadFilePreviewTemplate(reportId, templateId, templateColumns, vm.templateName).then(function(){\n $mdDialog.hide(true);\n });\n };\n }\n\n function WarningDialogController($mdDialog, title, body){\n var vm = this;\n vm.title = title;\n vm.body = body;\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n }\n \n function AssignDialogController($mdDialog, data, api, $stateParams, $translate, $mdToast) {\n var vm = this;\n vm.document = data;\n vm.usernames = null;\n vm.asssignDocument = asssignDocument;\n vm.selectedUsername = null;\n vm.showToast = showSimpleToast;\n vm.usernameSearch = usernameSearch;\n vm.changeAssignedUsername = changeAssignedUsername;\n vm.answer = answer;\n api.report.assignToUsers()\n .then(function (r) {\n vm.usernames = r;\n }, function (r) {\n });\n\n function answer(bool) {\n $mdDialog.hide(bool);\n }\n\n vm.cancel = function () {\n console.log(data);\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n\n function asssignDocument() {\n var req = {\n documentId: vm.document.id,\n assignUser: vm.selectedUsername.userName,\n note: vm.document.note.note ? vm.document.note.note:null\n };\n api.report.assignDocument(req)\n .then(function (r) {\n var lang = $translate.use();\n if(lang == 'en'){\n vm.showToast(\"Document assigned to \" + req.assignUser);\n }else{\n vm.showToast(\"Döküman \" + req.assignUser + \" adlı kullanıcıya atandı.\");\n }\n vm.answer(true);\n data.drafted = true;\n }, function (r) {\n var lang = $translate.use();\n if(lang == 'en'){\n vm.showToast(\"Document assignment failed.\");\n }else{\n vm.showToast(\"Döküman ataması başarısız.\");\n }\n })\n }\n\n function showSimpleToast(text) {\n $mdToast.show($mdToast.simple().textContent(text));\n };\n\n function usernameSearch(query) {\n var results = query ? vm.usernames.filter(createFilterForUsername(query)) : vm.usernames;\n return results;\n }\n\n function createFilterForUsername(query) {\n var lowercaseQuery = query.toLocaleLowerCase('tr-TR');\n return function filterFn(item) {\n if (!item.userName || item.userName === \"\")\n return false;\n var bol = (item.userName.toLocaleLowerCase('tr-TR')).indexOf(lowercaseQuery) != -1\n return bol;\n };\n\n }\n\n function changeAssignedUsername(item) {\n vm.selectedUsername = item;\n }\n }\n\n function SaveReportFiltersDialogController($mdDialog, filterChips, reportId, api){\n var vm = this;\n vm.filterChips = filterChips;\n vm.reportId = reportId;\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n var filterChipsString = JSON.stringify(vm.filterChips); // stored as string in db.\n api.settings.saveFilterChipsSettings(filterChipsString, vm.reportId)\n .then(function (response) {\n },\n function (err) {\n $log.error(err);\n });\n $mdDialog.hide(true);\n };\n }\n\n\n function ReportCreateDialogController($mdDialog, report, title, workspaces, workspacePermissions) {\n var vm = this;\n vm.title = title;\n var permission = getPermission();\n vm.workspaces = workspaces.filter(function (workspace) {\n var wsp = workspacePermissions.find(function (ws) { return ws.workspaceId === workspace.id });\n if (wsp.permissions.indexOf(permission) != -1) {\n return true;\n }\n })\n vm.selectedWorkspace = vm.workspaces[0];\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(vm.selectedWorkspace);\n };\n\n function getPermission() {\n return \"REPORT/CREATE\";\n };\n }\n\n function ReportNoteDialogController($mdDialog, $q, $log, $mdToast, api, data) {\n var vm = this;\n vm.request = {\n documentId: data.id,\n note: null,\n createdDate: null,\n createdBy: null,\n updatedDate: null,\n updatedBy: null\n }\n if (data.note) {\n if (data.note.note)\n vm.request.note = data.note.note;\n if (data.note.createdDate)\n vm.request.createdDate = data.note.createdDate;\n if (data.note.createdBy)\n vm.request.createdBy = data.note.createdBy;\n if (data.note.updatedDate)\n vm.request.updatedDate = data.note.updatedDate;\n if (data.note.updatedBy)\n vm.request.updatedBy = data.note.updatedBy;\n }\n vm.saveNote = function () {\n if (!vm.request.note || vm.request.note == null || vm.request.note == \"\")\n var lang = $translate.use();\n if(lang == 'en'){\n showSimpleToast(\"Note field must be filled.\");\n }else{\n showSimpleToast(\"Not alanı boş bırakılamaz.\");\n }\n api.report.saveNote(vm.request)\n .then(function (res) {\n var lang = $translate.use();\n if(lang == 'en'){\n showSimpleToast(\"Note Saved Successfully.\")\n }else{\n showSimpleToast(\"Not Başarıyla Kaydedildi.\")\n }\n data.hasNote = true;\n data.note = res;\n vm.cancel();\n }, function (err) {\n console.log(err);\n })\n }\n\n vm.removeNote = function () {\n api.report.removeNote(vm.request)\n .then(function (res) {\n showSimpleToast(\"Not Başarıyla Silindi.\")\n data.hasNote = false;\n data.note = {\n note: res.note,\n createdDate: res.createdDate,\n createdBy: res.createdBy,\n updatedDate: res.updatedDate,\n updatedBy: res.updatedBy\n };\n vm.cancel();\n }, function (err) {\n console.log(err);\n })\n }\n\n function showSimpleToast(text) {\n $mdToast.show($mdToast.simple().textContent(text));\n };\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n\n }\n\n function UploadFeedbackPromptController($mdDialog, reportId, api, reportModules, $stateParams, $translate, $mdToast, $q, $scope, $mdMedia, toastService) {\n var vm = this;\n vm.reportId = reportId;\n vm.modules = reportModules.filter(function (x) { return x.moduleTypeId === 1 || x.moduleTypeId === 7 ; });\n vm.feedbackUploadPart = \"ALL\";\n vm.evaluateButtonChecker = evaluateButtonChecker;\n vm.showToast = showSimpleToast;\n vm.answer = answer;\n vm.confirmUploadFeedback = confirmUploadFeedback;\n vm.showUploadFeedbackConfirmDialog = showUploadFeedbackConfirmDialog;\n vm.feedbacks = [];\n vm.allSelected = true;\n vm.selectAll = function () {\n if (vm.allSelected) {\n vm.modules.forEach(function (x) { x[\"selected\"] = true; });\n vm.allSelected = false;\n } else {\n vm.modules.forEach(function (x) { x[\"selected\"] = false; });\n vm.allSelected = true;\n }\n }\n\n //FEEDBACK PERIOD\n vm.period = {\n type: null,\n repeatTime: null,\n repeatWeekDay: null,\n repeatDay: null,\n evaluate: null\n };\n vm.days = [];\n vm.times = [];\n vm.feedbackPeriods = [];\n vm.selectedPeriodModule = null;\n vm.saveFeedbackPeriod = saveFeedbackPeriod;\n vm.selectFeedbackPeriodModule = selectFeedbackPeriodModule;\n vm.deleteFeedbackPeriod = deleteFeedbackPeriod;\n\n Number.prototype.padLeft = function (n, str) {\n return (this < 0 ? '-' : '') +\n Array(n - String(Math.abs(this)).length + 1)\n .join(str || '0') +\n (Math.abs(this));\n }\n\n function setPeriodVariables() {\n vm.periodTypes = [\n { value: 'DAILY', name: $translate.instant('SHARED.TIME_PERIOD.DAILY') },\n { value: 'WEEKLY', name: $translate.instant('SHARED.TIME_PERIOD.WEEKLY') },\n { value: 'MONTHLY', name: $translate.instant('SHARED.TIME_PERIOD.MONTHLY') }\n ];\n vm.weekDays = [\n { value: 2, name: $translate.instant('SHARED.WEEKDAYS.MONDAY') },\n { value: 3, name: $translate.instant('SHARED.WEEKDAYS.TUESDAY') },\n { value: 4, name: $translate.instant('SHARED.WEEKDAYS.WEDNESDAY') },\n { value: 5, name: $translate.instant('SHARED.WEEKDAYS.THURSDAY') },\n { value: 6, name: $translate.instant('SHARED.WEEKDAYS.FRIDAY') },\n { value: 7, name: $translate.instant('SHARED.WEEKDAYS.SATURDAY') },\n { value: 1, name: $translate.instant('SHARED.WEEKDAYS.SUNDAY') }\n ];\n }\n\n function setTimes() {\n var name = null;\n for (var i = 0; i < 24; i++) {\n name = (i * 100).padLeft(4);\n vm.times.push({ value: i * 100, name: name.substring(0, 2) + ':' + name.substring(2) });\n }\n for (var i = 1; i < 32; i++) {\n vm.days.push(i);\n }\n }\n\n function saveFeedbackPeriod() {\n\n api.report.saveFeedbackPeriod(vm.reportId, vm.selectedPeriodModule.id, vm.period)\n .then(function (r) {\n var existPeriod = vm.copyFeedbackPeriods.filter(function (m) { return m.moduleId == vm.selectedPeriodModule.id })[0];\n if (existPeriod) {\n existPeriod.type = vm.period.type;\n existPeriod.repeatTime = vm.period.repeatTime;\n existPeriod.repeatWeekDay = vm.period.repeatWeekDay;\n existPeriod.repeatDay = vm.period.repeatDay;\n } else {\n vm.copyFeedbackPeriods.push({\n type: vm.period.type,\n repeatTime: vm.period.repeatTime,\n repeatWeekDay: vm.period.repeatWeekDay,\n repeatDay: vm.period.repeatDay,\n reportId: vm.reportId,\n moduleId: vm.selectedPeriodModule.id\n })\n }\n $mdToast.show($mdToast.simple()\n .textContent($translate.instant('SHARED.SAVE_SUCCESS'))\n .action('OK')\n .position('center center'));\n }, function (err) {\n console.log(err);\n $mdToast.show($mdToast.simple()\n .textContent($translate.instant('SHARED.SAVE_FAILED'))\n .action('OK')\n .position('center center'));\n });\n }\n\n function getFeedbackPeriods() {\n api.report.getFeedbackPeriods(vm.reportId)\n .then(function (r) {\n if (r)\n vm.feedbackPeriods = r;\n vm.copyFeedbackPeriods = JSON.parse(JSON.stringify(vm.feedbackPeriods));\n }, function (err) {\n console.log(err);\n $mdToast.show($mdToast.simple()\n .textContent(err)\n .action('OK')\n .position('center center'));\n });\n }\n\n function deleteFeedbackPeriod(period) {\n api.report.deleteFeedbackPeriod(vm.reportId, period.moduleId)\n .then(function (r) {\n vm.copyFeedbackPeriods = vm.copyFeedbackPeriods.filter(function (m) { return m.moduleId != period.moduleId });\n }, function (err) {\n console.log(err);\n });\n }\n\n vm.getModuleName = function (moduleId) {\n var module = vm.modules.filter(function (m) { return m.id == moduleId })[0];\n if (module) return module.name;\n }\n vm.getPeriodType = function (type) { return $translate.instant('SHARED.TIME_PERIOD.' + type) };\n vm.getRepeatWeekday = function (repeatWeekDay) {\n var weekDay = vm.weekDays.filter(function (m) { return m.value == repeatWeekDay })[0];\n if (weekDay) return weekDay.name;\n }\n vm.getRepeatTime = function (repeatTime) { return (repeatTime/100) + \":00\";}\n\n function selectFeedbackPeriodModule() {\n vm.period = vm.feedbackPeriods.filter(function (m) { return m.moduleId == vm.selectedPeriodModule.id; })[0];\n vm.period = vm.period ? vm.period : {};\n }\n\n function confirmUploadFeedback(feedbackUploadPart) {\n vm.feedbackUploadPart = feedbackUploadPart;\n function requestFeedbackCounts(feedbackCountRequest,$q){\n var deferred = $q.defer();\n api.report.uploadFeedback(feedbackCountRequest)\n .then(function (feedbackCountResponse) {\n deferred.resolve(feedbackCountResponse);\n }, function (err) {\n console.log.error(err);\n });\n return deferred.promise;\n };\n\n function getCount(reportId, feedbackModule, feedbackUploadPart) {\n var request = {}\n request['reportId'] = reportId;\n request['moduleId'] = feedbackModule['id'];\n request['uploadPart'] = feedbackUploadPart;\n request['uploadFeedback'] = false;\n request['feedbackCount'] = null;\n request['requestDate'] = null;\n\n request[\"filterStartDate\"] = vm.feedbackDateRangeStartDate == null ? null : vm.feedbackDateRangeStartDate.toISOString().split('.')[0] + \"Z\";\n\n if (vm.feedbackDateRangeEndDate == null){\n request[\"filterEndDate\"] = null;\n }\n else{\n var endDate = new Date(vm.feedbackDateRangeEndDate);\n endDate.setHours(23,59,59);\n \n request[\"filterEndDate\"] = endDate.toISOString().split('.')[0] + \"Z\";\n }\n return request;\n };\n vm.feedbacks = [];\n var feedbackCountRequest = [];\n for(var i = 0;i vm.feedbackDateRangeEndDate ){\n vm.errorMessage = $translate.instant('SHARED.ERRORS.DATE_RANGE_WRONG');\n return;\n }\n }\n }\n\n vm.confirmUploadFeedback(vm.feedbackUploadPart);\n var deferred = $q.defer();\n\n vm.showUploadFeedbackConfirmDialog($scope, vm.feedbackUploadPart, vm.feedbacks, vm.feedbackDateRangeStartDate, vm.feedbackDateRangeEndDate)\n .then(function (resp) {\n if (!resp)\n return;\n else\n deferred.resolve(resp);\n })\n return deferred.promise;\n }\n function showUploadFeedbackConfirmDialog($scope, uploadPart, feedbacks, feedbackStartDate, feedbackEndDate) {\n vm.feedbacks = feedbacks;\n vm.uploadPart = uploadPart;\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'UploadFeedbackConfirmController as vm',\n templateUrl: 'app/main/apps/reports/views/data/upload-feedback-confirm-dialog.html',\n parent: angular.element(document.body),\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n reportId: reportId,\n api: api,\n reportModules: reportModules,\n feedbacks: feedbacks,\n uploadPart: uploadPart,\n feedbackStartDate: feedbackStartDate,\n feedbackEndDate: feedbackEndDate,\n $stateParams: $stateParams\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function (r) {\n //console.log(r);\n });\n /*$scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });*/\n return deferred.promise;\n }\n\n\n \n function answer(bool) {\n $mdDialog.hide(bool);\n }\n\n vm.cancel = function () {\n console.log(vm.reportId);\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n\n\n function showSimpleToast(text) {\n $mdToast.show($mdToast.simple().textContent(text));\n };\n\n function evaluateButtonChecker() {\n //@TODO ??\n return true;\n }\n\n function init() {\n setPeriodVariables();\n setTimes();\n getFeedbackPeriods();\n }\n\n init();\n }\n\n function UploadFeedbackConfirmController($mdDialog, reportId, api, reportModules,feedbacks,uploadPart, feedbackStartDate, feedbackEndDate, $stateParams, $translate, $mdToast, $q) {\n var vm = this;\n vm.reportId = reportId;\n vm.modules = reportModules;\n vm.evaluateButtonChecker = evaluateButtonChecker;\n vm.showToast = showSimpleToast;\n vm.answer = answer;\n vm.feedbackUploadPart = uploadPart;\n vm.feedbacks = feedbacks;\n\n vm.feedbackStartDate = feedbackStartDate;\n vm.feedbackEndDate = feedbackEndDate;\n \n vm.uploadFeedback = function (s) {\n var feedbackRequest = []\n for(var i = 0; i 50000) {\n ModuleService.showFailDialog($scope, $event, $translate.instant('REPORT.EXPORT.DATA_COUNT_LIMIT_TITLE'), $translate.instant('REPORT.EXPORT.DATA_COUNT_LIMIT_BODY'))\n .then(function (res) {\n vm.cancel();\n vm.clearData();\n });\n } else {\n if (vm.exportType == 'pivot') {\n params[\"pivot\"] = vm.requestExport.pivotFields.map(function (p) { return p.fieldName });\n params[\"pivotModule\"] = vm.pivotModule;\n }\n params[\"language\"] = $translate.use();\n params[\"content\"] = vm.exportContent;\n downloadJquery('/api/report/' + vm.reportId + '/export/' + vm.exportType, params, 'POST');\n vm.cancel();\n vm.clearData();\n }\n };\n\n function answer(bool) {\n $mdDialog.hide(bool);\n }\n \n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.clearData = function () {\n vm.requestExport = {\n pivotFields: []\n }\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n vm.pivotDropdown = false;\n function pivotDropdownOpen(){\n vm.pivotDropdown = true;\n }\n function pivotDropdownClosed(){\n vm.pivotDropdown = false;\n }\n \n function showSimpleToast(text) {\n $mdToast.show($mdToast.simple().textContent(text));\n };\n \n function evaluateButtonChecker() {\n if(vm.exportType == 'pivot' && vm.requestExport.pivotFields.length==0)\n return false;\n return true;\n }\n\n function downloadJquery(url, data, method) {\n if (url && data) {\n data = typeof data === 'string' ? data : jQuery.param(data);\n var inputs = '';\n jQuery.each(data.split('&'), function () {\n var pair = this.split('=');\n if (pair[0] == \"category%5B%5D\" || pair[0] == \"filter%5B%5D\" || pair[0]==\"pivot%5B%5D\") {\n inputs += '';\n } else {\n inputs += '';\n }\n });\n jQuery('
' + inputs + '
')\n .appendTo('body').submit().remove();\n }\n }\n\n });\n }\n\n function AnnotationController($scope, $q, $log, $rootScope, api, $translate, $utils) {\n var vm = this;\n\n vm.selectedText = $rootScope.documentContent.substring($scope.$annotation.startIndex, $scope.$annotation.endIndex);\n\n vm.content = $rootScope.documentContent;\n vm.annotations = $rootScope.annotations;\n vm.findedAnnotation = vm.annotations[0].find(function (annotation) {\n return annotation.startIndex == $scope.$annotation.startIndex && annotation.endIndex == $scope.$annotation.endIndex;\n });\n vm.textIndex = $scope.$annotation.startIndex + \"-\" + $scope.$annotation.endIndex;\n vm.tags = vm.findedAnnotation.data.tags;\n vm.aspectSentiment = getAspectSentiment();\n vm.categories = $rootScope.categories;\n vm.modules = $rootScope.reportModules;\n vm.selectedModule = $rootScope.selectedModule;\n vm.document = $rootScope.d;\n vm.reportId = $rootScope.reportId;\n vm.name = \"deneme\";\n\n vm.selectedModule = null;\n\n vm.mainCategories = null;\n vm.sub1Categories = null;\n vm.sub2Categories = null;\n\n vm.selectedMainCategory = null;\n vm.selectedSub1Category = null;\n vm.selectedSub2Category = null;\n\n vm.addProcessing = false;\n\n vm.mainCategorySearch = mainCategorySearch;\n vm.mainCategoryChange = mainCategoryChange;\n vm.sub1CategoryChange = sub1CategoryChange;\n vm.sub1CategorySearch = sub1CategorySearch;\n vm.sub2CategorySearch = sub2CategorySearch;\n\n vm.categorySearchInDropdown = categorySearchInDropdown;\n\n vm.moduleChange = moduleChange;\n\n vm.checkAddCategoryButton = checkAddCategoryButton;\n vm.addCategory = addCategory;\n vm.removeCategory = removeCategory;\n vm.addAspectSentiment = addAspectSentimet;\n vm.updateCategoryField = updateCategoryField;\n\n vm.aspectCategorySize = 0;\n\n vm.selectedAspectSentiment = null;\n\n vm.editCategory = editCategory;\n vm.exitEditCategory = exitEditCategory;\n\n function editCategory(field) {\n vm.tags.forEach(function (f) {\n f.editing = false;\n });\n var tag = field.tagList[field.tagList.length - 1];\n tag.updateCategory = vm.categories.find(function (c) { if (tag.categoryId == c.id) return true; });\n field.editing = true;\n if (field.tagList && field.tagList.length > 0) {\n field.tagList.forEach(function (tag) {\n tag.sameHierCats = vm.categories.filter(function (c) {\n if (!tag.parentId || tag.parentId == undefined) {\n if ((c.parent == null || c.parent == undefined) && vm.selectedModule.id === c.moduleId)\n return true;\n }else if (c.parent == tag.parentId) {\n return true;\n }\n })\n })\n }\n }\n\n function exitEditCategory(field, $event) {\n field.editing = false;\n }\n\n function getAspectSentiment() {\n if (vm.tags) {\n var sentimentTag = vm.tags.find(function (tag) {\n return tag.textIndex == vm.textIndex && (tag.type == 210 || tag.type == 211 || tag.type == 212);\n });\n if (sentimentTag) {\n if (sentimentTag.type == 210)\n return \"POSITIVE\";\n else if (sentimentTag.type == 211)\n return \"NEGATIVE\";\n else\n return \"NEUTRAL\";\n }\n }\n if ($translate.use() === 'en')\n return \"Unspecified\";\n else if ($translate.use() === 'tr')\n return \"Belirtilmemiş\";\n }\n\n if ($translate.use() === 'en')\n vm.sentiments = [\"NEUTRAL\", \"NEGATIVE\", \"POSITIVE\", \"MIXED\"];\n else if ($translate.use() === 'tr')\n vm.sentiments = [\"NÖTR\", \"OLUMSUZ\", \"OLUMLU\", \"KARIŞIK\"];\n\n function removeAspectSentiment() {\n var sentiment = \"\";\n if (vm.aspectSentiment == \"OLUMLU\") sentiment = \"POSITIVE\";\n if (vm.aspectSentiment == \"POSITIVE\") sentiment = \"POSITIVE\";\n if (vm.aspectSentiment == \"OLUMSUZ\") sentiment = \"NEGATIVE\";\n if (vm.aspectSentiment == \"NEGATIVE\") sentiment = \"NEGATIVE\";\n if (vm.aspectSentiment == \"NÖTR\") sentiment = \"NEUTRAL\";\n if (vm.aspectSentiment == \"NEUTRAL\") sentiment = \"NEUTRAL\";\n if (vm.aspectSentiment == \"KARIŞIK\") sentiment = \"MIXED\";\n if (vm.aspectSentiment == \"MIXED\") sentiment = \"MIXED\";\n var req = {\n documentId: vm.document.id,\n reportId: vm.reportId,\n sentiment: sentiment,\n text: \"remove\",\n textIndex: $scope.$annotation.startIndex + \"-\" + $scope.$annotation.endIndex,\n moduleId:vm.selectedModule.id\n };\n api.report.removeAspectSentimentDocument(req)\n .then(function (res) {\n $utils.googleAnalyticsSetAction(\"REPORT_DOCUMENT\", \"Remove Aspect Sentiment\", JSON.stringify(req))\n vm.document.tagGroup = res.tags;\n vm.document.charts = res.charts;\n vm.document.updateDate = res.updateDate;\n vm.document.updateBy = res.updateBy;\n vm.document.drafted = true;\n prepareTags(vm.document.tagGroup);\n vm.fillAnnotations();\n },\n function (err) {\n console.log(err);\n //event.target.disabled = false;\n });\n }\n\n function addAspectSentimet() {\n //event.target.disabled = true;\n var sentiment = \"\";\n if (vm.selectedAspectSentiment == \"OLUMLU\") sentiment = \"POSITIVE\";\n if (vm.selectedAspectSentiment == \"POSITIVE\") sentiment = \"POSITIVE\";\n if (vm.selectedAspectSentiment == \"OLUMSUZ\") sentiment = \"NEGATIVE\";\n if (vm.selectedAspectSentiment == \"NEGATIVE\") sentiment = \"NEGATIVE\";\n if (vm.selectedAspectSentiment == \"NÖTR\") sentiment = \"NEUTRAL\";\n if (vm.selectedAspectSentiment == \"NEUTRAL\") sentiment = \"NEUTRAL\";\n if (vm.selectedAspectSentiment == \"KARIŞIK\") sentiment = \"MIXED\";\n if (vm.selectedAspectSentiment == \"MIXED\") sentiment = \"MIXED\";\n var req = {\n documentId: vm.document.id,\n reportId: vm.reportId,\n sentiment: sentiment,\n text: vm.selectedText,\n textIndex: $scope.$annotation.startIndex + \"-\" + $scope.$annotation.endIndex,\n moduleId: vm.selectedModule.id\n };\n api.report.addAspectSentimentDocument(req)\n .then(function (res) {\n $utils.googleAnalyticsSetAction(\"REPORT_DOCUMENT\", \"Add Aspect Sentiment\", JSON.stringify(req))\n vm.document.tagGroup = res.tags;\n vm.document.charts = res.charts;\n vm.document.updateDate = res.updateDate;\n vm.document.updateBy = res.updateBy;\n vm.document.drafted = true;\n prepareTags(vm.document.tagGroup);\n vm.aspectSentiment = getAspectSentiment();\n vm.fillAnnotations();\n // event.target.disabled = false;\n //event.target.disabled = false;\n },\n function (err) {\n console.log(err);\n //event.target.disabled = false;\n });\n }\n\n vm.reject = function ($event) {\n removeAspectSentiment();\n vm.categoryTags = vm.tags.filter(function (tag) { return tag.type === 100; });\n if (vm.categoryTags && vm.categoryTags.length > 0) {\n vm.aspectCategorySize = vm.categoryTags.length;\n vm.categoryTags.forEach(function (tag, index) {\n vm.removeCategory(tag, $event, tag.textIndex);\n /*if (index == vm.categoryTags.length - 1)\n vm.removeCategory(tag, $event, tag.textIndex);\n else\n vm.removeCategory(tag, $event, tag.textIndex);*/\n })\n } else {\n $scope.$reject();\n }\n }\n\n vm.close = function () {\n $rootScope.annotateRefresh();\n if (vm.tags && vm.tags.length > 0) {\n vm.tags.forEach(function (f) {\n f.editing = false;\n });\n }\n $scope.$close();\n }\n\n function addCategory(event) {\n vm.addProcessing = true;\n event.target.disabled = true;\n var req = {\n documentId: vm.document.id,\n mainCategory: vm.selectedMainCategory,\n sub1Category: vm.selectedSub1Category,\n sub2Category: vm.selectedSub2Category,\n moduleId: vm.selectedModule.id,\n reportId: vm.reportId,\n moduleName: vm.selectedModule.name,\n text: vm.selectedText,\n textStartIndex: $scope.$annotation.startIndex,\n textEndIndex: $scope.$annotation.endIndex\n };\n api.report.addCategoryDocument(req)\n .then(function (res) {\n vm.addProcessing = false;\n vm.document.tagGroup = res.tags;\n vm.document.charts = res.charts;\n vm.document.updateDate = res.updateDate;\n vm.document.updateBy = res.updateBy;\n vm.document.drafted = true;\n prepareTags(vm.document.tagGroup);\n vm.aspectSentiment = getAspectSentiment();\n vm.fillAnnotations();\n event.target.disabled = false;\n vm.moduleChange();\n }, function (err) {\n vm.addProcessing = false;\n console.log(err);\n event.target.disabled = false;\n vm.moduleChange();\n })\n }\n\n function removeCategory(req, event, textIndex) {\n req.processing = true;\n event.target.disabled = true;\n req.documentId = vm.document.id;\n req.reportId = vm.reportId;\n req.textIndex = textIndex;\n api.report.deleteCategoryDocument(req)\n .then(function (res) {\n req.processing = false;\n vm.document.tagGroup = res.tags;\n vm.document.charts = res.charts;\n vm.document.updateDate = res.updateDate;\n vm.document.updateBy = res.updateBy;\n vm.document.drafted = true;\n prepareTags(vm.document.tagGroup);\n vm.fillAnnotations();\n vm.aspectCategorySize = vm.aspectCategorySize - 1;\n if (vm.aspectCategorySize == 0) {\n event.target.disabled = false;\n $rootScope.annotateRefresh();\n $scope.$reject();\n }\n event.target.disabled = false;\n vm.moduleChange();\n }, function (err) {\n req.processing = false;\n event.target.disabled = false;\n console.log(err);\n vm.moduleChange();\n })\n }\n\n function updateCategoryField(event,field) {\n event.target.disabled = true;\n field.processing = true;\n field.documentId = vm.document.id;\n field.reportId = vm.reportId;\n field.update = true;\n api.report.deleteCategoryDocument(field)\n .then(function (response) {\n var req = {\n documentId: vm.document.id,\n mainCategory: null,\n sub1Category: null,\n sub2Category: null,\n moduleId: vm.selectedModule.id,\n reportId: vm.reportId,\n moduleName: vm.selectedModule.name,\n text: vm.selectedText,\n textStartIndex: $scope.$annotation.startIndex,\n textEndIndex: $scope.$annotation.endIndex\n };\n //field.tagList = field.tagList.filter(function (t, i) {\n // if (i + 1 != field.tagList.length)\n // return true;\n //});\n field.tagList.forEach(function (t, i) {\n var cat = vm.categories.find(function (c) { return c.id == t.categoryId; });\n if (field.tagList.length == i+1) {\n if (i == 0) {\n req.mainCategory = t.updateCategory;\n } else if (i == 1) {\n req.sub1Category = t.updateCategory;\n } else if (i == 2) {\n req.sub2Category = t.updateCategory;\n }\n } else {\n if (i == 0) {\n req.mainCategory = cat;\n } else if (i == 1) {\n req.sub1Category = cat;\n } else if (i == 2) {\n req.sub2Category = cat;\n }\n }\n \n });\n api.report.addCategoryDocument(req)\n .then(function (res) {\n field.processing = false;\n vm.document.tagGroup = res.tags;\n vm.document.charts = res.charts;\n vm.document.updateDate = res.updateDate;\n vm.document.updateBy = res.updateBy;\n vm.document.drafted = true;\n prepareTags(vm.document.tagGroup);\n vm.aspectSentiment = getAspectSentiment();\n vm.fillAnnotations();\n event.target.disabled = false;\n vm.moduleChange();\n field.editing = false;\n }, function (err) {\n field.processing = false;\n console.log(err);\n event.target.disabled = false;\n field.editing = false;\n vm.moduleChange();\n });\n }, function (err) {\n field.processing = false;\n event.target.disabled = false;\n field.editing = false;\n console.log(err);\n vm.moduleChange();\n })\n }\n\n function prepareTags(returnedTags) {\n vm.tags = returnedTags.filter(function (tag) {\n var strIndex = $scope.$annotation.startIndex + \"-\" + $scope.$annotation.endIndex;\n return tag.textIndex && tag.textIndex != null && strIndex == tag.textIndex && tag.moduleId == vm.selectedModule.id;\n })\n }\n\n function checkAddCategoryButton() {\n if (vm.selectedMainCategory && (vm.sub1Categories == null || vm.sub1Categories.length == 0)) {\n return true;\n }\n if (vm.selectedMainCategory && vm.selectedSub1Category && (vm.sub2Categories == null || vm.sub2Categories.length == 0)) {\n return true;\n }\n\n if (vm.selectedMainCategory && vm.selectedSub1Category && vm.selectedSub2Category) {\n return true;\n }\n\n return false;\n\n }\n\n function moduleChange() {\n var id = vm.selectedModule;\n vm.mainCategories = [];\n vm.mainCategories = vm.categories.filter(function (c) {\n if (c.moduleId === vm.selectedModule.id)\n return true;\n })\n vm.searchMainCategory = null;\n vm.searchSub1Category = null;\n vm.searchSub2Category = null;\n vm.selectedMainCategory = null;\n vm.selectedSub1Category = null;\n vm.selectedSub2Category = null;\n vm.sub1Categories = null;\n vm.sub2Categories = null;\n }\n\n function categorySearchInDropdown(query, categories) {\n var results = query ? categories.filter(createFilterFor(query)) : categories;\n return results;\n }\n\n function mainCategorySearch(query) {\n var results = query ? vm.mainCategories.filter(createFilterFor(query)) : vm.mainCategories;\n return results;\n }\n\n function sub1CategorySearch(query) {\n var results = query ? vm.sub1Categories.filter(createFilterFor(query)) : vm.sub1Categories;\n return results;\n }\n\n function sub2CategorySearch(query) {\n var results = query ? vm.sub2Categories.filter(createFilterFor(query)) : vm.sub2Categories;\n return results;\n }\n\n function createFilterFor(query) {\n var lowercaseQuery = query.toLocaleLowerCase('tr-TR');\n return function filterFn(category) {\n return ((category.name.toLocaleLowerCase('tr-TR')).indexOf(lowercaseQuery) != -1);\n };\n }\n\n function categoryChange(item) {\n vm.sub1Categories = [];\n if (item != undefined) {\n vm.sub1Categories = vm.categories.filter(function (cat) {\n if (cat.parent === item.id)\n return true;\n })\n }\n vm.selectedSub1Category = null;\n vm.searchSub1Category = null;\n vm.selectedSub2Category = null;\n vm.searchSub2Category = null;\n vm.sub2Categories = null;\n }\n\n function mainCategoryChange(item) {\n vm.sub1Categories = [];\n if (item != undefined) {\n vm.sub1Categories = vm.categories.filter(function (cat) {\n if (cat.parent === item.id)\n return true;\n })\n }\n vm.selectedSub1Category = null;\n vm.searchSub1Category = null;\n vm.selectedSub2Category = null;\n vm.searchSub2Category = null;\n vm.sub2Categories = null;\n }\n\n function sub1CategoryChange(item) {\n vm.sub2Categories = [];\n vm.searchSub2Category = null;\n if (item != undefined) {\n vm.sub2Categories = vm.categories.filter(function (cat) {\n if (cat.parent === item.id)\n return true;\n })\n }\n vm.searchSub2Category = null;\n }\n\n vm.annotationColors = ['red', 'blue', 'yellow', 'pink', 'aqua', 'orange', 'purple'];\n\n vm.fillAnnotations = function fillAnnotations() {\n var index = $scope.$annotation.startIndex + \"-\" + $scope.$annotation.endIndex;\n var tags = vm.document.tagGroup.filter(function (group) { return (group.type === 100 || group.type == 600) && group.textIndex === index });\n $scope.$annotation.data.tags = tags;\n if (tags.length == 0)\n $scope.$annotation.type = null;\n else\n $scope.$annotation.type = \"green\";\n }\n\n\n function init() {\n if (vm.modules && vm.modules.length > 0) {\n var classModules = vm.modules.filter(function (obj) {\n return obj.moduleTypeId == 1;\n });\n if (classModules && classModules.length > 0) {\n vm.modules = classModules.filter(function (r) { return r.id == vm.selectedModule.id });\n vm.selectedModule = vm.modules[0];\n moduleChange();\n }\n }\n }\n\n init();\n\n }\n\n function EditDialogController($mdDialog, title, data, api, $stateParams, $translate, $mdToast, pagination, $compile, $scope, NGAnnotation, $rootScope, reportModules, categories, $utils) {\n var vm = this;\n vm.document = data;\n $rootScope.d = vm.document;\n $rootScope.documentContent = vm.document.content;\n $rootScope.reportId = $stateParams.id;\n $rootScope.categories = categories;\n\n vm.language = $translate.use();\n vm.showToast = showSimpleToast;\n\n vm.selectedText = \"\";\n vm.textStartIndex = -1;\n vm.textEndIndex = -1;\n\n vm.title = title;\n\n vm.modules = [];\n vm.selectedModule = null;\n vm.selectedMainCategory = null;\n vm.selectedSub1Category = null;\n vm.selectedSub2Category = null;\n vm.selectedSentiment = null;\n vm.categories = [];\n vm.mainCategories = [];\n vm.sub1Categories = [];\n vm.sub2Categories = [];\n vm.selectedTagGroup = [];\n vm.reportId = $stateParams.id;\n if ($translate.use() === 'en')\n vm.sentiments = [\"NEUTRAL\", \"NEGATIVE\", \"POSITIVE\", \"MIXED\"];\n else if ($translate.use() === 'tr')\n vm.sentiments = [\"NÖTR\", \"OLUMSUZ\", \"OLUMLU\", \"KARIŞIK\"];\n\n vm.mainCategorySearch = mainCategorySearch;\n vm.mainCategoryChange = mainCategoryChange;\n vm.sub1CategoryChange = sub1CategoryChange;\n vm.sub1CategorySearch = sub1CategorySearch;\n vm.sub2CategorySearch = sub2CategorySearch;\n\n vm.moduleChange = moduleChange;\n vm.addCategory = addCategory;\n vm.addSentiment = addSentiment;\n vm.checkAddCategoryButton = checkAddCategoryButton;\n vm.readyDocument = readyDocument;\n vm.removeDocument = removeDocument;\n vm.removeCategory = removeCategory;\n vm.unassignDocument = unassignDocument;\n\n vm.highlightText = highlightText;\n vm.highlightColors = ['#aec7e8', '#ffbb78', '#98df8a', '#d62728', '#ff9896', '#c5b0d5', '#c49c94', '#e377c2'];\n vm.annotationColors = ['red', 'green', 'brown', 'blurgrey', 'orange', 'purple', 'cyan', 'indigo'];\n vm.annotationColorsCodes = ['#ef9a9a', '#a5d6a7', '#bcaaa4', '#b0bec5', '#ffcc80', '#ce93d8', '#80deea', '#9fa8da'];\n\n vm.annotateOnStartTexts = function () {\n vm.annotations[0] = [];\n var moduleId = vm.selectedModule.id;\n var tags = vm.document.tagGroup.filter(function (group) { return (group.type === 100 || (group.type >= 210 && group.type <= 212)) && moduleId === group.moduleId });\n vm.selectedTagGroup = tags;\n var index = 0;\n tags.forEach(function (tag) {\n if (tag.textIndex && tag.textIndex !== null) {\n var arrIndexes = tag.textIndex.split(\"-\");\n var startIndex = parseInt(arrIndexes[0]);\n var endIndex = parseInt(arrIndexes[1]);\n var existsAnnotatedIndexes = vm.annotations[0].find(function (annotation) {\n return annotation.startIndex == startIndex && annotation.endIndex == endIndex;\n });\n if (existsAnnotatedIndexes) {\n tag[\"color\"] = existsAnnotatedIndexes.colorcode;\n existsAnnotatedIndexes.data.tags.push(tag);\n } else {\n tag[\"color\"] = vm.annotationColorsCodes[index];\n var annotation = new NGAnnotation({\n startIndex: startIndex,\n endIndex: endIndex,\n colorcode: vm.annotationColorsCodes[index],\n type: vm.annotationColors[index++],\n data: {\n tags: []\n }\n });\n annotation.data.tags.push(tag);\n vm.annotations[0].push(annotation);\n }\n }\n })\n $rootScope.annotations = vm.annotations;\n }\n vm.annotations = [[]]\n init();\n $rootScope.annotateRefresh = vm.annotateOnStartTexts;\n vm.annotateOnStartTexts();\n vm.onAnnotate = function () {\n\n }\n vm.onAnnotateError = function () {\n\n }\n vm.onPopupShow = function () {\n\n }\n vm.onStartHighlightTexts = function onStartHighlightTexts() {\n var tags = vm.document.tagGroup.filter(function (group) { return group.type === 100 });\n tags.forEach(function (tag, index) {\n if (tag.textIndex && tag.textIndex !== null) {\n vm.highlightText(tag.textIndex, index);\n }\n })\n }\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n function highlightText(indexes, index) {\n var color = vm.highlightColors[index];\n if (indexes) {\n var arrIndexes = indexes.split(\"-\");\n var startIndex = parseInt(arrIndexes[0]);\n var endIndex = parseInt(arrIndexes[1]);\n if (vm.selectedText == \"\") {\n var content = vm.document.content;\n content = content.substring(0, startIndex) + '' + content.substring(startIndex, endIndex) + '' + content.substring(endIndex, content.length);\n vm.document.content = content;\n }\n }\n }\n\n function removeDocument(event) {\n event.target.disabled = true;\n var request = {\n documentId: vm.document.id\n }\n api.report.removeDocument(request)\n .then(function (r) {\n var lang = $translate.use();\n if(lang == 'en'){\n vm.showToast(\"Document Removed Successfully.\");\n }else{\n vm.showToast(\"Döküman Başarıyla Kaldırıldı.\");\n }\n pagination.readyCount++;\n vm.document.drafted = false;\n vm.document.isReady = false;\n vm.document.isTrashed = true;\n vm.document.updateDate = r.updateDate;\n vm.document.updateBy = r.updateBy;\n event.target.disabled = false;\n $mdDialog.hide(true);\n }, function (r) {\n event.target.disabled = false;\n $mdDialog.hide(true);\n })\n }\n\n function readyDocument(event, ready) {\n event.target.disabled = true;\n var request = {\n documentId: vm.document.id\n };\n api.report.readyDocument(request)\n .then(function (r) {\n var lang = $translate.use();\n if(lang == 'en'){\n vm.showToast(\"Document Approved Successfully.\");\n }else{\n vm.showToast(\"Döküman Başarıyla Onaylandı.\");\n }\n pagination.readyCount++;\n vm.document.drafted = false;\n vm.document.isReady = true;\n vm.document.updateDate = r.updateDate;\n vm.document.updateBy = r.updateBy;\n event.target.disabled = false;\n $mdDialog.hide(true);\n }, function (r) {\n event.target.disabled = false;\n $mdDialog.hide(true);\n })\n }\n\n function checkAddCategoryButton() {\n if (vm.selectedMainCategory && (vm.sub1Categories == null || vm.sub1Categories.length == 0)) {\n return true;\n }\n if (vm.selectedMainCategory && vm.selectedSub1Category && (vm.sub2Categories == null || vm.sub2Categories.length == 0)) {\n return true;\n }\n\n if (vm.selectedMainCategory && vm.selectedSub1Category && vm.selectedSub2Category) {\n return true;\n }\n\n return false;\n\n }\n\n function showSimpleToast(text) {\n $mdToast.show($mdToast.simple().textContent(text));\n };\n\n\n function unassignDocument() {\n api.report.unassignDocument(vm.document.id)\n .then(function (r) {\n if (r) {\n var lang = $translate.use();\n if(lang == 'en'){\n vm.showToast(\"Document Assignment Cleared.\");\n }else{\n vm.showToast(\"Döküman ataması temizlendi.\");\n } \n }\n }, function (r) {\n var lang = $translate.use();\n if(lang == 'en'){\n vm.showToast(\"Failed To Clear Document Assignment.\");\n }else{\n vm.showToast(\"Döküman ataması temizlemesi başarısız.\");\n } \n\n })\n }\n\n function addSentiment() {\n var sentiment = \"\";\n if (vm.selectedSentiment == \"OLUMLU\") sentiment = \"POSITIVE\";\n if (vm.selectedSentiment == \"POSITIVE\") sentiment = \"POSITIVE\";\n if (vm.selectedSentiment == \"OLUMSUZ\") sentiment = \"NEGATIVE\";\n if (vm.selectedSentiment == \"NEGATIVE\") sentiment = \"NEGATIVE\";\n if (vm.selectedSentiment == \"NÖTR\") sentiment = \"NEUTRAL\";\n if (vm.selectedSentiment == \"NEUTRAL\") sentiment = \"NEUTRAL\";\n if (vm.selectedSentiment == \"KARIŞIK\") sentiment = \"MIXED\";\n if (vm.selectedSentiment == \"MIXED\") sentiment = \"MIXED\";\n var req = {\n documentId: vm.document.id,\n sentiment: sentiment,\n reportId: vm.reportId\n }\n api.report.addSentimentDocument(req)\n .then(function (r) {\n $utils.googleAnalyticsSetAction(\"REPORT_DOCUMENT\", \"Add Sentiment\", vm.selectedSentiment)\n vm.document.drafted = true;\n vm.document.tagGroup = r.tags;\n vm.document.charts = r.charts;\n vm.document.updateDate = r.updateDate;\n vm.document.updateBy = r.updateBy;\n }, function (r) {\n console.log(err);\n })\n }\n\n function addCategory(event) {\n event.target.disabled = true;\n var req = {\n documentId: vm.document.id,\n mainCategory: vm.selectedMainCategory,\n sub1Category: vm.selectedSub1Category,\n sub2Category: vm.selectedSub2Category,\n moduleId: vm.selectedModule.id,\n reportId: vm.reportId,\n moduleName: vm.selectedModule.name,\n text: vm.selectedText,\n textStartIndex: vm.textStartIndex,\n textEndIndex: vm.textEndIndex\n };\n api.report.addCategoryDocument(req)\n .then(function (res) {\n vm.document.tagGroup = res.tags;\n vm.document.charts = res.charts;\n vm.document.updateDate = res.updateDate;\n vm.document.updateBy = res.updateBy;\n vm.document.drafted = true;\n vm.annotateOnStartTexts();\n event.target.disabled = false;\n event.target.disabled = false;\n vm.moduleChange();\n }, function (err) {\n console.log(err);\n event.target.disabled = false;\n vm.moduleChange();\n })\n }\n\n function removeCategory(req, event, textIndex) {\n req.processing = true;\n event.target.disabled = true;\n req.documentId = vm.document.id;\n req.reportId = vm.reportId;\n req.textIndex = textIndex;\n api.report.deleteCategoryDocument(req)\n .then(function (res) {\n req.processing = false;\n vm.document.tagGroup = res.tags;\n vm.document.charts = res.charts;\n vm.document.updateDate = res.updateDate;\n vm.document.updateBy = res.updateBy;\n vm.document.drafted = true;\n vm.annotateOnStartTexts();\n event.target.disabled = false;\n vm.moduleChange();\n }, function (err) {\n req.processing = false;\n event.target.disabled = false;\n console.log(err);\n vm.moduleChange();\n })\n }\n function mainCategorySearch(query) {\n var results = query ? vm.mainCategories.filter(createFilterFor(query)) : vm.mainCategories;\n return results;\n }\n\n function sub1CategorySearch(query) {\n var results = query ? vm.sub1Categories.filter(createFilterFor(query)) : vm.sub1Categories;\n return results;\n }\n\n function sub2CategorySearch(query) {\n var results = query ? vm.sub2Categories.filter(createFilterFor(query)) : vm.sub2Categories;\n return results;\n }\n\n function createFilterFor(query) {\n var lowercaseQuery = query.toLocaleLowerCase('tr-TR');\n return function filterFn(category) {\n return ((category.name.toLocaleLowerCase('tr-TR')).indexOf(lowercaseQuery) != -1);\n };\n\n }\n\n function moduleChange() {\n $rootScope.selectedModule = vm.selectedModule;\n var id = vm.selectedModule.id;\n vm.selectedTagGroup = vm.document.tagGroup.filter(function (tag) { return tag.moduleId == id && tag.type != 210 && tag.type != 211 && tag.type != 212 });\n vm.mainCategories = [];\n vm.mainCategories = vm.categories.filter(function (c) {\n if (c.moduleId === vm.selectedModule.id)\n return true;\n })\n vm.searchMainCategory = null;\n vm.searchSub1Category = null;\n vm.searchSub2Category = null;\n vm.selectedMainCategory = null;\n vm.selectedSub1Category = null;\n vm.selectedSub2Category = null;\n vm.sub1Categories = null;\n vm.sub2Categories = null;\n vm.annotateOnStartTexts();\n }\n\n\n function mainCategoryChange(item) {\n vm.sub1Categories = [];\n if (item != undefined) {\n vm.sub1Categories = vm.categories.filter(function (cat) {\n if (cat.parent === item.id)\n return true;\n })\n }\n vm.selectedSub1Category = null;\n vm.searchSub1Category = null;\n vm.selectedSub2Category = null;\n vm.searchSub2Category = null;\n vm.sub2Categories = null;\n }\n\n function sub1CategoryChange(item) {\n vm.sub2Categories = [];\n vm.searchSub2Category = null;\n if (item != undefined) {\n vm.sub2Categories = vm.categories.filter(function (cat) {\n if (cat.parent === item.id)\n return true;\n })\n }\n vm.searchSub2Category = null;\n }\n\n function init() {\n vm.categories = categories;\n vm.modules = reportModules;\n $rootScope.reportModules = vm.modules;\n if (vm.modules && vm.modules.length > 0) {\n var classModules = vm.modules.filter(function (obj) {\n return obj.moduleTypeId == 1;\n });\n if (classModules && classModules.length > 0) {\n vm.modules = classModules;\n vm.selectedModule = vm.modules[0];\n $rootScope.selectedModule = vm.selectedModule;\n moduleChange();\n }\n }\n }\n\n\n\n //vm.colors = ['blue-bg', 'blue-grey-bg', 'orange-bg', 'pink-bg', 'purple-bg'];\n vm.colors = [\n [\"#1f77b4\", \"#fff\"],\n [\"#aec7e8\", \"#000\"],\n [\"#ff7f0e\", \"#000\"],\n [\"#ffbb78\", \"#000\"],\n [\"#2ca02c\", \"#fff\"],\n [\"#98df8a\", \"#000\"],\n [\"#d62728\", \"#fff\"],\n [\"#ff9896\", \"#000\"],\n [\"#9467bd\", \"#000\"],\n [\"#c5b0d5\", \"#000\"],\n [\"#8c564b\", \"#fff\"],\n [\"#c49c94\", \"#000\"],\n [\"#e377c2\", \"#000\"],\n [\"#f7b6d2\", \"#000\"],\n [\"#7f7f7f\", \"#fff\"],\n [\"#c7c7c7\", \"#000\"],\n [\"#bcbd22\", \"#000\"],\n [\"#dbdb8d\", \"#000\"],\n [\"#17becf\", \"#000\"],\n [\"#9edae5\", \"#000\"]\n ];\n\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.report')\n .service('ReportQueryParserService', ReportQueryParserService);\n\n /** @ngInject */\n function ReportQueryParserService($q, $log, $translate, $mdMedia, $mdDialog, api, $stateParams, NGAnnotation, user, ReportService) {\n\n\n this.setCategoryFacetFilters = function(filterChips) {\n var allCatFilter;\n if (filterChips && filterChips.length > 0) {\n var normalCategoryFilters = filterChips.filter(function (c) {\n return c.type == 100 ;\n });\n if (normalCategoryFilters.length > 0) {\n var groupedCategoriesByModuleId = normalCategoryFilters.reduce(function (r, a) {\n r[a.key] = r[a.key] || [];\n r[a.key].push(a);\n return r;\n }, Object.create(null));\n var allCatFilters = [];\n for (var m = 0; m < Object.keys(groupedCategoriesByModuleId).length; m++) {\n var keyM = Object.keys(groupedCategoriesByModuleId)[m];\n var valuesM = groupedCategoriesByModuleId[keyM];\n var baseCategoryFilter = \"module.id=\" + keyM + \" AND \";\n var catFilter = \"\";\n var groupedResult = valuesM.reduce(function (r, a) {\n r[a.group] = r[a.group] || [];\n r[a.group].push(a);\n return r;\n }, Object.create(null));\n for (var i = 0; i < Object.keys(groupedResult).length; i++) {\n var key = Object.keys(groupedResult)[i];\n var values = groupedResult[key];\n if (key == -1) {\n values.forEach(function (cat) {\n var v = \"\";\n var sentimentFilterString = \"|\";\n if(cat.aspectSentiment){\n sentimentFilterString += cat.aspectSentiment;\n }\n if (cat.parentString) {\n v = cat.parentString + \"->\";\n }\n var andFilter = \"\\\"\" + (v + cat.value) + sentimentFilterString + \"\\\"\";\n catFilter = \"(\" + andFilter + \")\";\n allCatFilter = \"(\" + baseCategoryFilter + catFilter + \")\";\n allCatFilters.push(allCatFilter);\n }) \n } else {\n var catORfilter = \"\";\n values.forEach(function (cat) {\n var v = \"\";\n if (cat.parentString) {\n v = cat.parentString + \"->\";\n }\n if (!catORfilter) {\n catORfilter = \"\\\"\" + v + cat.value + \"\\\"\";\n } else {\n catORfilter = catORfilter + \" OR \\\"\" + v + cat.value + \"\\\"\";\n }\n })\n if (catORfilter) {\n catORfilter = \"(\" + catORfilter + \")\";\n allCatFilter = \"(\" + baseCategoryFilter + catORfilter + \")\";\n allCatFilters.push(allCatFilter);\n }\n }\n }\n }\n }\n }\n return allCatFilters;\n }\n\n this.setNormalFacetFilters= function(filterChips) {\n var filters = [];\n if (!filterChips || filterChips.length == 0)\n return filters;\n var normalFilters = filterChips.filter(function (c) {\n return c.group == -1 && (ReportService.isThisFieldType(300, c.type) || c.type == 700 ||c.type == 200);\n });\n if (normalFilters.length > 0) {\n normalFilters.forEach(function (f) {\n var v = \"\\\"\" + f.key + \"\\\":\\\"\" + f.value + \"\\\"\";\n filters.push(v);\n });\n }\n var normalORFilters = filterChips.filter(function (c) {\n return c.group > -1 && (ReportService.isThisFieldType(300, c.type) || c.type == 700 ||c.type == 200);\n });\n if (normalORFilters.length > 0) {\n var groupedOrResult = normalORFilters.reduce(function (r, a) {\n r[a.group] = r[a.group] || [];\n r[a.group].push(a);\n return r;\n }, Object.create(null));\n Object.keys(groupedOrResult).forEach(function (key) {\n var values = groupedOrResult[key];\n if (values && values.length > 0) {\n var operand = \"OR\";\n var keyValues = values.map(function (v) {\n return \"\\\"\" + v.key + \"\\\":\\\"\" + v.value + \"\\\"\";\n });\n var res = \"(\" + keyValues.join(\" \" + operand + \" \") + \")\";\n filters.push(res);\n }\n });\n }\n return filters;\n }\n }\n\n})();\n\n(function () {\n 'use strict';\n \n angular\n .module('app.report')\n .service('ReportNoteService', ReportNoteService)\n .controller('BasicTagConfirmDialogController', BasicTagConfirmDialogController)\n .controller('ReportNoteDialogController', ReportNoteDialogController);\n \n /** @ngInject */\n function ReportNoteService($q, $log, $state, $translate, $mdMedia, $mdDialog, api, $stateParams, NGAnnotation, user) {\n \n\n this.showDocumentNote = function ($scope,$event,doc,report, reportSettings) {\n showReportDataNoteDialog($scope, $event, doc, report, reportSettings)\n .then(function (answer) {\n if (!answer) return;\n })\n } \n\n this.showBasicConfirmDialog = showBasicConfirmDialog;\n \n function showReportDataNoteDialog($scope,$event,doc,report, reportSettings) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'ReportNoteDialogController as vm',\n templateUrl: 'app/main/apps/reports/views/edit/report-document-note-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n skipHide: true,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n doc: doc,\n report: report,\n reportSettings: reportSettings\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showBasicConfirmDialog($scope, $event, title, body) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'BasicTagConfirmDialogController as vm',\n templateUrl: 'app/main/apps/sources/services/basic-confirm-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n skipHide: true,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body,\n state: $state\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function (answer) {\n deferred.resolve(answer);\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n \n }\n\n function BasicTagConfirmDialogController($mdDialog, title, body) {\n var vm = this;\n vm.title = title;\n vm.body = body;\n\n vm.cancel = function () {\n $mdDialog.hide(false);\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n }\n \n function ReportNoteDialogController($mdDialog, $q, $log, $mdToast, api, doc, report, reportSettings, ReportNoteService, $scope, $translate, user) {\n var vm = this;\n vm.report = report;\n vm.newNote = \"\";\n vm.document = doc;\n vm.reportSettings = reportSettings;\n vm.filterTag = \"\";\n vm.userTags = [];\n vm.documentUserTags = [];\n vm.documentUserTagsFacet = {\n alias: null,\n arrayValues: [],\n key: \"user_tags_ss\",\n title: \"Kullanıcı Etiketleri\",\n type: 300,\n value: \"\"\n };\n vm.user = user;\n vm.defaultTags = [];\n vm.note = \"\";\n vm.noteEnter = false;\n vm.notes = vm.document.documentNotes != null ? vm.document.documentNotes : [];\n /*\n vm.saveNote = function saveNote(){\n if(!vm.newNote || vm.newNote.length < 1) return;\n var noteBody = {\n note : vm.newNote\n }\n api.report.document.addNote(vm.report.id,vm.document.id,noteBody)\n .then(function(r){\n var note = {\n text: noteBody.note,\n isActive:1\n }\n if(!vm.document.notes){\n vm.document[\"notes\"] = [];\n vm.document.notes.push(note);\n }else{\n vm.document.notes = [];\n vm.document.notes.push(note);\n }\n var lang = $translate.use();\n if(lang == 'en'){\n showSimpleToast(\"Note saved successfully.\");\n }else{\n showSimpleToast(\"Not Başarıyla Kaydedildi.\");\n }\n vm.cancel();\n },function(err){\n console.log(err);\n })\n }\n \n \n vm.removeNote = function () {\n api.report.document.removeNote(vm.report.id,vm.document.id)\n .then(function (res) {\n var lang = $translate.use();\n if(lang == 'en'){\n showSimpleToast(\"Note erased successfully.\");\n }else{\n showSimpleToast(\"Not Başarıyla Silindi.\")\n }\n vm.document.notes = [];\n vm.cancel();\n }, function (err) {\n console.log(err);\n })\n }*/\n\n vm.sendNote = function (note) {\n vm.note = \"\";\n vm.noteProcessing = true;\n var noteBody = {\n value: note,\n username: vm.user.userName,\n date: Date.now()\n }\n api.report.document.addNote(vm.report.id, vm.document.id, noteBody)\n .then(function (r) {\n vm.noteProcessing = false;\n vm.notes.push(r);\n vm.document.documentNotes = vm.notes;\n }, function (err) {\n vm.noteProcessing = false;\n console.log(err);\n })\n }\n\n function setOriginalDocumentTags() {\n vm.document.nominalAttributes = vm.document.nominalAttributes.filter(function (k) {\n return k.key != \"user_tags_ss\";\n });\n vm.documentUserTags.forEach(function (tag) {\n vm.document.nominalAttributes.push({\n alias: null,\n key: \"user_tags_ss\",\n title: \"Kullanıcı Etiketleri\",\n type: 300,\n value: tag\n })\n })\n\n }\n\n vm.searchTags = function (query) {\n var def = $q.defer();\n var addNewTag = [{ name: query, question: true }]\n if (query.length == 3) {\n api.report.document.userTags(vm.report.id, query)\n .then(function (response) {\n var flag = response.filter(function (m) { return m == query });\n if (flag.length < 1) {\n response = addNewTag.concat(response);\n }\n def.resolve(response);\n vm.userTags = response;\n },\n function (response) {\n $log.error(response);\n });\n return def.promise;\n } else {\n vm.userTags = vm.userTags.filter(function (k) { return !k.question; })\n var results = query ? vm.userTags.filter(createFilterConditions(query)) : vm.userTags;\n var flag = results.filter(function (m) { return m.toLowerCase() == query.toLowerCase() });\n if (flag.length < 1) {\n results = addNewTag.concat(results);\n }\n return results;\n }\n }\n\n function createFilterConditions(query) {\n var lowercaseQuery = angular.lowercase(query);\n return function filterFn(condition) {\n if (condition.question) condition = condition.name;\n var lowercaseName = angular.lowercase(condition);\n return lowercaseName.includes(lowercaseQuery)\n };\n }\n\n vm.saveNewTag = function (tag, $event) {\n ReportNoteService.showBasicConfirmDialog($scope, $event, $translate.instant('REPORT.EDIT_DOCUMENT.ADD_NEW_TAG'), $translate.instant('REPORT.EDIT_DOCUMENT.ADD_NEW_TAG_DESC'))\n .then(function (answer) {\n if (answer == true) {\n vm.filterTag = \"\";\n api.report.document.saveUserTag(vm.report.id, vm.document.id , tag.name)\n .then(function (response) {\n vm.documentUserTags.push(tag.name);\n setOriginalDocumentTags();\n },\n function (response) {\n $log.error(response);\n });\n }\n });\n }\n\n vm.removeTag = function (tag) {\n api.report.document.removeUserTag(vm.report.id, vm.document.id, tag)\n .then(function () {\n vm.documentUserTags = vm.documentUserTags.filter(function (k) { return k != tag });\n setOriginalDocumentTags();\n },\n function (response) {\n $log.error(response);\n });\n }\n\n vm.searchTextChange = function (tag) {\n vm.filterTag = tag.substring(0, 50)\n }\n\n vm.selectTag = function (tag) {\n if (tag == undefined || tag.question == true || vm.documentUserTags.includes(tag)) return;\n vm.filterTag = \"\";\n vm.documentUserTags.push(tag);\n api.report.document.saveUserTag(vm.report.id, vm.document.id, tag)\n .then(function (response) {\n setOriginalDocumentTags();\n },\n function (response) {\n $log.error(response);\n });\n }\n\n function setDocumentUserTags() {\n var documentUserTagsFacets = vm.document.nominalAttributes.filter(function (k) {\n return k.key == \"user_tags_ss\";\n });\n if (documentUserTagsFacets) {\n vm.documentUserTagsFacet = documentUserTagsFacets;\n documentUserTagsFacets.forEach(function (tagFacet) {\n vm.documentUserTags.push(tagFacet.value);\n });\n }\n }\n\n function setDefaultTags() {\n if (vm.reportSettings != null && vm.reportSettings.commonSettings.defaultDocumentTags != null) {\n vm.reportSettings.commonSettings.defaultDocumentTags.forEach(function (k) {\n vm.defaultTags.push({\n value: k,\n processing: false\n })\n })\n }\n }\n\n vm.addDefaultTag = function (defaultTag) {\n if (!defaultTag.processing && !vm.documentUserTags.includes(defaultTag.value)) {\n defaultTag.processing = true;\n api.report.document.saveUserTag(vm.report.id, vm.document.id, defaultTag.value)\n .then(function (response) {\n defaultTag.processing = false;\n vm.documentUserTags.push(defaultTag.value);\n setOriginalDocumentTags();\n },\n function (response) {\n $log.error(response);\n });\n }\n }\n\n vm.formatDate = function (dateString) {\n var date = new Date(dateString);\n return date.toLocaleString();\n }\n\n vm.readyNote = function () {\n api.report.document.completeAction(vm.report.id, vm.document.id)\n .then(function (response) {\n vm.document.noteReady = response;\n },\n function (response) {\n $log.error(response);\n });\n }\n\n function setActionConfirmed() {\n var attribute = vm.document.nominalAttributes.filter(function (k) {\n return k.key == \"is_action_confirmed_b\";\n })[0];\n if (attribute) {\n vm.document.noteReady = attribute.value;\n }\n }\n\n function init() {\n setDefaultTags();\n setDocumentUserTags();\n setActionConfirmed();\n }\n init();\n \n function showSimpleToast(text) {\n $mdToast.show($mdToast.simple().textContent(text));\n }\n \n vm.cancel = function () {\n $mdDialog.hide(true);\n //$mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n \n }\n })();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.report')\n .service('ReportAssignmentService', ReportAssignmentService)\n .controller('AssignDialogController', AssignDialogController);\n\n /** @ngInject */\n function ReportAssignmentService($q, $log, $translate, $mdMedia, $mdDialog, api, $stateParams, NGAnnotation, user) {\n\n\n this.assignDocument = function ($scope, $event, document, report, user, documentNickname) {\n var deferred = $q.defer();\n showAssignDocumentDialog($scope, $event, document, report, user, documentNickname)\n .then(function (answer) {\n if (!answer) return;\n else\n deferred.resolve(answer);\n })\n return deferred.promise;\n }\n\n function showAssignDocumentDialog($scope, $event, data,report,user,documentNickname) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'AssignDialogController as vm',\n templateUrl: 'app/main/apps/reports/views/edit/report-document-assign-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n report: report,\n user:user,\n data: data,\n api: api,\n $stateParams: $stateParams,\n documentNickname: documentNickname\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function (r) {\n console.log(r);\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n }\n }\n\n function AssignDialogController($mdDialog, data, api, $mdToast, report, user, documentNickname, $translate, ReportNoteService, $scope, $utils) {\n var vm = this;\n vm.document = data;\n vm.report = report;\n vm.usernames = null;\n vm.asssignDocument = asssignDocument;\n vm.selectedUsername = null;\n vm.showToast = showSimpleToast;\n vm.usernameSearch = usernameSearch;\n vm.changeAssignedUsername = changeAssignedUsername;\n vm.answer = answer;\n vm.documentNickname = documentNickname;\n api.report.assignToUsers(report.workspaceId)\n .then(function (r) {\n vm.usernames = r;\n }, function (r) {});\n\n function answer(bool) {\n $mdDialog.hide(bool);\n }\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n\n function asssignDocument() {\n var request = {\n assignee:vm.selectedUsername.userName,\n }\n api.report.document.assign(vm.report.id,vm.document.id,request)\n .then(function (response) {\n $utils.googleAnalyticsSetAction(\"REPORT_DOCUMENT\", \"Assign\", vm.selectedUsername.userName)\n var assignment = {\n assignedTo:request.assignee,\n assignedBy:user.userName,\n createDate: new Date(),\n isActive:1\n }\n vm.document[\"assignments\"] = [];\n vm.document.assignments.push(assignment);\n var lang = $translate.use();\n if (lang == \"en\") {\n vm.showToast(\"Document has been assigned to \" + vm.selectedUsername.name);\n }else{\n vm.showToast(\"Döküman \" + vm.selectedUsername.name + \" adlı kullanıcıya atandı.\");\n }\n vm.answer(true);\n },function(err){\n console.log(err);\n })\n $mdDialog.hide(true)\n }\n\n vm.addTag = function ($event) {\n ReportNoteService.showDocumentNote($scope, $event, vm.document, vm.report);\n }\n\n function showSimpleToast(text) {\n $mdToast.show($mdToast.simple().textContent(text));\n }\n\n function usernameSearch(query) {\n var results = query ? vm.usernames.filter(createFilterForUsername(query)) : vm.usernames;\n return results;\n }\n\n function createFilterForUsername(query) {\n var lowercaseQuery = query.toLocaleLowerCase('tr-TR');\n return function filterFn(item) {\n if (!item.name || item.name === \"\")\n return false;\n var bol = (item.name.toLocaleLowerCase('tr-TR')).indexOf(lowercaseQuery) != -1\n return bol;\n };\n\n }\n\n function changeAssignedUsername(item) {\n vm.selectedUsername = item;\n }\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.report')\n .service('ReportAspectAnnotationService', ReportAspectAnnotationService)\n .controller('ReportDocumentAspectAnnotationDialogController', ReportDocumentAspectAnnotationDialogController);\n\n /** @ngInject */\n function ReportAspectAnnotationService($q, $log, $translate, $mdMedia, $mdDialog, api, $stateParams, NGAnnotation, user) {\n\n }\n\n function ReportDocumentAspectAnnotationDialogController($scope, $q, $log, $rootScope, api, $translate, $utils, user) {\n var vm = this;\n vm.annotation = $scope.$annotation;\n vm.document = vm.annotation.document;\n vm.reportId = vm.annotation.reportId;\n vm.moduleId = vm.annotation.moduleId;\n vm.moduleName = vm.annotation.moduleName;\n vm.userName = vm.annotation.userName;\n vm.closePopup = vm.annotation.closePopup;\n vm.aspectCategories = [];\n vm.selectedAspectSentiment = null;\n vm.categories = vm.annotation.categories;\n vm.user = user;\n\n vm.mainCategories = null;\n vm.selectedMainCategory = null;\n vm.mainCategorySearch = mainCategorySearch;\n vm.mainCategoryChange = mainCategoryChange;\n\n vm.sub1Categories = null;\n vm.selectedSub1Category = null;\n vm.sub1CategorySearch = sub1CategorySearch;\n vm.sub1CategoryChange = sub1CategoryChange;\n\n vm.sub2Categories = null;\n vm.selectedSub2Category = null;\n vm.sub2CategorySearch = sub2CategorySearch;\n\n vm.rejectClicked = false;\n vm.removeAspectSentimentLoading = false;\n\n\n\n //methods\n vm.changeAspectSentiment = changeAspectSentiment;\n vm.removeAspectSentiment = removeAspectSentiment;\n vm.addCategory = addCategory;\n vm.checkAddCategoryButton = checkAddCategoryButton;\n vm.removeCategory = removeCategory;\n\n function setUnReadyAudit(doc) {\n doc[\"isReady\"] = false;\n doc[\"readyBy\"] = null;\n doc[\"readyDate\"] = null;\n }\n\n function setUnPendingAudit(doc) {\n doc[\"isPending\"] = false;\n doc[\"pendingBy\"] = null;\n doc[\"pendingDate\"] = null;\n }\n\n function setDraftAudit(doc) {\n doc[\"draftedBy\"] = vm.userName;\n doc[\"draftedDate\"] = new Date();\n doc[\"isDrafted\"] = true;\n doc[\"draftedByName\"] = vm.user.name;\n }\n\n function changeAspectSentiment() {\n\n var body = {\n startIndex: vm.annotation.startIndex,\n endIndex: vm.annotation.endIndex,\n sentimentValue: vm.selectedAspectSentiment.value\n };\n api.report.document.addAspectSentiment(vm.reportId, vm.document.id, vm.annotation.moduleId, body)\n .then(function () {\n $utils.googleAnalyticsSetAction(\"REPORT_DOCUMENT\", \"Add Aspect Sentiment\", JSON.stringify(body))\n vm.aspectCategories.forEach(function (c) {\n c[\"sentiment\"] = vm.selectedAspectSentiment.name;\n c[\"sentimentValue\"] = vm.selectedAspectSentiment.value;\n });\n vm.document[\"updateDate\"] = new Date();\n vm.document[\"updatedBy\"] = vm.userName;\n vm.document[\"isUpdated\"] = true;\n setDraftAudit(vm.document);\n setUnReadyAudit(vm.document);\n setUnPendingAudit(vm.document);\n vm.annotation.sentiment = vm.selectedAspectSentiment.name;\n vm.annotation.sentimentValue = vm.selectedAspectSentiment.value;\n vm.selectedAspectSentiment = null;\n var foundedAspect = vm.document.categories.find(function (a) {\n return a.startIndex == vm.annotation.startIndex && a.endIndex == vm.annotation.endIndex\n });\n if (!foundedAspect) {\n var aspect = {\n startIndex: vm.annotation.startIndex,\n endIndex: vm.annotation.endIndex,\n moduleName: vm.moduleName,\n moduleId: vm.moduleId,\n sentiment: vm.annotation.sentiment,\n sentimentValue: vm.annotation.sentimentValue,\n categories: []\n };\n if (!vm.document.categories)\n vm.document[\"categories\"] = [];\n vm.document.categories.push(aspect);\n }\n generateSentimentChart();\n },\n function (err) {\n console.log(err);\n });\n }\n\n\n function addCategory($event) {\n var targetCategoryId = findCategoryId();\n if (!targetCategoryId) return;\n var body = {\n startIndex: vm.annotation.startIndex,\n endIndex: vm.annotation.endIndex,\n categoryRequest: {\n categoryIds: [targetCategoryId]\n }\n }\n api.report.document.addCategory(vm.reportId, vm.document.id, vm.moduleId, body)\n .then(function () {\n $utils.googleAnalyticsSetAction(\"REPORT_DOCUMENT\", \"Add Category\", JSON.stringify(body))\n vm.document[\"updateDate\"] = new Date();\n vm.document[\"updatedBy\"] = vm.userName;\n vm.document[\"isUpdated\"] = true;\n setDraftAudit(vm.document);\n setUnReadyAudit(vm.document);\n setUnPendingAudit(vm.document);\n var insertable = true;\n if(vm.aspectCategories && vm.aspectCategories.length > 0){\n vm.aspectCategories.forEach(function(c){\n if(c.categories && c.categories.length > 0){\n c.categories.forEach(function(c2){\n if(c2.id === targetCategoryId){\n insertable = false;\n }\n })\n }\n })\n }\n if(insertable){\n var aspect = {\n startIndex: vm.annotation.startIndex,\n endIndex: vm.annotation.endIndex,\n moduleName: vm.moduleName,\n moduleId: vm.moduleId,\n sentiment: vm.annotation.sentiment,\n sentimentValue: vm.annotation.sentimentValue,\n categories: generateCategories()\n }\n vm.aspectCategories.push(aspect);\n if (!vm.document.categories)\n vm.document[\"categories\"] = [];\n vm.document.categories.push(aspect);\n generateSentimentChart();\n }\n moduleChange();\n }, function (err) {\n console.log(err);\n })\n }\n\n function findCategoryId() {\n var categoryId;\n if (vm.selectedMainCategory && vm.selectedMainCategory.id) {\n categoryId = vm.selectedMainCategory.id;\n }\n if (vm.selectedMainCategory && vm.selectedMainCategory.id && vm.selectedSub1Category && vm.selectedSub1Category.id) {\n categoryId = vm.selectedSub1Category.id;\n }\n if (vm.selectedMainCategory && vm.selectedMainCategory.id && vm.selectedSub1Category && vm.selectedSub1Category.id && vm.selectedSub2Category && vm.selectedSub2Category.id) {\n categoryId = vm.selectedSub2Category.id;\n }\n return categoryId;\n }\n\n function generateCategories() {\n var cats = [];\n if (vm.selectedMainCategory && vm.selectedMainCategory.id) {\n cats.push({\n name: vm.selectedMainCategory.name,\n id: vm.selectedMainCategory.id\n });\n }\n if (vm.selectedMainCategory && vm.selectedMainCategory.id && vm.selectedSub1Category && vm.selectedSub1Category.id) {\n cats.push({\n name: vm.selectedSub1Category.name,\n id: vm.selectedSub1Category.id\n });\n }\n if (vm.selectedMainCategory && vm.selectedMainCategory.id && vm.selectedSub1Category && vm.selectedSub1Category.id && vm.selectedSub2Category && vm.selectedSub2Category.id) {\n cats.push({\n name: vm.selectedSub2Category.name,\n id: vm.selectedSub2Category.id\n });\n }\n return cats;\n }\n\n function removeAspectSentiment() {\n if (vm.rejectClicked == true) return;\n vm.removeAspectSentimentLoading = true;\n var body = {\n startIndex: vm.annotation.startIndex,\n endIndex: vm.annotation.endIndex\n };\n api.report.document.removeAspectSentiment(vm.reportId, vm.document.id, vm.annotation.moduleId, body)\n .then(function () {\n $utils.googleAnalyticsSetAction(\"REPORT_DOCUMENT\", \"Remove Aspect Sentiment\", JSON.stringify(body))\n vm.aspectCategories.forEach(function (c) {\n c[\"sentiment\"] = null;\n c[\"sentimentValue\"] = null;\n });\n vm.document[\"updateDate\"] = new Date();\n vm.document[\"updatedBy\"] = vm.userName;\n vm.document[\"isUpdated\"] = true;\n setDraftAudit(vm.document);\n setUnReadyAudit(vm.document);\n setUnPendingAudit(vm.document);\n vm.annotation.sentiment = null;\n vm.annotation.sentimentValue = null;\n vm.selectedAspectSentiment = null;\n vm.document.categories.forEach(function (c) {\n if (vm.annotation.moduleId == c.moduleId && vm.annotation.endIndex == c.endIndex && vm.annotation.startIndex == c.startIndex) {\n c.sentiment = null;\n c.sentimentValue = null;\n }\n })\n vm.removeAspectSentimentLoading = false;\n generateSentimentChart();\n },\n function (err) {\n console.log(err);\n });\n }\n\n var removeAspectSentimentPromise = function () {\n var def = $q.defer();\n var body = {\n startIndex: vm.annotation.startIndex,\n endIndex: vm.annotation.endIndex\n };\n if (vm.annotation.sentimentValue && vm.annotation.sentimentValue != -1) {\n api.report.document.removeAspectSentiment(vm.reportId, vm.document.id, vm.annotation.moduleId, body)\n .then(function () {\n $utils.googleAnalyticsSetAction(\"REPORT_DOCUMENT\", \"Remove Aspect Sentiment\", JSON.stringify(body))\n vm.aspectCategories.forEach(function (c) {\n c[\"sentiment\"] = null;\n c[\"sentimentValue\"] = null;\n });\n vm.document[\"updateDate\"] = new Date();\n vm.document[\"updatedBy\"] = vm.userName;\n vm.document[\"isUpdated\"] = true;\n setDraftAudit(vm.document);\n setUnReadyAudit(vm.document);\n setUnPendingAudit(vm.document);\n vm.annotation.sentiment = null;\n vm.annotation.sentimentValue = null;\n vm.document.categories.forEach(function (c) {\n if (vm.annotation.moduleId == c.moduleId && vm.annotation.endIndex == c.endIndex && vm.annotation.startIndex == c.startIndex) {\n c.sentiment = null;\n c.sentimentValue = null;\n }\n })\n def.resolve(true);\n },\n function (err) {\n console.log(err);\n def.reject(false);\n });\n } else {\n def.resolve(true);\n }\n \n return def.promise;\n }\n\n var removeCategoryPromise = function (tags) {\n var def = $q.defer();\n if (!tags && tags.length < 1) return;\n var moduleId = tags[0].moduleId;\n var body = {\n startIndex: tags[0].startIndex,\n endIndex: tags[0].endIndex,\n categoryRequest: {\n categoryIds: []\n }\n }\n tags.forEach(function (tag) {\n if (tag.categories && tag.categories.length > 0) {\n var targetCategory = tag.categories[tag.categories.length - 1];\n body.categoryRequest.categoryIds.push(targetCategory.id);\n }\n })\n if (body.categoryRequest.categoryIds.length < 1) {\n def.resolve(true);\n return def.promise;\n }\n api.report.document.removeCategory(vm.reportId, vm.document.id, moduleId, body)\n .then(function () {\n $utils.googleAnalyticsSetAction(\"REPORT_DOCUMENT\", \"Remove Category\", JSON.stringify(body))\n vm.document[\"updateDate\"] = new Date();\n vm.document[\"updatedBy\"] = vm.userName;\n vm.document[\"isUpdated\"] = true;\n setDraftAudit(vm.document);\n setUnReadyAudit(vm.document);\n setUnPendingAudit(vm.document);\n tags.forEach(function (tag) {\n vm.aspectCategories = vm.aspectCategories.filter(function (c) {\n return c != tag;\n });\n if (vm.document.categories) {\n tag.categories = [];\n }\n generateSentimentChart();\n })\n def.resolve(true);\n }, function (err) {\n console.log(err);\n def.reject(false);\n })\n\n return def.promise;\n }\n\n function removeCategory(tag) {\n if (vm.rejectClicked == true) return;\n var targetCategory = tag.categories[tag.categories.length - 1];\n var body = {\n startIndex: tag.startIndex,\n endIndex: tag.endIndex,\n categoryRequest: {\n categoryIds: [\n targetCategory.id\n ]\n }\n }\n api.report.document.removeCategory(vm.reportId, vm.document.id, tag.moduleId, body)\n .then(function () {\n $utils.googleAnalyticsSetAction(\"REPORT_DOCUMENT\", \"Remove Category\", JSON.stringify(body))\n vm.document[\"updateDate\"] = new Date();\n vm.document[\"updatedBy\"] = vm.userName;\n vm.document[\"isUpdated\"] = true;\n setDraftAudit(vm.document);\n setUnReadyAudit(vm.document);\n setUnPendingAudit(vm.document);\n vm.aspectCategories = vm.aspectCategories.filter(function (c) {\n return c != tag;\n });\n if (vm.document.categories) {\n tag.categories = [];\n }\n generateSentimentChart();\n }, function (err) {\n console.log(err);\n })\n }\n\n function generateSentimentChart() {\n vm.document[\"sentimentChart\"] = [];\n vm.document.sentimentChart.push({\n label: \"Positive\",\n order: 1,\n value: 0\n });\n vm.document.sentimentChart.push({\n label: \"Negative\",\n order: 3,\n value: 0\n });\n vm.document.sentimentChart.push({\n label: \"Neutral\",\n order: 2,\n value: 0\n });\n if (!vm.document.categories || vm.document.categories.length < 1) return;\n vm.document.categories.forEach(function (tag) {\n if (tag.sentiment && tag.sentimentValue) {\n var sentimentValue = tag.sentimentValue;\n var foundedPart = vm.document.sentimentChart.find(function (i) {\n return i.order == sentimentValue\n });\n if (foundedPart && tag.categories && tag.categories.length > 0) {\n foundedPart.value = foundedPart.value + 1;\n }\n }\n })\n }\n\n function moduleChange() {\n vm.mainCategories = [];\n vm.mainCategories = vm.categories.filter(function (c) {\n if (c.moduleId === vm.moduleId)\n return true;\n })\n vm.searchMainCategory = null;\n vm.searchSub1Category = null;\n vm.searchSub2Category = null;\n vm.selectedMainCategory = null;\n vm.selectedSub1Category = null;\n vm.selectedSub2Category = null;\n vm.sub1Categories = null;\n vm.sub2Categories = null;\n }\n\n\n vm.close = function () {\n if (vm.closePopup) vm.closePopup();\n $scope.$close();\n }\n\n vm.reject = function ($event) {\n if (vm.rejectClicked == true) return;\n vm.rejectClicked = true;\n if (vm.aspectCategories && vm.aspectCategories.length > 0) {\n removeCategoryPromise(vm.aspectCategories)\n .then(function () {\n return removeAspectSentimentPromise();\n })\n .then(function () {\n vm.aspectCategories.forEach(function (c) {\n c[\"sentiment\"] = null;\n c[\"sentimentValue\"] = null;\n });\n vm.annotation.sentiment = null;\n vm.annotation.sentimentValue = null;\n generateSentimentChart();\n vm.closePopup();\n $scope.$reject();\n }, function (err) {\n console.log(err);\n });\n } else if ((!vm.aspectCategories || vm.aspectCategories.length == 0) && vm.annotation.sentimentValue) {\n removeAspectSentimentPromise()\n .then(function () {\n generateSentimentChart();\n vm.closePopup();\n $scope.$reject();\n }, function (err) {\n console.log(err);\n })\n } else {\n vm.closePopup();\n $scope.$reject();\n }\n }\n\n\n function init() {\n if (vm.annotation && vm.annotation.data && vm.annotation.data.tags) {\n vm.aspectCategories = vm.annotation.data.tags;\n vm.mainCategories = vm.categories.filter(function (c) {\n if (c.moduleId === vm.moduleId)\n return true;\n })\n }\n }\n\n init();\n\n\n function checkAddCategoryButton() {\n if (vm.selectedMainCategory && (vm.sub1Categories == null || vm.sub1Categories.length == 0)) {\n return true;\n }\n if (vm.selectedMainCategory && vm.selectedSub1Category && (vm.sub2Categories == null || vm.sub2Categories.length == 0)) {\n return true;\n }\n\n if (vm.selectedMainCategory && vm.selectedSub1Category && vm.selectedSub2Category) {\n return true;\n }\n\n return false;\n\n }\n\n function mainCategoryChange(item) {\n vm.sub1Categories = [];\n if (item != undefined) {\n vm.sub1Categories = vm.categories.filter(function (cat) {\n if (cat.parent === item.id)\n return true;\n })\n }\n vm.selectedSub1Category = null;\n vm.searchSub1Category = null;\n vm.selectedSub2Category = null;\n vm.searchSub2Category = null;\n vm.sub2Categories = null;\n }\n\n function mainCategorySearch(query) {\n var results = query ? vm.mainCategories.filter(createFilterFor(query)) : vm.mainCategories;\n return results;\n }\n\n function sub1CategorySearch(query) {\n var results = query ? vm.sub1Categories.filter(createFilterFor(query)) : vm.sub1Categories;\n return results;\n }\n\n function sub1CategoryChange(item) {\n vm.sub2Categories = [];\n vm.searchSub2Category = null;\n if (item != undefined) {\n vm.sub2Categories = vm.categories.filter(function (cat) {\n if (cat.parent === item.id)\n return true;\n })\n }\n vm.searchSub2Category = null;\n }\n\n function sub2CategorySearch(query) {\n var results = query ? vm.sub2Categories.filter(createFilterFor(query)) : vm.sub2Categories;\n return results;\n }\n\n function createFilterFor(query) {\n var lowercaseQuery = query.toLocaleLowerCase('tr-TR');\n return function filterFn(category) {\n return ((vm.getCategoryTitle(category).toLocaleLowerCase('tr-TR')).indexOf(lowercaseQuery) != -1);\n };\n }\n\n vm.getCategoryTitle = function (cat) {\n var title = cat.name;\n var category = vm.categories.filter(function (k) { return k.id == cat.id; })[0];\n if (category && category.localVariables) {\n var localVariable = category.localVariables.filter(function (k) { return $translate.use() == k.language; })[0];\n if (localVariable) title = localVariable.value;\n }\n return title;\n }\n\n if ($translate.use() === 'en')\n vm.sentiments = [{\n name: \"neutral\",\n value: 2.0\n }, {\n name: \"negative\",\n value: 3.0\n }, {\n name: \"positive\",\n value: 1.0\n }, {\n name: \"mixed\",\n value: 4.0\n }];\n else if ($translate.use() === 'tr')\n vm.sentiments = [{\n name: \"nötr\",\n value: 2.0\n }, {\n name: \"olumsuz\",\n value: 3.0\n }, {\n name: \"olumlu\",\n value: 1.0\n }, {\n name: \"karışık\",\n value: 4.0\n }];\n\n\n\n }\n\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.report')\n .service('ReportDocumentAnnotationService', ReportDocumentAnnotationService)\n .controller('ReportDocumentAnnotationDialogController', ReportDocumentAnnotationDialogController);\n\n /** @ngInject */\n function ReportDocumentAnnotationService($q, $log, $translate, $mdMedia, $mdDialog, api, $stateParams, NGAnnotation, user) {\n\n this.showReportDocumentAnnotation = function ($scope, $event, document, noConfirmed, pagination, NGAnnotation, api, reportModules, categories, report, user) {\n\n showEditDocumentDialog($scope, $event, \"aa\", document, noConfirmed, pagination, NGAnnotation, api, reportModules, categories, report, user)\n .then(function (answer) {\n if (!answer) return;\n\n var data = {\n id: report.id\n };\n\n });\n }\n\n\n function showEditDocumentDialog($scope, $event, title, data, noConfirmed, pagination, NGAnnotation, api, reportModules, categories, report, user) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n\n $mdDialog.show({\n controller: 'ReportDocumentAnnotationDialogController as vm',\n templateUrl: 'app/main/apps/reports/views/edit/report-document-annotation-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n data: data,\n api: api,\n $stateParams: $stateParams,\n pagination: pagination,\n NGAnnotation: NGAnnotation,\n reportModules: reportModules,\n categories: categories,\n report: report,\n user: user\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function () {\n if (!noConfirmed) {\n api.report.document.unflag(report.id, data.id)\n .then(function (r) {\n\n }, function (r) {\n console.log(r);\n });\n }\n })\n .finally(function() {\n const mdContent = document.getElementById('scrollkeydownfunction');\n if (mdContent) {\n mdContent.setAttribute('tabindex', '0');\n mdContent.focus();\n }\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n }\n\n\n }\n\n\n function ReportDocumentAnnotationDialogController($mdDialog, title, data, api, $stateParams, $translate, $mdToast, pagination, $compile, $scope, NGAnnotation, $rootScope, reportModules, categories, report, user, ReportDocumentService,$utils) {\n var vm = this;\n vm.annotations = [\n []\n ];\n vm.document = data;\n vm.document.categories = vm.document.categories ? vm.document.categories : [];\n vm.report = report;\n vm.categoriesOfCurrentModule = [];\n vm.modules = [];\n vm.selectedModule = null;\n vm.user = user;\n\n vm.isCategoryD = false;\n vm.tempCategories = vm.document.categories ? vm.document.categories : [];\n //$rootScope.d = vm.document;\n //$rootScope.documentContent = vm.document.content;\n //$rootScope.categories = categories;\n vm.anonationReadonly = false;\n\n //general sentiment variables\n vm.selectedSentiment = null;\n vm.selectedAspectSentiment = null;\n if ($translate.use() === 'en')\n vm.sentiments = [\"neutral\", \"negative\", \"positive\", \"mixed\"];\n else if ($translate.use() === 'tr')\n vm.sentiments = [\"nötr\", \"olumsuz\", \"olumlu\", \"karışık\"];\n\n if ($translate.use() === 'en')\n vm.sentimentsWithValues = [{\n name: \"neutral\",\n value: 2.0\n }, {\n name: \"negative\",\n value: 3.0\n }, {\n name: \"positive\",\n value: 1.0\n }, {\n name: \"mixed\",\n value: 4.0\n }];\n else if ($translate.use() === 'tr')\n vm.sentimentsWithValues = [{\n name: \"nötr\",\n value: 2.0\n }, {\n name: \"olumsuz\",\n value: 3.0\n }, {\n name: \"olumlu\",\n value: 1.0\n }, {\n name: \"karışık\",\n value: 4.0\n }];\n\n //general sentiment methods\n vm.addSentiment = addSentiment;\n vm.changeBasicAspectSentiment = changeBasicAspectSentiment;\n vm.language = $translate.use();\n vm.showToast = showSimpleToast;\n\n vm.categories = [];\n\n vm.getHeader = function (title) {\n var header = $translate.instant('REPORT.WEB_CONTENT.' + title.toUpperCase())\n return header || title;\n }\n\n\n vm.addProcessing = false;\n vm.moduleChange = moduleChange;\n vm.readyDocument = readyDocument;\n vm.trashDocument = trashDocument;\n vm.unTrashDocument = unTrashDocument;\n vm.removeCategory = removeCategory;\n vm.onPopupShow = onPopupShow;\n //vm.annotationPopupHide = annotationPopupHide;\n\n vm.highlightColors = ['#aec7e8', '#ffbb78', '#98df8a', '#d62728', '#ff9896', '#c5b0d5', '#c49c94', '#e377c2'];\n vm.annotationColors = ['red', 'green', 'brown', 'blurgrey', 'orange', 'purple', 'cyan', 'indigo', 'pink', 'blue', 'crimson', 'olive', 'thistle', 'bluegreen', 'windowsblue'];\n vm.annotationColorsCodes = ['#FFFF99', '#CCCCFF', '#bcaaa4', '#b0bec5', '#ffcc80', '#ce93d8', '#80deea', '#9fa8da', '#FFC0CB', '#FFEFD5', '#DC143C', '#808000', '#D2B9D3', '#7BCCB5', '#357EC7'];\n\n vm.annotateText = function () {\n vm.annotations[0] = [];\n var index = 0;\n if (vm.document.categories) {\n\n var flag = true;\n while (flag) {\n flag = false;\n for (var i = 0; i < vm.document.categories.length; i++) {\n if (vm.document.categories[i].sentiment == null && vm.document.categories[i].categories.length<1) {\n vm.document.categories.splice(i, 1);\n flag = true;\n }\n }\n }\n\n vm.document.categories.forEach(function (tag) {\n if ((tag.startIndex || tag.startIndex == 0) && tag.endIndex && tag.moduleId === vm.selectedModule.id) {\n var existsAnnotatedIndexes = vm.annotations[0].find(function (annotation) {\n return annotation.startIndex == tag.startIndex && annotation.endIndex == tag.endIndex;\n });\n if (existsAnnotatedIndexes) {\n tag[\"color\"] = existsAnnotatedIndexes.colorcode;\n existsAnnotatedIndexes.data.tags.push(tag);\n } else {\n tag[\"color\"] = vm.annotationColorsCodes[index];\n var annotation = new NGAnnotation({\n startIndex: tag.startIndex,\n endIndex: tag.endIndex,\n text: vm.document.content.text.substring(tag.startIndex, tag.endIndex),\n colorcode: vm.annotationColorsCodes[index] ? vm.annotationColorsCodes[index] : \"#357EC7\",\n type: vm.annotationColors[index] ? vm.annotationColors[index++] : \"windowsblue\",\n sentiment: tag.sentiment,\n sentimentValue: tag.sentimentValue,\n reportId: vm.report.id,\n moduleId: tag.moduleId,\n moduleName: tag.moduleName,\n document: vm.document,\n userName: vm.user.userName,\n categories: vm.categories,\n closePopup: closed,\n data: {\n tags: []\n }\n });\n var foundedSameIndexInterval = vm.annotations[0].filter(function(a){\n return (a.startIndex < annotation.startIndex && a.endIndex > annotation.startIndex)\n || (a.startIndex < annotation.endIndex && a.endIndex > annotation.endIndex)\n || (annotation.startIndex < a.startIndex && annotation.endIndex > a.endIndex);\n });\n if (!foundedSameIndexInterval || foundedSameIndexInterval.length < 1) {\n if (annotation.colorcode == \"#357EC7\" && tag.color == null) {\n tag.color = \"#357EC7\"\n }\n annotation.data.tags.push(tag);\n vm.annotations[0].push(annotation);\n }\n }\n }\n })\n }\n }\n\n function onPopupShow(x){\n if(vm.annotations[0].length > 0){\n vm.annotations[0].forEach(function(annotation){\n if(annotation && !annotation.moduleId){\n annotation[\"text\"]= vm.document.content.text.substring(annotation.startIndex, annotation.endIndex);\n //annotation[\"colorcode\"]: vm.annotationColorsCodes[index],\n //annotation[\"type\"]: vm.annotationColors[index++],\n //annotation[\"sentiment\"]: tag.sentiment,\n //annotation[\"sentimentValue\"]: tag.sentimentValue,\n annotation[\"reportId\"] = vm.report.id;\n annotation[\"moduleId\"] = vm.selectedModule.id;\n annotation[\"moduleName\"] = vm.selectedModule.name;\n annotation[\"document\"] = vm.document;\n annotation[\"userName\"] = vm.user.userName;\n annotation[\"categories\"] = vm.categories;\n annotation[\"closePopup\"] = closed;\n annotation[\"data\"]= {\n tags: []\n }\n }\n })\n }\n\n }\n\n vm.selectBasicMainCategory = function (item) {\n ReportDocumentService.selectBasicMainCategory(item, vm.categories);\n }\n\n vm.selectBasicSub1Category = function (item) {\n ReportDocumentService.selectBasicSub1Category(item, vm.categories);\n }\n\n vm.addBasicCategory = function (item) {\n vm.addProcessing = true;\n var module = reportModules.filter(function (m) { return m.moduleId == vm.selectedModule.id; })[0]\n ReportDocumentService.addBasicCategory(item, module, vm.report)\n .then(function (response) {\n var id = vm.selectedModule.id;\n vm.categoriesOfCurrentModule = vm.document.categories.filter(function (category) {\n return category.moduleId == id;\n });\n vm.tempCategories = vm.document.categories ? vm.document.categories : [];\n vm.annotateText();\n vm.addProcessing = false;\n }, function (err) {\n vm.addProcessing = false;\n console.log(err);\n })\n }\n\n function setBasicAnnotationParams(module, dashboard) {\n var categories = vm.categories.filter(function (k) { return k.moduleId == module.id })\n vm.document.mainCategories = categories.filter(function (k) { return k.parent == null; });\n var documentCategories = vm.document.categories.filter(function (k) { return k.moduleId == module.id })[0]\n if (dashboard) vm.document.dashboardCategories = documentCategories;\n if (documentCategories) {\n vm.document.mainCategory = documentCategories.categories[0] ? categories.filter(function (k) { return k.id == documentCategories.categories[0].id; })[0] : null;\n vm.document.sub1Categories = vm.document.mainCategory ? categories.filter(function (k) { return k.parent == vm.document.mainCategory.id; }) : [];\n vm.document.sub1Category = documentCategories.categories[1] ? categories.filter(function (k) { return k.id == documentCategories.categories[1].id; })[0] : null;\n vm.document.sub2Categories = vm.document.sub1Category ? categories.filter(function (k) { return k.parent == vm.document.sub1Category.id; }) : [];\n vm.document.sub2Category = documentCategories.categories[2] ? categories.filter(function (k) { return k.id == documentCategories.categories[2].id; })[0] : null;\n } else {\n vm.document.searchMainCategory = null;\n vm.document.searchSub1Category = null;\n vm.document.searchSub2Category = null;\n }\n }\n\n vm.mainCategorySearch = function (query, item) {\n var results = query ? item.mainCategories.filter(createFilterFor(query)) : item.mainCategories;\n return results;\n }\n\n vm.sub1CategorySearch = function (query, item) {\n var results = query ? item.sub1Categories.filter(createFilterFor(query)) : item.sub1Categories;\n return results;\n }\n\n vm.sub2CategorySearch = function (query, item) {\n var results = query ? item.sub2Categories.filter(createFilterFor(query)) : item.sub2Categories;\n return results;\n }\n\n function createFilterFor(query) {\n var lowercaseQuery = angular.lowercase(query);\n return function filterFn(item) {\n return (angular.lowercase(item.name).indexOf(lowercaseQuery) === 0);\n };\n }\n\n vm.changeDefaultCategorys = function () {\n if (vm.isCategoryD) {\n vm.tempCategories = vm.document.categories;\n vm.document.categories = vm.document.categoriesD;\n } else {\n vm.document.categories = vm.tempCategories;\n }\n vm.annotateText();\n }\n\n var closed = function annotationPopupHide() {\n vm.tempCategories = vm.document.categories ? vm.document.categories : [];\n vm.annotateText();\n console.log(\"hided\");\n }\n\n init();\n $rootScope.annotateRefresh = vm.annotateText;\n\n vm.cancel = function () {\n vm.isCategoryD = false;\n vm.changeDefaultCategorys();\n var defaultModule = vm.report.reportModules.filter(function (m) { return m.moduleTypeId == 1 && m.notDashboard == 0; })\n if (defaultModule.length == 1 && defaultModule[0].classifierType == \"SINGLE\") {\n setBasicAnnotationParams(defaultModule[0].module, true);\n if (vm.document.dashboardCategories) {\n vm.document.searchMainCategory = vm.document.dashboardCategories.categories[0] ? vm.document.dashboardCategories.categories[0].name : null;\n vm.document.searchSub1Category = vm.document.dashboardCategories.categories[1] ? vm.document.dashboardCategories.categories[1].name : null;\n vm.document.searchSub2Category = vm.document.dashboardCategories.categories[2] ? vm.document.dashboardCategories.categories[2].name : null;\n }\n }\n $mdDialog.cancel();\n };\n\n vm.ok = function () {\n $mdDialog.cancel();\n };\n\n function setUnReadyAudit(doc) {\n doc[\"isReady\"] = false;\n doc[\"readyBy\"] = null;\n doc[\"readyDate\"] = null;\n }\n\n function setUnPendingAudit(doc) {\n doc[\"isPending\"] = false;\n doc[\"pendingBy\"] = null;\n doc[\"pendingDate\"] = null;\n }\n\n function setDraftAudit(doc) {\n doc[\"draftedBy\"] = vm.userName;\n doc[\"draftedDate\"] = new Date();\n doc[\"isDrafted\"] = true;\n doc[\"draftedByName\"] = vm.user.name;\n }\n\n function trashDocument() {\n api.report.document.trash(vm.report.id, vm.document.id)\n .then(function () {\n $utils.googleAnalyticsSetAction(\"REPORT_DOCUMENT\", \"Trash\", vm.document.id)\n vm.document[\"isIgnored\"] = true;\n vm.document[\"ignoredBy\"] = vm.user.userName;\n vm.document[\"ignoredDate\"] = new Date();\n vm.document[\"isReady\"] = null;\n vm.document[\"readyBy\"] = null;\n vm.document[\"readyDate\"] = null;\n vm.document[\"isPending\"] = false;\n vm.document[\"pendingBy\"] = null;\n vm.document[\"pendingDate\"] = null;\n $mdDialog.hide(true);\n }, function (err) {\n console.log(err);\n })\n }\n\n function unTrashDocument() {\n api.report.document.trash(vm.report.id, vm.document.id)\n .then(function () {\n $utils.googleAnalyticsSetAction(\"REPORT_DOCUMENT\", \"UnTrash\", vm.document.id)\n vm.document[\"isIgnored\"] = false;\n vm.document[\"ignoredDate\"] = null;\n vm.document[\"ignoredBy\"] = null;\n $mdDialog.hide(true);\n }, function (err) {\n console.log(err);\n })\n }\n\n function addSentiment() {\n var sentimentValue;\n if (vm.selectedSentiment == \"olumlu\") sentimentValue = 1.0;\n if (vm.selectedSentiment == \"positive\") sentimentValue = 1.0;\n if (vm.selectedSentiment == \"olumsuz\") sentimentValue = 3.0;\n if (vm.selectedSentiment == \"negative\") sentimentValue = 3.0;\n if (vm.selectedSentiment == \"nötr\") sentimentValue = 2.0;\n if (vm.selectedSentiment == \"neutral\") sentimentValue = 2.0;\n if (vm.selectedSentiment == \"karışık\") sentimentValue = 4.0;\n if (vm.selectedSentiment == \"mixed\") sentimentValue = 4.0;\n if (!sentimentValue) return;\n var req = {\n sentimentValue: sentimentValue\n }\n api.report.document.addSentiment(vm.report.id, vm.document.id, req)\n .then(function () {\n $utils.googleAnalyticsSetAction(\"REPORT_DOCUMENT\", \"Add Sentiment\", vm.selectedSentiment)\n setDraftAudit(vm.document);\n setUnReadyAudit(vm.document);\n setUnPendingAudit(vm.document);\n vm.document[\"sentiment\"] = vm.selectedSentiment;\n vm.document[\"sentimentValue\"] = req.sentimentValue;\n vm.document[\"sentimentRate\"] = 1.0;\n }, function (err) {\n console.log(err);\n })\n }\n\n vm.isCategoryAssignable = function () {\n var result = false;\n var isLeafCategory = (vm.document.mainCategory && vm.document.sub1Categories.length == 0) || (vm.document.mainCategory && vm.document.sub1Category && vm.document.sub2Categories.length == 0) || (vm.document.mainCategory && vm.document.sub1Category && vm.document.sub2Category);\n if (isLeafCategory) {\n if (vm.categoriesOfCurrentModule.length > 0) {\n var leafCategoryLevel = 0;\n for(var i = 0; i < vm.categoriesOfCurrentModule[0].categories.length; i++) {\n if (vm.categoriesOfCurrentModule[0].categories[i])\n leafCategoryLevel = i;\n }\n var sameCategory = false;\n for(var i = 0; i <= leafCategoryLevel; i++) {\n if (i === 0) {\n sameCategory = vm.categoriesOfCurrentModule[0].categories[i].id === vm.document.mainCategory.id\n }\n if (i === 1) {\n sameCategory = (vm.document.sub1Category && vm.categoriesOfCurrentModule[0].categories[i].id === vm.document.sub1Category.id)\n }\n if (i === 2) {\n sameCategory = (vm.document.sub2Category && vm.categoriesOfCurrentModule[0].categories[i].id === vm.document.sub2Category.id)\n }\n if (!sameCategory)\n break;\n }\n result = !sameCategory;\n } else\n result = true;\n }\n return result;\n }\n\n function readyDocument() {\n if (vm.selectedModule.classifierType == 'SINGLE' && !vm.addProcessing && vm.isCategoryAssignable()) {\n $mdToast.show($mdToast.simple().hideDelay(5000).position('top right').theme(\"warn\").textContent($translate.instant('REPORT.ERRORS.REMIND_ASSIGN_CATEGORY')));\n return;\n }\n var readyPermission = false;\n var permissions = vm.user.permissions.filter(function (k) {\n return k.workspaceId == vm.report.workspaceId\n })[0].permissions;\n if (permissions.includes('REPORT/DATA/READY')) {\n readyPermission = true;\n }\n api.report.document.ready(vm.report.id, vm.document.id)\n .then(function () {\n $utils.googleAnalyticsSetAction(\"REPORT_DOCUMENT\", \"Ready\", vm.document.id)\n if (readyPermission) {\n vm.document[\"isReady\"] = true;\n vm.document[\"readyBy\"] = vm.user.userName;\n vm.document[\"readyDate\"] = new Date();\n vm.document[\"isPending\"] = false;\n vm.document[\"pendingBy\"] = null;\n vm.document[\"pendingDate\"] = null;\n } else {\n vm.document[\"isReady\"] = false;\n vm.document[\"readyBy\"] = null;\n vm.document[\"readyDate\"] = null;\n vm.document[\"isPending\"] = true;\n vm.document[\"pendingBy\"] = vm.user.userName;\n vm.document[\"pendingDate\"] = new Date();;\n }\n vm.document[\"isIgnored\"] = null;\n vm.document[\"ignoredBy\"] = null;\n vm.document[\"ignoredDate\"] = null;\n $mdDialog.hide(true);\n }, function (err) {\n console.log(err);\n })\n }\n\n function showSimpleToast(text) {\n $mdToast.show($mdToast.simple().textContent(text));\n }\n\n\n function removeCategory(tag, event) {\n vm.anonationReadonly = true;\n tag.processing = true;\n event.target.disabled = true;\n var targetCategory = tag.categories[tag.categories.length - 1];\n var body = {\n startIndex: tag.startIndex,\n endIndex: tag.endIndex,\n categoryRequest: {\n categoryIds: [\n targetCategory.id\n ]\n }\n }\n api.report.document.removeCategory(vm.report.id, vm.document.id, tag.moduleId, body)\n .then(function () {\n $utils.googleAnalyticsSetAction(\"REPORT_DOCUMENT\", \"Remove Category\", JSON.stringify(body))\n tag.processing = false;\n setDraftAudit(vm.document);\n setUnReadyAudit(vm.document);\n setUnPendingAudit(vm.document);\n vm.document[\"updateDate\"] = new Date();\n vm.document[\"updatedBy\"] = vm.user.userName;\n vm.document[\"isUpdated\"] = true;\n regulateRemovingCategoryDocument(tag);\n generateSentimentChart();\n event.target.disabled = false;\n vm.moduleChange();\n var annotation = vm.annotations[0].filter(function (k) { return k.startIndex == tag.startIndex && k.endIndex == tag.endIndex })[0];\n var aspectSentimentRemove = true;\n annotation.data.tags.forEach(function (m) {\n if (m.categories.length > 0) {\n aspectSentimentRemove = false;\n vm.anonationReadonly = false;\n }\n })\n if (aspectSentimentRemove) removeAspectSentiment(tag);\n }, function (err) {\n tag.processing = false;\n event.target.disabled = false;\n vm.anonationReadonly = false;\n console.log(err);\n vm.moduleChange();\n })\n }\n\n function removeAspectSentiment(tag) {\n var body = {\n startIndex: tag.startIndex,\n endIndex: tag.endIndex\n };\n api.report.document.removeAspectSentiment(vm.document.reportId, vm.document.id, tag.moduleId, body)\n .then(function () {\n $utils.googleAnalyticsSetAction(\"REPORT_DOCUMENT\", \"Remove Aspect Sentiment\", JSON.stringify(body))\n vm.document[\"updateDate\"] = new Date();\n vm.document[\"updatedBy\"] = vm.userName;\n vm.document[\"isUpdated\"] = true;\n setDraftAudit(vm.document);\n setUnReadyAudit(vm.document);\n setUnPendingAudit(vm.document);\n tag.sentiment = null;\n tag.sentimentValue = null;\n vm.document.categories.forEach(function (c) {\n if (tag.moduleId == c.moduleId && tag.endIndex == c.endIndex && tag.startIndex == c.startIndex) {\n c.sentiment = null;\n c.sentimentValue = null;\n }\n })\n\n generateSentimentChart();\n vm.annotateText();\n vm.anonationReadonly = false;\n },\n function (err) {\n console.log(err);\n });\n }\n\n function changeBasicAspectSentiment() {\n\n var body = {\n startIndex: 0,\n endIndex: vm.document.content.endIndex,\n sentimentValue: vm.selectedAspectSentiment.value\n };\n api.report.document.addAspectSentiment(vm.report.id, vm.document.id, vm.selectedModule.id, body)\n .then(function () {\n $utils.googleAnalyticsSetAction(\"REPORT_DOCUMENT\", \"Add Aspect Sentiment\", JSON.stringify(body))\n var category = vm.document.categories.filter(function (m) { return m.moduleId == vm.selectedModule.id })[0];\n if (category) {\n category[\"sentiment\"] = vm.selectedAspectSentiment.name;\n category[\"sentimentValue\"] = vm.selectedAspectSentiment.value;\n }\n vm.document[\"updateDate\"] = new Date();\n vm.document[\"updatedBy\"] = vm.userName;\n vm.document[\"isUpdated\"] = true;\n setDraftAudit(vm.document);\n setUnReadyAudit(vm.document);\n setUnPendingAudit(vm.document);\n\n vm.selectedAspectSentiment = null;\n generateSentimentChart();\n },\n function (err) {\n console.log(err);\n });\n }\n\n function regulateRemovingCategoryDocument(tag) {\n tag.categories = [];\n }\n\n function generateSentimentChart() {\n vm.document[\"sentimentChart\"] = [];\n vm.document.sentimentChart.push({\n label: \"Positive\",\n order: 1,\n value: 0\n });\n vm.document.sentimentChart.push({\n label: \"Negative\",\n order: 3,\n value: 0\n });\n vm.document.sentimentChart.push({\n label: \"Neutral\",\n order: 2,\n value: 0\n });\n if (!vm.document.categories || vm.document.categories.length < 1) return;\n vm.document.categories.forEach(function (tag) {\n if (tag.sentiment && tag.sentimentValue) {\n var sentimentValue = tag.sentimentValue;\n var foundedPart = vm.document.sentimentChart.find(function (i) {\n return i.order == sentimentValue\n });\n if (foundedPart && tag.categories && tag.categories.length > 0) {\n foundedPart.value = foundedPart.value + 1;\n }\n }\n })\n }\n\n\n vm.getCategoryTitle = function (cat) {\n var title = cat.name;\n var category = vm.categories.filter(function (k) { return k.id == cat.id; })[0];\n if (category && category.localVariables) {\n var localVariable = category.localVariables.filter(function (k) { return $translate.use() == k.language; })[0];\n if (localVariable) title = localVariable.value;\n }\n return title;\n }\n\n function moduleChange() {\n $rootScope.selectedModule = vm.selectedModule;\n var id = vm.selectedModule.id;\n vm.categoriesOfCurrentModule = vm.document.categories.filter(function (category) {\n return category.moduleId == id;\n });\n setBasicAnnotationParams(vm.selectedModule)\n vm.annotateText();\n }\n\n function init() {\n vm.categories = categories;\n vm.modules = reportModules.filter(function (rm) { return rm.notFeedback == 0; }).map(function (rm) {\n rm.module.classifierType = rm.classifierType;\n return rm.module;\n });\n $rootScope.reportModules = vm.modules;\n if (vm.modules && vm.modules.length > 0) {\n //set classification module\n var classModules = vm.modules.filter(function (obj) {\n return obj.moduleTypeId == 1;\n });\n if (classModules && classModules.length > 0) {\n vm.modules = classModules;\n vm.selectedModule = vm.modules[0];\n $rootScope.selectedModule = vm.selectedModule;\n moduleChange();\n }\n }\n\n var content = vm.document && vm.document.contents ? vm.document.contents.filter(function (k) {\n return k.title == 'content';\n })[0] : null;\n if (content)\n vm.highlightedText = content.highlightedText;\n }\n\n\n //vm.colors = ['blue-bg', 'blue-grey-bg', 'orange-bg', 'pink-bg', 'purple-bg'];\n vm.colors = [\n [\"#1f77b4\", \"#fff\"],\n [\"#aec7e8\", \"#000\"],\n [\"#ff7f0e\", \"#000\"],\n [\"#ffbb78\", \"#000\"],\n [\"#2ca02c\", \"#fff\"],\n [\"#98df8a\", \"#000\"],\n [\"#d62728\", \"#fff\"],\n [\"#ff9896\", \"#000\"],\n [\"#9467bd\", \"#000\"],\n [\"#c5b0d5\", \"#000\"],\n [\"#8c564b\", \"#fff\"],\n [\"#c49c94\", \"#000\"],\n [\"#e377c2\", \"#000\"],\n [\"#f7b6d2\", \"#000\"],\n [\"#7f7f7f\", \"#fff\"],\n [\"#c7c7c7\", \"#000\"],\n [\"#bcbd22\", \"#000\"],\n [\"#dbdb8d\", \"#000\"],\n [\"#17becf\", \"#000\"],\n [\"#9edae5\", \"#000\"]\n ];\n\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.report')\n .service('ReportSettingsService', ReportSettingsService)\n .controller('ReportSettingsIndicatorController', ReportSettingsIndicatorController)\n .controller('ReportSettingsReportFieldAliasController', ReportSettingsReportFieldAliasController)\n .controller('ReportSettingsReportFieldValueAliasController', ReportSettingsReportFieldValueAliasController)\n .controller('ReportSettingsCategoryThresholdController', ReportSettingsCategoryThresholdController)\n .controller('ReportSettingsCategoryLimitController', ReportSettingsCategoryLimitController)\n .controller('ReportFacetOrderController', ReportFacetOrderController)\n .controller('ReportModuleClassifierSettingsController',ReportModuleClassifierSettingsController)\n .controller('ReportEditRuleController', ReportEditRuleController)\n .controller('ReportEditFormulaController',ReportEditFormulaController)\n .controller('ReportEditReputationWidgetSettingsController', ReportEditReputationWidgetSettingsController)\n .controller('ReportEditReputationScoreWidgetSettingsController',ReportEditReputationScoreWidgetSettingsController)\n .controller('ReportSettingsControlller', ReportSettingsControlller)\n .controller('BasicDialogController', BasicDialogController)\n .controller('ReportFormulaTableControlller', ReportFormulaTableControlller)\n .controller('FilterCategoriesControlller', FilterCategoriesControlller)\n .controller('AddDocumentTagControlller', AddDocumentTagControlller)\n .controller('AddPeriodFieldController', AddPeriodFieldController)\n .controller('TopBottomPreviewController', TopBottomPreviewController)\n .controller('BottomSheetFormulaController', BottomSheetFormulaController)\n\n function ReportSettingsService($q, $log, $translate, $mdMedia, $mdDialog, api, $stateParams) {\n\n this.reportSettingsIndicator = function ($scope, $event, data) {\n var deferred = $q.defer();\n showReportSettingsIndicator($scope, $event, data)\n .then(function (answer) {\n if (!answer) return;\n else\n deferred.resolve(answer);\n })\n return deferred.promise;\n }\n\n this.reportFacetOrderDialog = function ($scope, $event, report) {\n var deferred = $q.defer();\n showReportFacetOrderDialog($scope, $event, report)\n .then(function (answer) {\n if (!answer) return;\n else\n deferred.resolve(answer);\n })\n return deferred.promise;\n }\n\n this.editReportModuleClassifierSettingsDialog = function ($scope, $event, reportModule, nominalFields, settings, NERReportModule) {\n var deferred = $q.defer();\n showEditReportModuleClassifierSettingsDialog($scope, $event, reportModule, nominalFields, settings, NERReportModule)\n .then(function (answer) {\n if (!answer) return;\n else\n deferred.resolve(answer);\n })\n return deferred.promise;\n }\n\n this.reportEditReputationStateWidget = function($scope, $event, report, reportSettings, user) {\n var deferred = $q.defer();\n showEditReputationStateWidget($scope, $event, report, reportSettings,user)\n .then(function (answer) {\n if (!answer) return;\n else\n deferred.resolve(answer);\n });\n return deferred.promise;\n }\n\n this.openTopBottomPreview = function($scope, $event, api, report, user, alertSetting) {\n var deferred = $q.defer();\n openTopBottomPreview($scope, $event, api, report ,user, alertSetting)\n .then(function (answer) {\n if (!answer) return;\n else\n deferred.resolve(answer);\n });\n return deferred.promise;\n }\n\n this.reportEditReputationScoreWidget = function($scope, $event, report, reportSettings, user, formulas) {\n var deferred = $q.defer();\n showEditReputationScoreWidget($scope, $event, report, reportSettings,user, formulas)\n .then(function (answer) {\n if (!answer) return;\n else\n deferred.resolve(answer);\n });\n return deferred.promise;\n }\n\n this.reportEditFormulaDialog = function ($scope, $event, report, formula, reportId) {\n var deferred = $q.defer();\n showReportEditFormulaDialog($scope, $event, report, formula, reportId)\n .then(function (answer) {\n if (!answer) return;\n else\n deferred.resolve(answer);\n });\n return deferred.promise;\n }\n\n this.reportEditRuleDialog = function ($scope, $event, rule, reportId, fields, reportModules) {\n var deferred = $q.defer();\n showReportEditRuleDialog($scope, $event, rule, reportId, fields, reportModules)\n .then(function (answer) {\n if (!answer) return;\n else\n deferred.resolve(answer);\n });\n return deferred.promise;\n }\n \n this.reportReportFieldAliasDialog = function ($scope, $event, report) {\n var deferred = $q.defer();\n showReportFieldAliasDialog($scope, $event, report)\n .then(function (answer) {\n if (!answer) return;\n else\n deferred.resolve(answer);\n })\n return deferred.promise;\n }\n\n this.reportReportFieldValueAliasDialog = function ($scope, $event, report) {\n var deferred = $q.defer();\n showReportFieldValueAliasDialog($scope, $event, report)\n .then(function (answer) {\n if (!answer) return;\n else\n deferred.resolve(answer);\n })\n return deferred.promise;\n }\n \n this.reportCategoryThresholdDialog = function ($scope, $event, report) {\n var deferred = $q.defer();\n showReportCategoryThresholdDialog($scope, $event, report)\n .then(function (answer) {\n if (!answer) return;\n else\n deferred.resolve(answer);\n })\n return deferred.promise;\n }\n \n this.reportCategoryLimitDialog = function ($scope, $event, report) {\n var deferred = $q.defer();\n showReportCategoryLimitDialog($scope, $event, report)\n .then(function (answer) {\n if (!answer) return;\n else\n deferred.resolve(answer);\n })\n return deferred.promise;\n }\n\n this.updateReportSettings = function ($scope, $event, report, reportSettings, user) {\n console.log(report)\n var confirmTitle = $translate.instant('REPORT.CONFIRM.UPDATE_REPORT_SETTINGS_TITLE', {\n name: report.name\n });\n var confirmBody = $translate.instant('REPORT.CONFIRM.UPDATE_REPORT_SETTINGS_BODY', {\n name: report.name\n });\n var successTitle = $translate.instant('REPORT.CONFIRM.UPDATE_REPORT_SETTINGS_SUCCESS_TITLE', {\n name: report.name\n });\n var successBody = $translate.instant('REPORT.CONFIRM.UPDATE_REPORT_SETTINGS_SUCCESS_BODY', {\n name: report.name\n });\n var deferred = $q.defer();\n showReportSettingsDialog($scope, $event, confirmTitle, confirmBody, successTitle, successBody, report, reportSettings, user)\n .then(function (result) {\n if (!result)\n deferred.resolve(result.answer);\n else {\n var successTitle = $translate.instant('REPORT.CONFIRM.UPDATE_REPORT_SETTINGS_SUCCESS_TITLE', {\n name: report.name\n });\n var successBody = $translate.instant('REPORT.CONFIRM.UPDATE_REPORT_SETTINGS_SUCCESS_BODY', {\n name: report.name\n });\n api.settings.saveReportSettings(result, report.id)\n .then(function (response) {\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function (answer) {\n if (answer) {\n deferred.resolve(response);\n }\n });\n },\n function (response) {\n deferred.resolve(false);\n $log.error(response);\n });\n\n }\n });\n return deferred.promise;\n }\n\n this.updateFormulaTableSettings = function ($scope, $event, report, reportSettings, user) {\n var deferred = $q.defer();\n showFormulaTableSettingsDialog($scope, $event, report, reportSettings, user)\n .then(function (answer) {\n if (!answer) return;\n else\n deferred.resolve(answer);\n })\n return deferred.promise;\n }\n\n this.filterCategories = function ($scope, $event, report, reportSettings, user) {\n var deferred = $q.defer();\n showFilterCategoriesDialog($scope, $event, report, reportSettings, user)\n .then(function (answer) {\n if (!answer) return;\n else\n deferred.resolve(answer);\n })\n return deferred.promise;\n }\n\n this.addDocumentTag = function ($scope, $event, report, reportSettings, user) {\n var deferred = $q.defer();\n showAddDocumentTagDialog($scope, $event, report, reportSettings, user)\n .then(function (answer) {\n if (!answer) return;\n else\n deferred.resolve(answer);\n })\n return deferred.promise;\n }\n\n \n this.addPeriodField = function ($scope, $event, report, user, reportFields) {\n var deferred = $q.defer();\n api.settings.getDatePeriodSettings(report.id)\n .then(function (response) {\n showAddPeriodFieldDialog($scope, $event, report, user, reportFields, response)\n .then(function (answer) {\n if (!answer) return;\n else\n deferred.resolve(answer);\n })\n },\n function (response) {\n deferred.resolve(false);\n $log.error(response);\n });\n \n return deferred.promise;\n }\n\n function showReportSettingsIndicator($scope, $event, data) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'ReportSettingsIndicatorController as vm',\n templateUrl: 'app/main/apps/reports/views/settings/indicator-settings.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n data: data,\n api: api,\n $stateParams: $stateParams\n }\n })\n .then(function (answer) {\n console.log(answer);\n deferred.resolve(answer);\n }, function (r) {\n console.log(r);\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n }\n\n function showEditReportModuleClassifierSettingsDialog($scope, $event, reportModule, nominalFields, settings, NERReportModule) {\n var deferred = $q.defer();\n var NERModuleCategories;\n if(NERReportModule == null || NERReportModule == undefined){\n NERModuleCategories = [];\n }else{\n NERModuleCategories = api.module.categories(NERReportModule.moduleId)\n .then(function (r) {\n return extractLeafCategories(r);\n }, function (e) {\n console.log(e);\n })\n }\n function extractLeafCategories(categories){ //TODO this might be unnecessary check\n var leafCategories = [];\n var parents = new Set();\n for(var i = 0;i' + name\n category = JSON.parse(JSON.stringify(category.parentModuleCategory))\n }\n leafCategories.push({'id':id,'name':name,'moduleId':category.moduleId});\n }\n leafCategories = leafCategories.filter(function(x){\n return !(parents.has(x.id));\n });\n return leafCategories;\n }\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'ReportModuleClassifierSettingsController as vm',\n templateUrl: 'app/main/apps/reports/views/settings/report-module-classifier-settings-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n api: api,\n reportModule: reportModule,\n nominalFields: nominalFields,\n settings: settings,\n NERModuleCategories: NERModuleCategories,\n $stateParams: $stateParams\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function (r) {\n console.log(r);\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n }\n\n function showReportFacetOrderDialog($scope, $event, report) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'ReportFacetOrderController as vm',\n templateUrl: 'app/main/apps/reports/views/settings/facet-order-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n api: api,\n report: report,\n $stateParams: $stateParams\n }\n })\n .then(function (answer) {\n console.log(answer);\n deferred.resolve(answer);\n }, function (r) {\n console.log(r);\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n }\n\n function showEditReputationStateWidget($scope, $event, report, reportSettings, user) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'ReportEditReputationWidgetSettingsController as vm',\n templateUrl: 'app/main/apps/reports/views/settings/edit-reputation-widget-settings.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n api: api,\n report: report,\n reportSettings : reportSettings,\n user : user,\n $stateParams: $stateParams\n }\n })\n .then(function (answer) {\n deferred.resolve(answer); \n }, function (r) {\n console.log(r);\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n }\n\n function showEditReputationScoreWidget($scope, $event, report, reportSettings, user, formulas) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'ReportEditReputationScoreWidgetSettingsController as vm',\n templateUrl: 'app/main/apps/reports/views/settings/edit-reputation-score-widget-settings.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n api: api,\n report: report,\n reportSettings : reportSettings,\n user : user,\n formulas: formulas,\n $stateParams: $stateParams\n }\n })\n .then(function (answer) {\n deferred.resolve(answer); \n }, function (r) {\n console.log(r);\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n }\n\n function openTopBottomPreview($scope, $event, api, report, user, alertSetting) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'TopBottomPreviewController as vm',\n templateUrl: 'app/main/apps/reports/views/settings/topbottompreview.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n api: api,\n report: report,\n user : user,\n alertSetting: alertSetting,\n $stateParams: $stateParams\n }\n })\n .then(function (answer) {\n deferred.resolve(answer); \n }, function (r) {\n console.log(r);\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n }\n\n \n\n function showReportEditFormulaDialog($scope, $event, report, formula, reportId) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'ReportEditFormulaController as vm',\n templateUrl: 'app/main/apps/reports/views/settings/edit-formula-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: false,\n fullscreen: useFullScreen,\n locals: {\n api: api,\n report: report,\n reportId: reportId,\n settingId: formula.id,\n formulaType: formula.settingType,\n formula: formula.settings,\n $stateParams: $stateParams\n }\n })\n .then(function (answer) {\n deferred.resolve(answer); \n }, function (r) {\n console.log(r);\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n }\n\n function showReportEditRuleDialog($scope, $event, rule, reportId, fields, reportModules) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'ReportEditRuleController as vm',\n templateUrl: 'app/main/apps/reports/views/settings/edit-rule-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n api: api,\n reportId: reportId,\n rule: rule,\n fields: fields,\n reportModules: reportModules,\n $stateParams: $stateParams\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function (r) {\n console.log(r);\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n }\n\n function showReportFieldAliasDialog($scope, $event, report) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'ReportSettingsReportFieldAliasController as vm',\n templateUrl: 'app/main/apps/reports/views/settings/report-field-alias-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n api: api,\n report: report,\n $stateParams: $stateParams\n }\n })\n .then(function (answer) {\n console.log(answer);\n deferred.resolve(answer);\n }, function (r) {\n console.log(r);\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n }\n\n function showReportFieldValueAliasDialog($scope, $event, report) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'ReportSettingsReportFieldValueAliasController as vm',\n templateUrl: 'app/main/apps/reports/views/settings/report-field-value-alias-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n api: api,\n report: report,\n $stateParams: $stateParams\n }\n })\n .then(function (answer) {\n console.log(answer);\n deferred.resolve(answer);\n }, function (r) {\n console.log(r);\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n }\n \n function showReportCategoryThresholdDialog($scope, $event, report) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'ReportSettingsCategoryThresholdController as vm',\n templateUrl: 'app/main/apps/reports/views/settings/category-threshold-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n api: api,\n report: report,\n $stateParams: $stateParams\n }\n })\n .then(function (answer) {\n console.log(answer);\n deferred.resolve(answer);\n }, function (r) {\n console.log(r);\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n }\n \n function showReportCategoryLimitDialog($scope, $event, report) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'ReportSettingsCategoryLimitController as vm',\n templateUrl: 'app/main/apps/reports/views/settings/category-limit-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n api: api,\n report: report,\n $stateParams: $stateParams\n }\n })\n .then(function (answer) {\n console.log(answer);\n deferred.resolve(answer);\n }, function (r) {\n console.log(r);\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n }\n\n\n\n function showReportSettingsDialog($scope, $event, askTitle, askBody, successTitle, successBody, report, reportSettings,user) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'ReportSettingsControlller as vm',\n templateUrl: 'app/main/apps/reports/views/create/edit-report-settings.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n askTitle: askTitle,\n askBody: askBody,\n successTitle: successTitle,\n successBody: successBody,\n report: report,\n reportSettings: reportSettings,\n user: user\n }\n })\n .then(function (result) {\n deferred.resolve(result);\n }, function () {\n deferred.resolve(false);\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n \n function showFormulaTableSettingsDialog($scope, $event, report, reportSettings, user) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'ReportFormulaTableControlller as vm',\n templateUrl: 'app/main/apps/reports/views/settings/edit-formulatable-settings.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n report: report,\n reportSettings: reportSettings,\n user: user\n }\n })\n .then(function (result) {\n deferred.resolve(result);\n }, function () {\n deferred.resolve(false);\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showFilterCategoriesDialog($scope, $event, report, reportSettings, user) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'FilterCategoriesControlller as vm',\n templateUrl: 'app/main/apps/reports/views/settings/filter-categories-settings.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n report: report,\n reportSettings: reportSettings,\n user: user\n }\n })\n .then(function (result) {\n deferred.resolve(result);\n }, function () {\n deferred.resolve(false);\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showAddDocumentTagDialog($scope, $event, report, reportSettings, user) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'AddDocumentTagControlller as vm',\n templateUrl: 'app/main/apps/reports/views/settings/add-document-tag-settings.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n report: report,\n reportSettings: reportSettings,\n user: user\n }\n })\n .then(function (result) {\n deferred.resolve(result);\n }, function () {\n deferred.resolve(false);\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showAddPeriodFieldDialog($scope, $event, report, user, reportFields, datePeriodSettings) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'AddPeriodFieldController as vm',\n templateUrl: 'app/main/apps/reports/views/settings/add-period-field-settings.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n report: report,\n datePeriodSettings: datePeriodSettings,\n user: user,\n reportFields: reportFields\n }\n })\n .then(function (result) {\n deferred.resolve(result);\n }, function () {\n deferred.resolve(false);\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showSuccessDialog($scope, $event, title, body) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'BasicDialogController as vm',\n templateUrl: 'app/main/apps/modules/services/basic-success-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body\n }\n })\n .then(function (answer) {\n deferred.resolve(true);\n }, function (answer) {\n deferred.resolve(true);\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n }\n\n function BasicDialogController($mdDialog, title, body) {\n var vm = this;\n vm.title = title;\n vm.body = body;\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n }\n\n function ReportSettingsReportFieldAliasController($mdDialog, api, report, $stateParams, $translate, $mdToast, ReportService) {\n var vm = this;\n vm.report = report;\n vm.reportFields = [];\n vm.searchFieldName = \"\";\n vm.selectedReportField = null;\n vm.selectedReportFieldAlias = null;\n vm.filterValueSearch = filterValueSearch;\n vm.reportFieldAliases = [];\n\n function getReportFieldsAndReportFieldAliases() {\n api.report.reportFields(vm.report.id)\n .then(function (r) {\n vm.reportFields = r.filter(function (f) {\n return ReportService.isThisFieldType(300, f.fieldType) || f.fieldType == 500;\n })\n getReportFieldAliases();\n })\n }\n\n vm.cancel = function () {\n $mdDialog.cancel();\n }\n\n vm.saveOrUpdateReportFieldAlias = function() {\n if (!vm.selectedReportField || !vm.selectedReportFieldAlias.enFieldAlias || !vm.selectedReportFieldAlias.trFieldAlias) return;\n vm.saveReportFieldAliasProcessing = true;\n var reportFieldAliasRequest = {\n fieldId: vm.selectedReportField.id,\n fieldTitle: vm.selectedReportField.fieldTitle,\n enFieldAlias: vm.selectedReportFieldAlias.enFieldAlias,\n trFieldAlias: vm.selectedReportFieldAlias.trFieldAlias,\n enLocalVariableId: vm.selectedReportFieldAlias.enLocalVariableId,\n trLocalVariableId: vm.selectedReportFieldAlias.trLocalVariableId,\n }\n var languages = [\"tr\", \"en\"];\n var localVariables = [];\n for (var i = 0; i < languages.length; i++) {\n localVariables.push({\n id: vm.selectedReportFieldAlias[languages[i] + 'LocalVariableId'],\n language: languages[i],\n groupCode: \"REPORT\",\n groupId: vm.report.id,\n itemCode: \"REPORTFIELD\",\n itemId: vm.selectedReportFieldAlias.fieldId,\n value: vm.selectedReportFieldAlias[languages[i] + 'FieldAlias']\n })\n }\n\n api.localization.saveLocalVariables(localVariables)\n .then(function (response) {\n if (response) {\n response.forEach(function (k) {\n if (k.language == \"tr\") { reportFieldAliasRequest.trLocalVariableId = k.id; vm.selectedReportFieldAlias.trLocalVariableId = k.id; };\n if (k.language == \"en\") { reportFieldAliasRequest.enLocalVariableId = k.id; vm.selectedReportFieldAlias.enLocalVariableId = k.id; };\n })\n vm.reportFieldAliases = vm.reportFieldAliases.filter(function (m) { return m.fieldId != reportFieldAliasRequest.fieldId })\n vm.reportFieldAliases.push(reportFieldAliasRequest)\n vm.saveReportFieldAliasProcessing = false;\n }\n }, function (error) {\n vm.saveReportFieldAliasProcessing = false;\n console.log(error);\n });\n }\n\n function filterValueSearch(query, data) {\n var results = query ? data.filter(createFilterFor(query)) : data;\n return results;\n }\n\n function createFilterFor(query) {\n var lowercaseQuery = angular.lowercase(query);\n return function filterFn(item) {\n return (angular.lowercase(item.fieldTitle).indexOf(lowercaseQuery) === 0);\n };\n }\n\n vm.selectedReportFieldChange = function (item) {\n vm.selectedReportFieldAlias = vm.reportFieldAliases.filter(function (k) { return k.fieldId == item.id })[0];\n if (vm.selectedReportFieldAlias == null) {\n vm.selectedReportFieldAlias = {\n fieldId: item.id,\n fieldTitle: item.fieldTitle,\n enFieldAlias: \"\",\n trFieldAlias: \"\"\n }\n }\n }\n\n function getReportFieldAliases() {\n api.localization.findLocalVariables({\n groupCode: \"REPORT\",\n groupId: vm.report.id,\n itemCode: \"REPORTFIELD\"\n })\n .then(function (r) {\n var reportFieldAliases = [];\n r.forEach(function (k) {\n var reportFieldAlias = reportFieldAliases.filter(function (m) { return m.fieldId == k.itemId; })[0]\n if (reportFieldAlias == null) {\n var reportField = vm.reportFields.filter(function (m) {return m.id == k.itemId })[0]\n reportFieldAlias = {\n fieldId: k.itemId,\n fieldTitle: reportField.fieldTitle\n }\n reportFieldAliases.push(reportFieldAlias);\n }\n if (k.language == \"tr\") {\n reportFieldAlias['trFieldAlias'] = k.value;\n reportFieldAlias['trLocalVariableId'] = k.id;\n } else if (k.language == \"en\") {\n reportFieldAlias['enFieldAlias'] = k.value;\n reportFieldAlias['enLocalVariableId'] = k.id;\n }\n })\n vm.reportFieldAliases = reportFieldAliases;\n })\n }\n\n vm.removeAlias = function (alias) {\n api.localization.removeLocalVariables({\n groupCode: \"REPORT\",\n groupId: vm.report.id,\n itemCode: \"REPORTFIELD\",\n itemId: alias.fieldId\n })\n .then(function (r) {\n vm.reportFieldAliases = vm.reportFieldAliases.filter(function (f) {\n return f.fieldId != alias.fieldId;\n })\n })\n }\n\n function init() {\n getReportFieldsAndReportFieldAliases();\n }\n init();\n }\n\n function ReportSettingsReportFieldValueAliasController($mdDialog, api, report, $stateParams, $translate, $mdToast, ReportService, $log) {\n var vm = this;\n vm.report = report;\n vm.reportFields = [];\n vm.searchFieldName = \"\";\n vm.selectedReportField = null;\n vm.selectedReportFieldValue = null;\n vm.selectedReportFieldValueAlias = null;\n vm.filterValueSearch = filterValueSearch;\n vm.reportFieldValueAliases = [];\n\n function getReportFieldsAndReportFieldValueAliases() {\n api.report.reportFields(vm.report.id)\n .then(function (r) {\n vm.reportFields = r.filter(function (f) {\n return ReportService.isThisFieldType(300, f.fieldType);\n })\n getReportFieldValueAliases();\n })\n }\n\n vm.cancel = function () {\n $mdDialog.cancel();\n }\n\n vm.saveOrUpdateReportFieldValueAlias = function () {\n if (!vm.selectedReportField || !vm.selectedReportFieldValue || !vm.selectedReportFieldValueAlias.enAlias || !vm.selectedReportFieldValueAlias.trAlias) return;\n vm.saveReportFieldValueAliasProcessing = true;\n var reportFieldValueAliasRequest = {\n fieldId: vm.selectedReportField.id,\n fieldTitle: vm.selectedReportField.fieldTitle,\n fieldValue: vm.selectedReportFieldValue.name,\n enAlias: vm.selectedReportFieldValueAlias.enAlias,\n trAlias: vm.selectedReportFieldValueAlias.trAlias,\n enLocalVariableId: vm.selectedReportFieldValueAlias.enLocalVariableId,\n trLocalVariableId: vm.selectedReportFieldValueAlias.trLocalVariableId,\n }\n var languages = [\"tr\", \"en\"];\n var localVariables = [];\n for (var i = 0; i < languages.length; i++) {\n localVariables.push({\n id: vm.selectedReportFieldValueAlias[languages[i] + 'LocalVariableId'],\n language: languages[i],\n groupCode: \"REPORT\",\n groupId: vm.report.id,\n itemCode: \"REPORTFIELDVALUE\",\n itemId: vm.selectedReportFieldValueAlias.fieldId,\n itemValue: vm.selectedReportFieldValue.name,\n value: vm.selectedReportFieldValueAlias[languages[i] + 'Alias']\n })\n }\n \n api.localization.saveLocalVariables(localVariables)\n .then(function (response) {\n if (response) {\n response.forEach(function (k) {\n if (k.language == \"tr\") { reportFieldValueAliasRequest.trLocalVariableId = k.id; vm.selectedReportFieldValueAlias.trLocalVariableId = k.id; };\n if (k.language == \"en\") { reportFieldValueAliasRequest.enLocalVariableId = k.id; vm.selectedReportFieldValueAlias.enLocalVariableId = k.id; };\n })\n vm.reportFieldValueAliases = vm.reportFieldValueAliases.filter(function (m) { return m.fieldId != reportFieldValueAliasRequest.fieldId || m.fieldValue != vm.selectedReportFieldValue.name })\n vm.reportFieldValueAliases.push(reportFieldValueAliasRequest)\n vm.saveReportFieldValueAliasProcessing = false;\n }\n }, function (error) {\n vm.saveReportFieldValueAliasProcessing = false;\n console.log(error);\n });\n }\n\n function filterValueSearch(query, data) {\n var results = query ? data.filter(createFilterFor(query)) : data;\n return results;\n }\n\n function createFilterFor(query) {\n var lowercaseQuery = angular.lowercase(query);\n return function filterFn(item) {\n return (angular.lowercase(item.fieldTitle).indexOf(lowercaseQuery) === 0);\n };\n }\n\n vm.selectedReportFieldChange = function (item) {\n var request = {\n reportId: vm.report.id,\n fieldName: item.fieldName\n }\n api.report.reportFieldsCategoryValues(request)\n .then(function (response) {\n if (response) {\n response = response.filter(function (k) {\n return k.count > 0;\n })\n }\n vm.reportFieldValues = response;\n },\n function (response) {\n $log.error(response);\n });\n vm.selectedReportFieldValueAlias = null;\n }\n\n function getReportFieldValueAliases() {\n api.localization.findLocalVariables({\n groupCode: \"REPORT\",\n groupId: vm.report.id,\n itemCode: \"REPORTFIELDVALUE\"\n })\n .then(function (r) {\n var reportFieldValueAliases = [];\n r.forEach(function (k) {\n var reportFieldValueAlias = reportFieldValueAliases.filter(function (m) { return m.fieldId == k.itemId && m.fieldValue == k.itemValue; })[0]\n if (reportFieldValueAlias == null) {\n var reportField = vm.reportFields.filter(function (m) { return m.id == k.itemId })[0]\n reportFieldValueAlias = {\n fieldId: k.itemId,\n fieldTitle: reportField.fieldTitle,\n fieldValue: k.itemValue\n }\n reportFieldValueAliases.push(reportFieldValueAlias);\n }\n if (k.language == \"tr\") {\n reportFieldValueAlias['trAlias'] = k.value;\n reportFieldValueAlias['trLocalVariableId'] = k.id;\n } else if (k.language == \"en\") {\n reportFieldValueAlias['enAlias'] = k.value;\n reportFieldValueAlias['enLocalVariableId'] = k.id;\n }\n })\n vm.reportFieldValueAliases = reportFieldValueAliases;\n })\n }\n\n vm.removeAlias = function (alias) {\n api.localization.removeLocalVariables({\n groupCode: \"REPORT\",\n groupId: vm.report.id,\n itemCode: \"REPORTFIELDVALUE\",\n itemId: alias.fieldId,\n itemValue: alias.fieldValue\n })\n .then(function (r) {\n vm.reportFieldValueAliases = vm.reportFieldValueAliases.filter(function (f) {\n return f.fieldId != alias.fieldId || f.fieldValue != alias.fieldValue;\n })\n })\n }\n\n vm.selectedReportFieldValueChange = function () {\n vm.selectedReportFieldValueAlias = vm.reportFieldValueAliases.filter(function (k) { return k.fieldId == vm.selectedReportField.id && k.fieldValue == vm.selectedReportFieldValue.name})[0];\n if (vm.selectedReportFieldValueAlias == null) {\n vm.selectedReportFieldValueAlias = {\n fieldId: vm.selectedReportField.id,\n fieldTitle: vm.selectedReportField.fieldTitle,\n value: vm.selectedReportFieldValue.name,\n enAlias: \"\",\n trAlias: \"\"\n }\n }\n }\n\n function init() {\n getReportFieldsAndReportFieldValueAliases();\n }\n init();\n }\n\n function ReportSettingsCategoryThresholdController($mdDialog, api, report, $stateParams, $translate, $mdToast) {\n var vm = this;\n vm.report = report;\n vm.categories = vm.report.moduleCategories;\n vm.categoryThresholds = [];\n vm.selectedCategory = {};\n vm.searchCategoryName = \"\";\n vm.saveCategoryThresholdProcessing = false;\n vm.filterValueSearch = filterValueSearch;\n\n vm.range = function(min, max, step) {\n step = step || 1;\n if(step<1){\n var input = [];\n for (var i = min; i <= max; i += step) {\n input.push(i.toFixed(2));\n }\n }else{\n var input = [];\n for (var i = min; i <= max; i += step) {\n input.push(i.toString());\n }\n }\n return input;\n };\n\n function findReportCategories() {\n if (vm.categories && vm.categories.length > 0)\n vm.selectedCategory = vm.categories[0];\n api.report.settings.findReportCategoryThresholds(vm.report.id)\n .then(function (response) {\n response.forEach(function(f){f.thresholdValue = f.thresholdValue.toFixed(2).toString()})\n vm.categoryThresholds = response;\n\n setCategoryThresholdInCategory()\n }, function (error) {\n console.log(error);\n })\n }\n\n function setCategoryThresholdInCategory() {\n if (!vm.categoryThresholds || vm.categoryThresholds.length < 1 || !vm.categories || vm.categories.length < 1) return;\n vm.categoryThresholds.forEach(function (threshold) {\n var category = vm.categories.find(function (cat) {\n return cat.id == threshold.categoryId;\n });\n if (category) {\n category[\"thresholdValue\"] = threshold.thresholdValue;\n }\n })\n }\n\n vm.saveCategoryThreshold = function () {\n if (!vm.selectedCategory || !vm.selectedCategory.thresholdValue || vm.selectedCategory.thresholdValue.length < 1) return;\n vm.saveCategoryThresholdProcessing = true;\n var categoryThresholdRequest = {\n reportId: vm.report.id,\n categoryId: vm.selectedCategory.id,\n categoryName: vm.selectedCategory.name,\n thresholdValue: parseFloat(vm.selectedCategory.thresholdValue)\n }\n if(vm.selectedCategory.categoryId){\n api.report.settings.saveCategoryThreshold(vm.report.id,categoryThresholdRequest)\n .then(function (response) {\n if (response) {\n vm.categoryThresholds = vm.categoryThresholds.filter(function (c) {\n return c.categoryId!= response.categoryId;\n })\n vm.categoryThresholds.push(response);\n }\n vm.saveCategoryThresholdProcessing = false;\n }, function (error) {\n vm.saveCategoryThresholdProcessing = false;\n console.log(error);\n })\n }else{\n api.report.settings.saveCategoryThreshold(vm.report.id,categoryThresholdRequest)\n .then(function (response) {\n if (response) {\n vm.categoryThresholds = vm.categoryThresholds.filter(function (c) {\n return c.categoryId!= response.categoryId;\n })\n vm.categoryThresholds.push(response);\n vm.saveCategoryThresholdProcessing = false;\n }\n }, function (error) {\n console.log(error);\n vm.saveCategoryThresholdProcessing = false;\n })\n }\n }\n\n vm.removeThreshold = function (threshold) {\n api.report.settings.removeCategoryThreshold(vm.report.id,threshold.categoryId)\n .then(function (response) {\n vm.categoryThresholds = vm.categoryThresholds.filter(function (c) {\n return c.categoryId!= threshold.categoryId;\n })\n }, function (error) {\n console.log(error);\n })\n }\n\n function answer(bool) {\n $mdDialog.hide(bool);\n }\n\n vm.cancel = function () {\n $mdDialog.cancel();\n }\n vm.ok = function () {\n $mdDialog.hide(true);\n }\n\n function showSimpleToast(text) {\n $mdToast.show($mdToast.simple().textContent(text));\n }\n\n function filterValueSearch(query, data) {\n var results = query ? data.filter(createFilterFor(query)) : data;\n return results;\n }\n\n function createFilterFor(query) {\n var lowercaseQuery = angular.lowercase(query);\n return function filterFn(item) {\n return (angular.lowercase(item.name).indexOf(lowercaseQuery) === 0);\n };\n }\n\n\n\n function init() {\n findReportCategories();\n }\n init();\n }\n\n\n function ReportSettingsCategoryLimitController($mdDialog, api, report, $stateParams, $translate, $mdToast) {\n var vm = this;\n vm.report = report;\n \n vm.moduleList = []\n vm.limitSettings = []\n\n findModules();\n findLimitSettings();\n\n function findLimitSettings() {\n api.report.settings.findReportLimitSettings(vm.report.id)\n .then(function (response) {\n vm.limitSettings = response.limitSettings;\n if(!vm.limitSettings || vm.limitSettings.length == 0){\n vm.limitSettings = []\n vm.limitSettings.push({\n moduleId:null,\n limit:null\n });\n }\n }, function (error) {\n console.log(error);\n });\n }\n\n function findModules() {\n for (var i = 0; i < vm.report.reportModules.length; i++) {\n if (vm.report.reportModules[i].moduleTypeId === 1) {\n vm.moduleList.push({\n moduleName: vm.report.reportModules[i].module.name,\n moduleId: vm.report.reportModules[i].module.id\n });\n }\n }\n }\n \n vm.saveCategoryLimit = function () {\n if (!vm.limitSettings) return;\n vm.saveCategoryLimitProcessing = false;\n\n var validSettings = []\n for(var i = 0; i < vm.limitSettings.length; i++){\n if(vm.limitSettings[i].moduleId !== null && vm.limitSettings[i].limit !== null){\n validSettings.push(vm.limitSettings[i]);\n }\n }\n\n var checkModules = true;\n for (var i = 0; i < validSettings.length; i++) {\n for (var j = i + 1; j < validSettings.length; j++) {\n if (validSettings[i].moduleId === validSettings[j].moduleId)\n checkModules = false;\n break;\n }\n }\n if (checkModules === false) {\n return\n }\n\n var settings = {\n \"limitSettings\":validSettings\n };\n\n api.report.settings.saveCategoryLimit(vm.report.id, settings)\n .then(function (response) {\n var lang = $translate.use();\n var successText = \"Başarılı\";\n if (lang == \"en\") {\n successText = \"Successful\";\n }\n var toast = $mdToast.simple()\n .content(successText)\n .action('OK')\n .highlightAction(true)\n .hideDelay(0)\n .position('fit');\n \n $mdToast.show(toast);\n vm.saveCategoryThresholdProcessing = false;\n }, function (error) {\n vm.saveCategoryThresholdProcessing = false;\n var lang = $translate.use();\n var successText = \"Başarısız\";\n if (lang == \"en\") {\n successText = \"Error\";\n }\n var toast = $mdToast.simple()\n .content(successText)\n .action('OK')\n .highlightAction(true)\n .hideDelay(0)\n .position('fit');\n \n $mdToast.show(toast);\n console.log(error);\n });\n }\n\n vm.itemCanBeAdded = function(){\n return vm.limitSettings.length < vm.moduleList.length;\n }\n\n vm.addLimit = function () {\n if (vm.limitSettings.length < vm.moduleList.length)\n vm.limitSettings.push({ moduleId:null, limit:null });\n };\n\n vm.removeLimit = function (item) {\n if (vm.limitSettings.length == 1) {\n vm.limitSettings[0].moduleId = null;\n vm.limitSettings[0].limit = null;\n } else {\n for (var i = vm.limitSettings.length - 1; i--;) {\n if (vm.limitSettings[i].moduleId === item.moduleId && vm.limitSettings[i].limit === item.limit) vm.limitSettings.splice(i, 1);\n }\n }\n };\n\n function answer(bool) {\n $mdDialog.hide(bool);\n }\n\n vm.cancel = function () {\n $mdDialog.cancel();\n }\n vm.ok = function () {\n $mdDialog.hide(true);\n }\n\n function showSimpleToast(text) {\n $mdToast.show($mdToast.simple().textContent(text));\n }\n\n }\n\n function ReportSettingsIndicatorController($mdDialog, data, api, $stateParams, $translate, $mdToast) {\n var vm = this;\n vm.report = data.report;\n vm.answer = answer;\n vm.reportModules = [];\n\n vm.request = {};\n vm.groupName = null;\n vm.feedbackModuleName = null;\n vm.selectedDisabled = false;\n\n vm.saveIndicators = saveIndicators;\n vm.saveIndicatorsProcessing = false;\n vm.changeSelectedModule = changeSelectedModule;\n\n function changeSelectedModule(module) {\n var selectedModules = vm.reportModules.filter(function (r) {\n return r.selected && r.module.moduleTypeId !== module.module.moduleTypeId;\n });\n if (selectedModules && selectedModules.length > 0) {\n module.selected = false;\n }\n }\n\n\n function findReportModules() {\n if (data.reportModules)\n return;\n api.report.reportModules(vm.report.id)\n .then(function (r) {\n vm.reportModules = r; \n }, function (err) {\n console.log(err);\n });\n }\n\n function saveIndicators() {\n vm.saveIndicatorsProcessing = true;\n var selectedModules = vm.reportModules.filter(function (m) {\n return m.selected;\n });\n if (selectedModules && selectedModules.length > 0) {\n vm.request = {\n reportId: vm.report.id,\n type: selectedModules[0].module.moduleTypeId,\n groupName: vm.groupName,\n feedbackModuleName: vm.feedbackModuleName,\n modules: []\n }\n selectedModules.forEach(function (m, i) {\n var module = {\n id: m.id != null ? m.id : null,\n moduleId: m.module.id,\n indicator: m.indicator\n }\n vm.request.modules.push(module);\n });\n api.report.saveIndicators(vm.request)\n .then(function (r) {\n vm.saveIndicatorsProcessing = false;\n var lang = $translate.use();\n var message = \"Kayıt İşlemi Başarılı\";\n if(lang == 'en'){\n message = \"Registered successfully.\"; \n }\n showSimpleToast(message);\n $mdDialog.hide(true);\n }, function (err) {\n vm.saveIndicatorsProcessing = false;\n console.log(err);\n })\n }\n\n }\n\n function answer(bool) {\n $mdDialog.hide(bool);\n }\n\n vm.cancel = function () {\n console.log(data);\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n\n function showSimpleToast(text) {\n $mdToast.show($mdToast.simple().textContent(text));\n };\n\n function setExistsReportModules() {\n if (data.reportModules && data.reportModules.length > 0) {\n vm.selectedDisabled = true;\n vm.reportModules = data.reportModules;\n vm.groupName = data.reportModules[0].groupName;\n vm.feedbackModuleName = data.reportModules[0].feedbackModuleName;\n var rms = [];\n api.report.reportModules(vm.report.id)\n .then(function (r) {\n if (r && r.length > 0) {\n vm.reportModules.forEach(function (reportModule) {\n var found = r.find(function (mm) {\n return mm.moduleId == reportModule.moduleId;\n });\n if (found)\n reportModule.module = found.module;\n reportModule.selected = true;\n })\n }\n }, function (err) {\n console.log(err);\n });\n }\n }\n\n function init() {\n setExistsReportModules();\n findReportModules();\n };\n init();\n\n }\n\n function ReportFacetOrderController($mdDialog, report, api, $stateParams, $translate, $mdToast, ReportService) {\n var vm = this;\n vm.report = report;\n vm.reportFacets = null;\n vm.isOrderActive = false;\n vm.selectedItem = null;\n\n function isOrderActive() {\n api.report.isOrderActive(vm.report.id)\n .then(function (r) {\n vm.isOrderActive = r;\n });\n }\n\n function findFacets() {\n api.report.reportFields(vm.report.id)\n .then(function (r) {\n console.log(r);\n vm.reportFacets = r.filter(function (f) {\n return f.fieldType == 100 || f.fieldType == 200 || ReportService.isThisFieldType(300, f.fieldType);\n })\n\n var flags = [], output = [];\n for (var i = 0; i < vm.reportFacets.length; i++) {\n if (vm.reportFacets[i].fieldName.startsWith(\"category\")) {\n if (vm.reportFacets[i].fieldName.startsWith(\"category_m\") && !vm.reportFacets[i].fieldName.endsWith(\"_u_ss\")) {\n output.push(vm.reportFacets[i]);\n }\n } else {\n output.push(vm.reportFacets[i]);\n }\n }\n\n vm.reportFacets = output;\n if (!vm.isOrderActive) {\n vm.reportFacets.sort(function (a, b) {\n return a.fieldType - b.fieldType;\n });\n } else {\n vm.reportFacets.sort(function (a, b) {\n return a.order - b.order;\n });\n }\n\n for (var i = 0; i < vm.reportFacets.length; i++) {\n vm.reportFacets[i].order = i + 1;\n }\n })\n }\n\n vm.goUp = function (item) {\n for (var i = 0; i < vm.reportFacets.length; i++) {\n if (vm.reportFacets[i] == item && i != 0) {\n vm.reportFacets[i].order = vm.reportFacets[i].order - 1;\n vm.reportFacets[i - 1].order = vm.reportFacets[i].order + 1;\n }\n }\n vm.reportFacets.sort(function (a, b) {\n return a.order - b.order;\n });\n }\n\n vm.goDown = function (item) {\n for (var i = 0; i < vm.reportFacets.length; i++) {\n if (vm.reportFacets[i] == item && i != (vm.reportFacets.length-1)) {\n vm.reportFacets[i].order = vm.reportFacets[i].order + 1;\n vm.reportFacets[i + 1].order = vm.reportFacets[i].order - 1;\n }\n }\n vm.reportFacets.sort(function (a, b) {\n return a.order - b.order;\n });\n }\n\n vm.saveOrder = function () {\n var item = [];\n for (var i = 0; i < vm.reportFacets.length; i++) {\n var element = {};\n element.value = vm.reportFacets[i].fieldName;\n element.payload = vm.reportFacets[i].order;\n element.code = vm.report.id;\n element.groupCode = \"ORDER\";\n item.push(element)\n }\n\n api.report.saveFacetOrders(item)\n .then(function (r) {\n vm.ok();\n });\n }\n\n vm.cancel = function () {\n $mdDialog.cancel();\n }\n vm.ok = function () {\n $mdDialog.hide(true);\n }\n\n\n function init() {\n isOrderActive();\n findFacets();\n };\n init();\n\n }\n\n function ReportModuleClassifierSettingsController ($mdDialog, reportModule, nominalFields, settings, NERModuleCategories, api, $stateParams, $translate, $mdToast, ReportService) {\n var vm = this;\n vm.reportModule = reportModule;\n vm.nominalFields = nominalFields;\n vm.nominalModuleFields = [];\n vm.realModuleFields = [];\n vm.classificationFields = settings.classificationFields;\n vm.NERModuleCategories = NERModuleCategories;\n vm.NERavailable = vm.NERModuleCategories.length>0;\n vm.nerMatching = settings.nerMatching;\n vm.nerSelected = true;\n if(vm.nerMatching == null || vm.nerMatching.reportFieldName == null){vm.nerMatching = {}; vm.nerSelected = false;}\n vm.saveProcessing = false;\n vm.loading = true;\n vm.matchingTypes = []\n init();\n vm.addClassificationField = addClassificationField;\n vm.removeClassificationField = removeClassificationField;\n vm.saveClassifierSettings = saveClassifierSettings;\n vm.setNerMatching = setNerMatching;\n\n vm.cancel = function () {\n $mdDialog.cancel();\n }\n vm.ok = function (classificationFields) {\n $mdDialog.hide(classificationFields);\n }\n\n function saveClassifierSettings(){\n vm.saveProcessing = true;\n var classificationFields = vm.classificationFields.map(function(field){ return {'reportFieldName':field.reportFieldName,'moduleFieldName':field.moduleFieldName};});\n var settings = {'classificationFields':classificationFields};\n if(vm.nerSelected){\n settings['nerMatching'] = vm.nerMatching;\n }\n api.reportv2.reportModule.saveReportModuleSettings(vm.reportModule.reportId, vm.reportModule.id, settings)\n .then(function (r) {\n vm.saveProcessing = false;\n vm.ok(settings);\n }, function (err) {\n vm.saveProcessing = false;\n console.log(err);\n vm.cancel();\n });\n }\n function addClassificationField(reportField, moduleField, type){\n if(reportField == null || moduleField == null) return;\n vm.classificationFields.push({'reportField':reportField, 'moduleField': moduleField, 'reportFieldName':reportField.fieldName, 'moduleFieldName':moduleField.fieldName});\n if(type == 301){\n vm.realModuleFields.splice(vm.realModuleFields.indexOf(moduleField),1);\n vm.numericReportFields.splice(vm.numericReportFields.indexOf(reportField),1);\n }else{\n vm.nominalModuleFields.splice(vm.nominalModuleFields.indexOf(moduleField),1);\n vm.nonNumericReportFields.splice(vm.nonNumericReportFields.indexOf(reportField),1);\n }\n }\n \n function removeClassificationField(classificationField){\n for(var i = 0; i 0) {\n var order = 0;\n vm.reportAttributeScoreChart.formulaOrderList.forEach(function (r){\n var nextItem = vm.formulas.filter(function (f){return f.settings.formulaName == r});\n if(nextItem && nextItem.length > 0) {\n vm.formulaOrderList.push({\n \"id\": nextItem[0].id,\n \"formulaName\": nextItem[0].settings.formulaName, \n \"definition\": nextItem[0].settings.definition, \n \"attribute\": nextItem[0].settings.attribute,\n \"order\": order++\n });\n }\n })\n }\n else {\n /*\n var order = 0;\n vm.formulas.forEach(function (k) {\n vm.formulaOrderList.push({\n \"id\": k.id,\n \"formulaName\": k.settings.formulaName, \n \"definition\": k.settings.definition, \n \"order\": order++});\n })\n */\n }\n\n vm.formulaOrderList.sort(function (a, b) {\n return a.order - b.order;\n });\n\n if(vm.reportAttributeScoreChart.reportAttributeScoreSortItem) {\n vm.orderBy = vm.formulas.filter(function(f) {\n return f.settings.formulaName == vm.reportAttributeScoreChart.reportAttributeScoreSortItem})[0];\n }\n\n if(!vm.reportAttributeScoreChart.reportAttributeScoreSortItemOrder || \n vm.reportAttributeScoreChart.reportAttributeScoreSortItemOrder == 0) \n {\n vm.reportAttributeScoreChart.reportAttributeScoreSortItemOrder = 1; // by default DESCENDING\n }\n }\n\n vm.addFormulaToOrderList = function() {\n if(vm.selectedFormula) {\n \n if( vm.formulaOrderList.filter(function(f) {\n return f.attribute != vm.selectedFormula.settings.attribute\n }).length > 0 ) {\n $mdToast.show($mdToast.simple().textContent(\n $translate.instant('REPORT.SETTINGS.FORMULA.SAME_ATTRIBUTE_ERROR')\n ));\n return;\n }\n \n if(vm.formulaOrderList.filter(function(f) {return f.id == vm.selectedFormula.id}).length == 0 ) {\n vm.formulaOrderList.push({\n \"id\": vm.selectedFormula.id,\n \"formulaName\": vm.selectedFormula.settings.formulaName, \n \"attribute\": vm.selectedFormula.settings.attribute,\n \"definition\": vm.selectedFormula.settings.definition, \n \"order\": vm.formulaOrderList.length });\n }\n }\n }\n\n vm.removeFormulaFromOrderList = function(item) {\n vm.formulaOrderList = vm.formulaOrderList.filter(function(f) {\n return f.id != item.id\n })\n }\n\n vm.ok = function () {\n var result = vm.reportSettings;\n $mdDialog.hide(result);\n }\n\n function init() {\n setColumnOrder();\n };\n init();\n }\n\n function ReportEditReputationWidgetSettingsController($mdDialog, api, report, reportSettings, user, $stateParams, $translate, $mdToast) {\n var vm = this;\n vm.report = report;\n console.log(vm.report);\n vm.reportSettings = reportSettings;\n vm.attributeBasedCategoryChart = { \"name\" : \"Firma Bazlı İtibar Durumu\"};\n vm.filterCategoryIds = [];\n\n\n\n if(vm.reportSettings.dashboardSettings && vm.reportSettings.dashboardSettings.cumulativeReportModel\n && vm.reportSettings.dashboardSettings.cumulativeReportModel.attributeBasedCategoryChart) {\n vm.attributeBasedCategoryChart = vm.reportSettings.dashboardSettings.cumulativeReportModel.attributeBasedCategoryChart;\n }\n\n vm.reportFields = report.reportFields.filter(function (r) { return r.fieldType >= 300 && r.fieldType < 400});\n vm.categoryFields = report.reportFields.filter(function (r) { return r.fieldType == 100\n && r.fieldName.indexOf(\"_u_ss\") > -1\n && r.fieldName.indexOf(\"category_\") > -1\n });\n\n vm.user = user;\n vm.searchCategories = searchCategories;\n vm.categories = vm.report.moduleCategories;\n\n function setAttributeNameSortList() {\n if(vm.attributeBasedCategoryChart.attributeNameSortList && vm.attributeBasedCategoryChart.attributeNameSortList.length > 0) {\n vm.categories.forEach(function (c) {\n var catText = vm.getCategoryText(c.id);\n if(vm.attributeBasedCategoryChart.attributeNameSortList.includes(catText)) {\n vm.filterCategoryIds.push(c.id);\n }\n })\n }\n\n if(vm.attributeBasedCategoryChart.attributeNameSortItem) {\n vm.categories.forEach(function (c) {\n var catText = vm.getCategoryText(c.id);\n if(vm.attributeBasedCategoryChart.attributeNameSortItem == catText) {\n vm.selectedCategorySortItem = c;\n }\n })\n }\n }\n \n \n\n vm.aliasSearchCategoryName = \"\";\n vm.cancel = function () {\n $mdDialog.cancel();\n }\n vm.selectedCategory = null;\n\n console.log(vm.reportSettings);\n vm.moduleList = [];\n vm.catLevels = [1,2,3];\n vm.limits = [10,20,30,40,50,60,70,80,90,100];\n\n function createFilter(query) {\n var lowercaseQuery = query.toLocaleLowerCase('tr-TR');\n return function filterFn(category) {\n return (category.name.toLocaleLowerCase('tr-TR').indexOf(lowercaseQuery) != -1);\n };\n }\n\n function searchCategories(query) {\n var results = query ? vm.categories.filter(createFilter(query)) : vm.categories;\n results = results.filter(function (r) { \n if(vm.attributeBasedCategoryChart && vm.attributeBasedCategoryChart.categoryLevel) {\n if(vm.attributeBasedCategoryChart.categoryLevel == 1) {\n return !r.parentModuleCategory\n }\n else if(vm.attributeBasedCategoryChart.categoryLevel == 2) {\n return r.parentModuleCategory && !r.parentModuleCategory.parentModuleCategory\n }\n else if(vm.attributeBasedCategoryChart.categoryLevel == 3) {\n return r.parentModuleCategory && r.parentModuleCategory.parentModuleCategory\n }\n }\n \n return r.parent \n \n \n });\n return results;\n }\n\n vm.selectedCategoryChangeSortItem = function (item) {\n vm.attributeBasedCategoryChart.attributeNameSortItem = vm.getCategoryText(item.id);\n }\n\n vm.categoryLevelChanged = function() {\n vm.filterCategoryIds = [];\n vm.searchCategoryName = \"\";\n }\n\n vm.addFilterCategory = function () {\n if (vm.selectedCategory != null && !vm.filterCategoryIds.includes(vm.selectedCategory.id)) {\n vm.filterCategoryIds.push(vm.selectedCategory.id);\n }\n }\n\n vm.removeFilterCategory = function (id) {\n vm.filterCategoryIds = vm.filterCategoryIds.filter(function (k) {\n return k != id;\n })\n }\n\n vm.getCategoryText = function (id) {\n var category = vm.categories.filter(function (k) { return k.id == id })[0];\n if (category) {\n \n if (category.parent) {\n var parent = vm.categories.filter(function (k) { return k.id == category.parent })[0];\n if(parent.parent) {\n var grandparent = vm.categories.filter(function (k) { return k.id == parent.parent })[0];\n return grandparent.name + \" -> \" + parent.name + \" -> \" + category.name;\n }\n return parent ? parent.name + \" -> \" + category.name : \"- ->\" + category.name;\n } else {\n return category.name;\n }\n }\n return \"-\";\n }\n\n vm.saveReportSettings = function () {\n vm.saveReportSettingsLoading = true;\n vm.attributeBasedCategoryChart.attributeNameSortList = [];\n vm.filterCategoryIds.forEach(function (k) {\n vm.attributeBasedCategoryChart.attributeNameSortList.push(vm.getCategoryText(k));\n })\n \n vm.reportSettings.dashboardSettings.cumulativeReportModel.attributeBasedCategoryChart = vm.attributeBasedCategoryChart;\n \n\n // vm.reportSettings.commonSettings.filteredCategoryIds = vm.filterCategoryIds;\n api.settings.saveReportSettings(vm.reportSettings, report.id)\n .then(function (response) {\n vm.saveReportSettingsLoading = false;\n vm.ok();\n },\n function (response) {\n vm.saveReportSettingsLoading = false;\n deferred.resolve(false);\n $log.error(response);\n });\n }\n\n function findModules() {\n for (var i = 0; i < vm.report.reportModules.length; i++) {\n console.log(vm.report.reportModules);\n if (vm.report.reportModules[i].moduleTypeId === 1) {\n vm.moduleList.push({\n moduleName: vm.report.reportModules[i].module.name,\n moduleId: vm.report.reportModules[i].module.id\n });\n }\n }\n }\n\n \n\n vm.ok = function () {\n var result = vm.reportSettings;\n $mdDialog.hide(result);\n }\n\n function init() {\n findModules();\n setAttributeNameSortList();\n };\n init();\n }\n \n\n function BottomSheetFormulaController($scope, $mdBottomSheet) {\n $scope.items = [\n \"BASIC_MATH\" ,\n \"EXPONENTIATION\" ,\n \"NEGATIVE\" ,\n \"SQRT\" ,\n \"EXP\" ,\n \"INEQUALITIES\",\n \"SART\",\n \"CATEGORYRATIO\" ,\n \"ATTRIBUTE_CHECK\",\n \"LOGARITMA\",\n \"GROUPING\"\n ];\n \n $scope.listItemClick = function($index) {\n var clickedItem = $scope.items[$index];\n $mdBottomSheet.hide(clickedItem);\n };\n }\n\n function TopBottomPreviewController($mdDialog, api, report, user, alertSetting, $stateParams) {\n var vm = this;\n\n console.log(alertSetting);\n\n vm.alertSetting = alertSetting;\n vm.report = report;\n vm.user = user;\n\n vm.addopacity = function (color, opacity) {\n return hexToRGB(color, opacity);\n }\n\n function hexToRGB(hex, alpha) {\n var r = parseInt(hex.slice(1, 3), 16),\n g = parseInt(hex.slice(3, 5), 16),\n b = parseInt(hex.slice(5, 7), 16);\n \n if (alpha) {\n return \"rgba(\" + r + \", \" + g + \", \" + b + \", \" + alpha + \")\";\n } else {\n return \"rgb(\" + r + \", \" + g + \", \" + b + \")\";\n }\n }\n\n vm.headerNotes = ['Her bir itibar kategorisi için haberlerin tarihi, konusu ve kaynağı dikkate alınarak ilgili tedarikçiler için puan hesaplanmıştır.'\n ,'Puanın 0 olması, seçilen periyotta hiç haber bulunmadığını;'\n ,'100 olması ise diğer tedarikçilere göre daha güncel ve daha önemli haberlerin bulunduğunu ifade eder.'];\n\n vm.footerNote = 'Not: 01 Ocak sonrasında gelen haberler ile hesaplanmıştır.';\n\n vm.updatedLinkText = 'Skorların güncel halini görmek için tıklayınız!';\n\n vm.cancel = function () {\n $mdDialog.cancel();\n }\n vm.ok = function () {\n $mdDialog.hide(true);\n }\n\n }\n\n function ReportEditFormulaController($mdDialog, $mdBottomSheet, api, report, reportId, settingId, formulaType, formula, $stateParams, $translate, $mdToast) {\n var vm = this;\n vm.formula = JSON.parse(JSON.stringify(formula));\n vm.reportId = reportId;\n vm.report = report;\n vm.categories = vm.report.moduleCategories;\n vm.reportFields = vm.report.reportFields;\n vm.formulaType = formulaType;\n vm.pageHeader = $translate.instant('REPORT.SETTINGS.FORMULA.EDIT_DOCUMENT_FORMULA_TITLE');\n if(vm.formulaType == 'ATTR_SCORE_CALC') {\n vm.pageHeader = $translate.instant('REPORT.SETTINGS.FORMULA.EDIT_ATTRIBUTE_FORMULA_TITLE')\n }\n vm.attributeLocked = false;\n if(vm.formula.attribute) {\n vm.attributeLocked = true;\n }\n vm.settingId = settingId;\n vm.periodTypes = null;\n vm.weekDays = null;\n vm.days = [];\n vm.times = [];\n vm.reportDocumentList = [];\n vm.formulaTypes = [];\n vm.textualComparisonTypes = [{'text':$translate.instant('REPORT.SETTINGS.RULES.COMPARISON_TYPE.EQUALS'),'type':'equals'},{'text':$translate.instant('REPORT.SETTINGS.RULES.COMPARISON_TYPE.CONTAINS'),'type':'contains'},{'text':$translate.instant('REPORT.SETTINGS.RULES.COMPARISON_TYPE.REGEX'),'type':'regex'}];\n vm.numericComparisonTypes = [{'text':$translate.instant('REPORT.SETTINGS.RULES.COMPARISON_TYPE.EQUALS'),'type':'equals'},{'text':$translate.instant('REPORT.SETTINGS.RULES.COMPARISON_TYPE.GREATER'),'type':'greater'},{'text':$translate.instant('REPORT.SETTINGS.RULES.COMPARISON_TYPE.SMALLER'),'type':'smaller'}];\n vm.categoryOperations = [{'text':$translate.instant('REPORT.SETTINGS.RULES.CATEGORY_OPERATION.SET_CATEGORY'),'type':'set'}, {'text':$translate.instant('REPORT.SETTINGS.RULES.CATEGORY_OPERATION.ADD_CATEGORY'),'type':'add'},{'text':$translate.instant('REPORT.SETTINGS.RULES.CATEGORY_OPERATION.REMOVE_CATEGORY'),'type':'remove'}];\n vm.categoryOperationsSingle = [{'text':$translate.instant('REPORT.SETTINGS.RULES.CATEGORY_OPERATION.SET_CATEGORY'),'type':'set'}, {'text':$translate.instant('REPORT.SETTINGS.RULES.CATEGORY_OPERATION.REMOVE_CATEGORY'),'type':'remove'}];\n vm.resultModuleCategories = [{\"name\":\"positive\",\"id\":\"positive\"},{\"name\":\"neutral\",\"id\":\"neutral\"},{\"name\":\"negative\",\"id\":\"negative\"}];\n vm.regexFlags = [{\"name\":\"Multiline\",\"id\":\"M\"},{\"name\":\"Insensitive\",\"id\":\"I\"},{\"name\":\"Single Line\",\"id\":\"S\"}];\n vm.attributeFields = report.reportFields.filter(function (r) { return r.fieldType >= 300 && r.fieldType < 312});\n \n vm.showFormulaExplanation = function() {\n $mdBottomSheet.show({\n templateUrl: 'app/main/apps/reports/views/settings/bottom-sheet-formula-template.html',\n controller: 'BottomSheetFormulaController',\n parent: '#formula-setting-edit'\n }).then(function(clickedItem) {\n $scope.alert = clickedItem['name'] + ' clicked!';\n }).catch(function(error) {\n // User clicked outside or hit escape\n });\n }\n\n function recursiveFindProbability(item, id) {\n var res = 0;\n for (var k = 0; k < item.subCategories.length; k++) {\n if (item.subCategories[k].categoryId == id) {\n res = Math.round(item.subCategories[k].probability * 100);\n break;\n }\n if (item.subCategories[k].subCategories.length > 0) {\n res = recursiveFindProbability(item.subCategories[k], id);\n break;\n }\n }\n return res;\n }\n\n vm.calculatePercentageForCategorySentimentTooltip = function (item, id, field) {\n var result = 0;\n if (!item.markedList) return \"-\";\n var marking = item.markedList.filter(function (k) { return field.startIndex == k.startIndex && field.endIndex == k.endIndex && k.moduleId == field.moduleId })[0];\n if (!marking) return 100;\n for (var j = 0; j < marking.categories.length; j++) {\n if (marking.categories[j].categoryId == id) {\n result = Math.round(marking.categories[j].probability * 100);\n break;\n }\n if (marking.categories[j].subCategories.length > 0) {\n var recursiveResult = recursiveFindProbability(marking.categories[j], id);\n result = recursiveResult != 0 ? recursiveResult : result;\n if (result != 0) break;\n }\n }\n return result;\n }\n\n vm.getCategoryTitle = function (cat) {\n var title = cat.name;\n var category = vm.categories.filter(function (k) { return k.id == cat.id; })[0];\n if (category && category.localVariables) {\n var localVariable = category.localVariables.filter(function (k) { return $translate.use() == k.language; })[0];\n if (localVariable) title = localVariable.value;\n }\n return title;\n }\n\n function setPeriodVariables() {\n vm.periodTypes = [\n { value: 'HOURLY', name: $translate.instant('SHARED.TIME_PERIOD.HOURLY') },\n { value: 'DAILY', name: $translate.instant('SHARED.TIME_PERIOD.DAILY') },\n { value: 'WEEKLY', name: $translate.instant('SHARED.TIME_PERIOD.WEEKLY') },\n { value: 'MONTHLY', name: $translate.instant('SHARED.TIME_PERIOD.MONTHLY') }\n ];\n vm.weekDays = [\n { value: 2, name: $translate.instant('SHARED.WEEKDAYS.MONDAY') },\n { value: 3, name: $translate.instant('SHARED.WEEKDAYS.TUESDAY') },\n { value: 4, name: $translate.instant('SHARED.WEEKDAYS.WEDNESDAY') },\n { value: 5, name: $translate.instant('SHARED.WEEKDAYS.THURSDAY') },\n { value: 6, name: $translate.instant('SHARED.WEEKDAYS.FRIDAY') },\n { value: 7, name: $translate.instant('SHARED.WEEKDAYS.SATURDAY') },\n { value: 1, name: $translate.instant('SHARED.WEEKDAYS.SUNDAY') }\n ];\n\n vm.dayNames = [\n $translate.instant('SHARED.WEEKDAYS.SUNDAY'),\n $translate.instant('SHARED.WEEKDAYS.MONDAY'),\n $translate.instant('SHARED.WEEKDAYS.TUESDAY'),\n $translate.instant('SHARED.WEEKDAYS.WEDNESDAY'),\n $translate.instant('SHARED.WEEKDAYS.THURSDAY'),\n $translate.instant('SHARED.WEEKDAYS.FRIDAY'),\n $translate.instant('SHARED.WEEKDAYS.SATURDAY')\n ];\n \n vm.lang = $translate.use();\n }\n\n vm.getFilteredFacetTitle = function (title) {\n if (!vm.afterResponse) return title;\n var reportField = vm.reportFields.filter(function (a) {\n return a.fieldTitle == title;\n })[0]\n if (reportField) {\n var alias = vm.afterResponse.localVariables.filter(function (k) {\n return k.fieldName == reportField.fieldName;\n })\n if (alias[0] != null && alias[0].alias != null) {\n if ($translate.use() == \"tr\" && alias[0].alias.tr != null) return alias[0].alias.tr;\n else if ($translate.use() == \"en\" && alias[0].alias.en != null) return alias[0].alias.en;\n else return title;\n }\n }\n return title;\n }\n\n vm.getFacetValueAlias = function (title, value) {\n if (title==\"Id\") {\n var values = value.split(\"_\");\n if (values.length > 0) {\n return values[values.length-1];\n }\n } \n if (vm.afterResponse == null) return value;\n var reportField = vm.reportFields.filter(function (a) {\n return a.fieldTitle == title;\n })[0]\n if (reportField) {\n var localVariable = vm.afterResponse.localVariables.filter(function (k) {\n return k.fieldName == reportField.fieldName;\n })\n\n if (localVariable[0] != null && localVariable[0].valueAliases != null) {\n var valueLocalVariable = localVariable[0].valueAliases.filter(function (k) { return k.itemValue == value.toString(); })\n\n if (valueLocalVariable[0] != null) {\n if ($translate.use() == \"tr\" && valueLocalVariable[0].tr != null) return valueLocalVariable[0].tr;\n else if ($translate.use() == \"en\" && valueLocalVariable[0].en != null) return valueLocalVariable[0].en;\n else return value;\n } \n } \n }\n return value;\n }\n\n\n function parseMarkedCategories(marked) {\n var result = [];\n var startIndex = marked.startIndex;\n var endIndex = marked.endIndex;\n var moduleName = marked.moduleName;\n var moduleId = marked.moduleId;\n var sentiment = marked.sentiment;\n var sentimentValue = marked.sentimentValue;\n\n var cats = [];\n generateStringCats(cats, [], marked.categories);\n cats.forEach(function (c) {\n var r = {\n startIndex: startIndex,\n endIndex: endIndex,\n moduleName: moduleName,\n moduleId: moduleId,\n sentiment: sentiment,\n sentimentValue: sentimentValue,\n categories: c\n };\n result.push(r);\n });\n if (!cats || cats.length == 0) {\n result.push({\n startIndex: startIndex,\n endIndex: endIndex,\n moduleName: moduleName,\n moduleId: moduleId,\n sentiment: sentiment,\n sentimentValue: sentimentValue,\n categories: []\n });\n }\n return result;\n }\n\n function generateStringCats(cats, tempCats, markedCategories) {\n if (markedCategories && markedCategories.length > 0) {\n markedCategories.forEach(function (caty) {\n var catName = caty.name;\n var catId = caty.categoryId;\n var newTempCats = tempCats.slice();\n newTempCats.push({\n name: catName,\n id: catId\n });\n if (caty.subCategories && caty.subCategories.length > 0) {\n generateStringCats(cats, newTempCats, caty.subCategories);\n } else {\n cats.push(newTempCats);\n }\n })\n }\n }\n\n vm.activateFormula = function (isActive){\n vm.formula.isActive = isActive;\n vm.saveFormula();\n }\n \n vm.saveFormula = function (){\n vm.saveFormulaProcessing = true;\n api.report.updateFormula(vm.reportId, vm.settingId, vm.formula)\n .then(function (response){\n vm.formula = JSON.parse(response.settings);\n vm.ok();\n }, function (err) {\n console.log(err);\n vm.saveFormulaProcessing = false;\n }\n );\n }\n vm.cancel = function () {\n $mdDialog.cancel();\n }\n vm.ok = function () {\n for(var k in vm.formula){\n formula[k]=vm.formula[k];\n }\n $mdDialog.hide(true);\n }\n\n Number.prototype.padLeft = function (n, str) {\n return (this < 0 ? '-' : '') +\n Array(n - String(Math.abs(this)).length + 1)\n .join(str || '0') +\n (Math.abs(this));\n }\n\n vm.updateRepeatType = function() {\n vm.formula.period = {type: vm.formula.period.type};\n }\n\n vm.testFormula = function() {\n\n if(vm.formulaType == 'ATTR_SCORE_CALC') {\n api.report.validateFormula(vm.reportId, vm.formula)\n .then(function(response) {\n vm.formula.valid = true;\n }, function (err) {\n vm.formula.valid = false;\n if(err && err.causeMessage)\n $mdToast.show($mdToast.simple().textContent(err.causeMessage));\n else \n $mdToast.show($mdToast.simple().textContent('Formula syntax error'));\n })\n } else {\n api.report.testFormula(vm.reportId, vm.formula.formula)\n .then(function (response)\n {\n vm.formula.valid = true;\n var documents = response.reportDocumentList;\n vm.afterResponse = response;\n documents.forEach(function (doc) {\n doc.hidetag = true;\n var testScoreAttr = doc.nominalAttributes.filter(function f(n) {return n.title == \"TestScore\"});\n if(testScoreAttr && testScoreAttr.length > 0) {\n doc.testScore = testScoreAttr[0].value;\n }\n doc.nominalAttributes = doc.nominalAttributes.filter(function f(n) {return n.title != \"TestScore\"});\n if (doc.markedList && doc.markedList.length > 0) {\n doc[\"categories\"] = [];\n doc.markedList.forEach(function (marked) {\n var r = parseMarkedCategories(marked);\n doc[\"categories\"] = doc[\"categories\"].concat(r);\n })\n }\n })\n vm.reportDocumentList = documents.filter(function (k) { return k.categories })\n }, function (err) {\n vm.formula.valid = false;\n if(err && err.causeMessage)\n $mdToast.show($mdToast.simple().textContent(err.causeMessage));\n else \n $mdToast.show($mdToast.simple().textContent('Formula syntax error'));\n }\n );\n\n }\n }\n\n\n function setTimes() {\n var name = null;\n for (var i = 0; i < 24; i++) {\n name = (i * 100).padLeft(4);\n vm.times.push({ value: i * 100, name: name.substring(0, 2) + ':' + name.substring(2) });\n }\n for (var i = 1; i < 32; i++) {\n vm.days.push(i);\n }\n }\n\n function setFormulaTypes() {\n vm.formulaTypes.push({\"name\":\"ATTR_SCORE_CALC\", \"title\":\"Final Skoru\"});\n vm.formulaTypes.push({\"name\":\"REPORT_SCORE_CALC\", \"title\":\"Doküman Bazlı Skor Hesaplama\"});\n }\n\n function init() {\n setPeriodVariables();\n setTimes();\n setFormulaTypes();\n }\n\n init();\n }\n\n function ReportEditRuleController($mdDialog, api, reportId, rule,fields,reportModules, $stateParams, $translate, $mdToast) {\n var vm = this;\n vm.rule = JSON.parse(JSON.stringify(rule));\n vm.reportId = reportId;\n vm.fields = fields;\n vm.ruleModules = []\n reportModules.forEach(function(rm){\n if(rm.module.moduleTypeId == 5 || rm.module.moduleTypeId == 7){\n vm.ruleModules.push({'moduleId':'_Sentiment','module':{'name':'Sentiment'}});\n }else if(rm.module.moduleTypeId == 1){\n vm.ruleModules.push(rm);\n }\n });\n vm.moduleCategories = {};\n \n vm.textualComparisonTypes = [{'text':$translate.instant('REPORT.SETTINGS.RULES.COMPARISON_TYPE.EQUALS'),'type':'equals'},{'text':$translate.instant('REPORT.SETTINGS.RULES.COMPARISON_TYPE.CONTAINS'),'type':'contains'},{'text':$translate.instant('REPORT.SETTINGS.RULES.COMPARISON_TYPE.REGEX'),'type':'regex'}];\n vm.numericComparisonTypes = [{'text':$translate.instant('REPORT.SETTINGS.RULES.COMPARISON_TYPE.EQUALS'),'type':'equals'},{'text':$translate.instant('REPORT.SETTINGS.RULES.COMPARISON_TYPE.GREATER'),'type':'greater'},{'text':$translate.instant('REPORT.SETTINGS.RULES.COMPARISON_TYPE.SMALLER'),'type':'smaller'}];\n vm.categoryOperations = [{'text':$translate.instant('REPORT.SETTINGS.RULES.CATEGORY_OPERATION.SET_CATEGORY'),'type':'set'}, {'text':$translate.instant('REPORT.SETTINGS.RULES.CATEGORY_OPERATION.ADD_CATEGORY'),'type':'add'},{'text':$translate.instant('REPORT.SETTINGS.RULES.CATEGORY_OPERATION.REMOVE_CATEGORY'),'type':'remove'}];\n vm.categoryOperationsSingle = [{'text':$translate.instant('REPORT.SETTINGS.RULES.CATEGORY_OPERATION.SET_CATEGORY'),'type':'set'}, {'text':$translate.instant('REPORT.SETTINGS.RULES.CATEGORY_OPERATION.REMOVE_CATEGORY'),'type':'remove'}];\n vm.resultModuleCategories = [{\"name\":\"positive\",\"id\":\"positive\"},{\"name\":\"neutral\",\"id\":\"neutral\"},{\"name\":\"negative\",\"id\":\"negative\"}];\n vm.regexFlags = [{\"name\":\"Multiline\",\"id\":\"M\"},{\"name\":\"Insensitive\",\"id\":\"I\"},{\"name\":\"Single Line\",\"id\":\"S\"}];\n\n\n vm.checkSingle = function(moduleId){\n if (moduleId == null) return false;\n\n var filtered = vm.ruleModules.filter(function(r){return r.moduleId == moduleId});\n if(filtered != null && filtered.length>0){\n return filtered[0].module.classifierType === \"SINGLE\";\n }\n };\n\n vm.setModuleCategories = function(reportModules){\n reportModules.forEach(function(rm){\n if(rm.moduleTypeId == 1){\n api.module.categories(rm.moduleId)\n .then(function (r) {\n vm.moduleCategories[rm.moduleId] = extractLeafCategories(r);\n }, function (e) {\n console.log(e);\n })\n .then(function (r) {\n return extractLeafCategories(r);\n }, function (e) {\n console.log(e);\n })\n }else if(rm.moduleTypeId == 5 || rm.moduleTypeId == 7){\n vm.moduleCategories['_Sentiment'] = [{\"name\":\"positive\",\"id\":\"positive\"},{\"name\":\"neutral\",\"id\":\"neutral\"},{\"name\":\"negative\",\"id\":\"negative\"}];\n } \n });\n };\n\n vm.comparisonTypeChange = function(condition){\n if(condition.comparisonType === 'regex'){\n condition.regexFlags = [\"M\", \"I\"];\n } else{\n condition.regexFlags = undefined;\n }\n\n }\n\n function extractLeafCategories(categories){\n var leafCategories = [];\n var parents = new Set();\n for(var i = 0;i' + name\n category = JSON.parse(JSON.stringify(category.parentModuleCategory))\n }\n leafCategories.push({'id':id,'name':name,'moduleId':category.moduleId});\n }\n leafCategories = leafCategories.filter(function(x){\n return !(parents.has(x.id));\n });\n return leafCategories;\n }\n\n vm.setModuleCategories(reportModules);\n\n vm.addCondition = function(){\n var newCondition = {\n 'fieldTitle':null,\n 'fieldType':null,\n 'fieldUsage':null,\n 'comparisonType':null,\n 'comparisonValue':''};\n if(vm.rule.conditions == null){\n vm.rule.conditions = [newCondition];\n }else{\n vm.rule.conditions.push(newCondition);\n }\n }\n vm.addResult = function(){\n var newResult = {'moduleId':null,'task':null,'categoryId':null,'ifSingleText':false};\n if(vm.rule.results == null){\n vm.rule.results = [newResult];\n }else{\n vm.rule.results.push(newResult);\n }\n }\n vm.removeCondition = function(condition){\n vm.rule.conditions.splice(vm.rule.conditions.indexOf(condition),1);\n }\n vm.removeResult = function(result){\n\n vm.rule.results.splice(vm.rule.results.indexOf(result),1);\n }\n\n vm.setConditionFields = function(condition,item){\n condition.fieldTitle = item.fieldTitle;\n condition.fieldType = item.fieldType;\n }\n vm.saveRule = function (){\n vm.saveRuleProcessing = true;\n api.report.saveRule(vm.reportId,vm.rule)\n .then(function (response){\n vm.rule = response;\n });\n vm.saveRuleProcessing = false;\n vm.ok();\n }\n vm.cancel = function () {\n $mdDialog.cancel();\n }\n vm.ok = function () {\n for(var k in vm.rule){\n rule[k]=vm.rule[k];\n }\n $mdDialog.hide(true);\n }\n }\n\n\n function ReportSettingsControlller($mdDialog, report, reportSettings, user) {\n var vm = this;\n vm.report = report;\n vm.reportSettings = reportSettings;\n vm.user = user;\n if (Object.keys(vm.reportSettings.commonSettings.activeTemplates).length < 1) {\n vm.reportSettings.commonSettings.activeTemplates = {\n cumulativeReport: true,\n comperativeReport: true,\n scoreReport: false,\n operationReport: false\n };\n }\n\n vm.cancel = function () {\n $mdDialog.cancel();\n }\n\n vm.ok = function () {\n var result = vm.reportSettings;\n $mdDialog.hide(result);\n }\n\n\n function init() {\n\n };\n init();\n\n }\n\n function ReportFormulaTableControlller($mdDialog, report, reportSettings, user, ReportService, api, toastService, $translate) {\n var vm = this;\n vm.report = report;\n vm.reportSettings = reportSettings;\n vm.user = user;\n vm.reportId = vm.report.id;\n console.log(vm.report)\n vm.formulTable = {\n fieldX: null,\n fieldY: null,\n fieldHierarchy: {},\n connectedFieldValues: []\n }\n vm.formulTableXFieldValue = null;\n vm.formulTableXFieldValues = [];\n vm.formulTableXDefaultField = null;\n vm.formulTableXFieldConnectedFields = [];\n vm.formulTableYFieldValue = null;\n vm.fieldHierarchyXField = null;\n vm.fieldHierarchyYField = null;\n vm.stringReportFields = [];\n vm.categoryReportFields = [];\n vm.report.reportFields.forEach(function (reportField) {\n if (ReportService.isThisFieldType(300, reportField.fieldType)) vm.categoryReportFields.push(reportField);\n if (ReportService.isTextNominal(reportField.fieldType)) vm.stringReportFields.push(reportField);\n })\n vm.numericReportFields = vm.report.reportFields.filter(function (f) {\n return ReportService.isNumericNominal(f.fieldType);\n });\n\n vm.addFieldHierarchy = function () {\n vm.formulTable.fieldHierarchy[vm.fieldHierarchyXField] = vm.fieldHierarchyYField;\n }\n\n vm.getFieldHierarchyFieldTitle = function (key) {\n var reportField = vm.report.reportFields.filter(function (k) {\n return k.fieldName == key;\n })\n return reportField.length > 0 ? reportField[0].fieldTitle : \"\";\n }\n\n vm.deleteFieldHierarchy = function (key) {\n delete vm.formulTable.fieldHierarchy[key];\n }\n\n vm.deleteConnectedFieldValues = function (connectedFieldValues) {\n vm.formulTable.connectedFieldValues = vm.formulTable.connectedFieldValues.filter(function (k) {\n return k.fieldXValue != connectedFieldValues.fieldXValue;\n })\n }\n\n vm.selectFormulTableXFieldValue = function () {\n vm.formulTableConnectedValue = vm.formulTable.connectedFieldValues.filter(function (k) { return k.fieldXValue == vm.formulTableXFieldValue });\n vm.formulTableXFieldConnectedFields = vm.formulTableConnectedValue.length > 0 ? vm.formulTableConnectedValue[0].fieldXConnectedFields : [];\n if (vm.formulTableConnectedValue.length == 0) {\n vm.formulTable.connectedFieldValues.push({\n fieldXValue: vm.formulTableXFieldValue,\n defaultXField: null,\n fieldXConnectedFields: []\n })\n vm.formulTableXDefaultField = null;\n vm.formulTableXFieldConnectedFields = [];\n } else {\n vm.formulTableXDefaultField = vm.formulTableConnectedValue[0].defaultXField;\n vm.formulTableXFieldConnectedFields = vm.formulTableConnectedValue[0].fieldXConnectedFields\n }\n }\n\n vm.selectFormulTableXField = function () {\n vm.formulTableXFieldValue = null;\n var request = {\n reportId: vm.reportId,\n fieldName: vm.formulTable.fieldX\n }\n api.report.reportFieldsCategoryValues(request)\n .then(function (response) {\n if (response) {\n response = response.filter(function (k) {\n return k.count > 0;\n })\n }\n vm.formulTableXFieldValues = response;\n },\n function (response) {\n $log.error(response);\n });\n }\n\n vm.selectFormulTableXDefaultField = function () {\n vm.formulTableConnectedValue = vm.formulTable.connectedFieldValues.filter(function (k) { return k.fieldXValue == vm.formulTableXFieldValue })[0];\n vm.formulTableConnectedValue.defaultXField = vm.formulTableXDefaultField;\n }\n\n vm.selectFormulTableXFieldConnectedFields = function () {\n vm.formulTableConnectedValue = vm.formulTable.connectedFieldValues.filter(function (k) { return k.fieldXValue == vm.formulTableXFieldValue })[0];\n vm.formulTableConnectedValue.fieldXConnectedFields = vm.formulTableXFieldConnectedFields;\n }\n\n vm.saveFormulTableSettings = function () {\n vm.formulTable.connectedFieldValues = vm.formulTable.connectedFieldValues.filter(function (k) {\n return (k.defaultXField != null && k.fieldXConnectedFields.length > 0);\n })\n //if (vm.formulTable.fieldX && vm.formulTable.fieldY && vm.formulTable.fieldYNickname && vm.formulTable.connectedFieldValues.length > 0) {\n api.settings.saveFormulaTableSettings(vm.formulTable, vm.reportId)\n .then(function (response) {\n toastService.serverError($translate.instant('REPORT.SETTINGS.SAVE_COMPLETED'));\n //findFormulaTableValues();\n $mdDialog.hide();\n },\n function (response) {\n $log.error(response);\n });\n\n }\n\n function findFormulaTableValues() {\n api.settings.findFormulaTableSettings(vm.reportId)\n .then(function (response) {\n if (response != \"\") {\n vm.formulTable = JSON.parse(JSON.stringify(response));\n if (vm.formulTable.fieldX) vm.selectFormulTableXField();\n }\n },\n function (response) {\n $log.error(response);\n });\n }\n\n vm.cancel = function () {\n $mdDialog.cancel();\n }\n\n vm.ok = function () {\n var result = vm.reportSettings;\n $mdDialog.hide(result);\n }\n\n\n function init() {\n findFormulaTableValues();\n };\n init();\n }\n\n function FilterCategoriesControlller($mdDialog, report, reportSettings, user, ReportService, api, toastService, $translate) {\n var vm = this;\n vm.report = report;\n vm.reportSettings = reportSettings;\n vm.user = user;\n vm.searchCategories = searchCategories;\n vm.categories = vm.report.moduleCategories;\n vm.aliasSearchCategoryName = \"\";\n vm.cancel = function () {\n $mdDialog.cancel();\n }\n vm.selectedCategory = null;\n vm.filterCategoryIds = vm.reportSettings.commonSettings.filteredCategoryIds ? vm.reportSettings.commonSettings.filteredCategoryIds : [];\n\n function createFilter(query) {\n var lowercaseQuery = query.toLocaleLowerCase('tr-TR');\n return function filterFn(category) {\n return (category.name.toLocaleLowerCase('tr-TR').indexOf(lowercaseQuery) != -1);\n };\n }\n\n function searchCategories(query) {\n var results = query ? vm.categories.filter(createFilter(query)) : vm.categories;\n return results;\n }\n\n vm.selectedCategoryChange = function (item) {\n //console.log(item)\n }\n\n vm.addFilterCategory = function () {\n if (vm.selectedCategory != null && !vm.filterCategoryIds.includes(vm.selectedCategory.id)) {\n vm.filterCategoryIds.push(vm.selectedCategory.id);\n }\n }\n\n vm.removeFilterCategory = function (id) {\n vm.filterCategoryIds = vm.filterCategoryIds.filter(function (k) {\n return k != id;\n })\n }\n\n vm.getCategoryText = function (id) {\n var category = vm.categories.filter(function (k) { return k.id == id })[0];\n if (category) {\n if (category.parent) {\n var parent = vm.categories.filter(function (k) { return k.id == category.parent })[0];\n return parent ? parent.name + \" -> \" + category.name : \"- ->\" + category.name;\n } else {\n return category.name;\n }\n }\n return \"-\";\n }\n\n vm.saveReportSettings = function () {\n vm.saveReportSettingsLoading = true;\n vm.reportSettings.commonSettings.filteredCategoryIds = vm.filterCategoryIds;\n api.settings.saveReportSettings(vm.reportSettings, report.id)\n .then(function (response) {\n vm.saveReportSettingsLoading = false;\n vm.ok();\n },\n function (response) {\n vm.saveReportSettingsLoading = false;\n deferred.resolve(false);\n $log.error(response);\n });\n }\n\n vm.ok = function () {\n var result = vm.reportSettings;\n $mdDialog.hide(result);\n }\n\n function init() {\n\n };\n init();\n }\n\n function AddDocumentTagControlller($mdDialog, report, reportSettings, user, ReportService, api, toastService, $translate) {\n var vm = this;\n vm.report = report;\n vm.reportSettings = reportSettings;\n vm.user = user;\n vm.cancel = function () {\n $mdDialog.cancel();\n }\n vm.tag = null;\n vm.tags = vm.reportSettings.commonSettings.defaultDocumentTags != null ? vm.reportSettings.commonSettings.defaultDocumentTags : [];\n\n vm.addTagToList = function () {\n if (!vm.tags.includes(vm.tag)) {\n vm.tags.push(vm.tag);\n }\n vm.tag = null;\n }\n\n vm.removeTag = function (tag) {\n vm.tags = vm.tags.filter(function (k) {\n return k != tag;\n });\n }\n\n vm.saveReportSettings = function () {\n vm.saveReportSettingsLoading = true;\n vm.reportSettings.commonSettings.defaultDocumentTags = vm.tags;\n api.settings.saveReportSettings(vm.reportSettings, report.id)\n .then(function (response) {\n vm.saveReportSettingsLoading = false;\n vm.ok();\n },\n function (response) {\n vm.saveReportSettingsLoading = false;\n deferred.resolve(false);\n $log.error(response);\n });\n }\n\n vm.ok = function () {\n var result = vm.reportSettings;\n $mdDialog.hide(result);\n }\n\n function init() {\n\n };\n init();\n }\n\n function AddPeriodFieldController($mdDialog, report, datePeriodSettings, user, api, reportFields) {\n var vm = this;\n vm.report = report;\n vm.reportFields = reportFields;\n console.log(vm.reportFields)\n vm.datePeriodSettings = datePeriodSettings;\n\n vm.saveDatePeriodSettings = function () {\n vm.saveDatePeriodSettingsLoading = true;\n\n api.settings.saveDatePeriodSettings(report.id, datePeriodSettings)\n .then(function (response) {\n vm.saveDatePeriodSettingsLoading = false;\n vm.ok();\n },\n function (response) {\n vm.saveDatePeriodSettingsLoading = false;\n $log.error(response);\n });\n }\n\n vm.removeDatePeriodSettings = function () {\n vm.saveDatePeriodSettingsLoading = true;\n\n api.settings.deleteDatePeriodSettings(report.id)\n .then(function (response) {\n vm.saveDatePeriodSettingsLoading = false;\n vm.ok();\n },\n function (response) {\n vm.saveDatePeriodSettingsLoading = false;\n $log.error(response);\n });\n }\n\n vm.ok = function () {\n var result = vm.reportSettings;\n $mdDialog.hide(result);\n }\n vm.cancel = function () {\n $mdDialog.cancel();\n }\n\n function init() {\n\n };\n init();\n }\n\n\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.report')\n .service('ReportHistoryService', ReportHistoryService)\n .controller('ReportHistoryController', ReportHistoryController);\n\n /** @ngInject */\n function ReportHistoryService($q, $log, $translate, $mdMedia, $mdDialog, api, $stateParams, NGAnnotation, user) {\n\n\n this.showDocumentHistory = function ($scope, $event, doc, report) {\n showReportHistoryDialog($scope, $event, doc, report)\n .then(function (answer) {\n if (!answer) return;\n })\n }\n\n function showReportHistoryDialog($scope, $event, doc, report) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'ReportHistoryController as vm',\n templateUrl: 'app/main/apps/reports/views/edit/report-document-history-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n doc: doc,\n report: report\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n }\n\n function ReportHistoryController(ReportHistoryService, $scope, $mdDialog, $q, $log, $mdToast, $translate, api, doc, report, NGAnnotation, user) {\n var vm = this;\n vm.report = report;\n vm.newNote = \"\";\n vm.document = doc;\n vm.audits = [];\n moment.locale('tr');\n vm.user = user;\n vm.annotations = [\n []\n ];\n\n function getCategoryTitle(cat) {\n var title = cat.name;\n if (cat.localVariables) {\n var localVariable = cat.localVariables.filter(function (k) { return $translate.use() == k.language; })[0];\n if (localVariable) title = localVariable.value;\n }\n return title;\n }\n\n function getReportDocumentAudits() {\n api.audits.getReportDocumentAudits(vm.document.id)\n .then(function (response) {\n response.forEach(function (item) {\n if (item.action == 'ADD_CATEGORY' || item.action == 'UPDATE_CATEGORY' || item.action == 'REMOVE_CATEGORY' || item.action == 'ADD_ASPECT_SENTIMENT' || item.action == 'REMOVE_ASPECT_SENTIMENT') {\n item.detail = JSON.parse(item.detail);\n }\n })\n vm.audits = response;\n vm.audits.sort(function (a, b) {\n a = new Date(a.createDate);\n b = new Date(b.createDate);\n return a > b ? -1 : a < b ? 1 : 0;\n })\n\n if(vm.document.categoriesD && vm.document.categoriesD.length > 0) {\n vm.audits.push({\n createdBy : $translate.instant('SHARED.AI'),\n action : 'SET_BY_AI',\n detail: { data : \n [ vm.document.categoriesD[0].categories.map(function(cat) {\n return getCategoryTitle(cat)\n }).join('->') ] },\n createDate : vm.document.createDate\n })\n }\n \n\n }, function (err) {\n $log.error(err);\n }) \n }\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n\n vm.showDetail = function ($event, item) {\n //ReportHistoryService.showDocumentHistoryDetail($scope, $event, doc, report, item)\n var tag = item.detail;\n vm.annotations[0] = [];\n var annotation = new NGAnnotation({\n startIndex: tag.startIndex,\n endIndex: tag.endIndex,\n text: vm.document.content.text.substring(tag.startIndex, tag.endIndex),\n colorcode: \"#FFFF99\",\n type: \"red\",\n sentiment: tag.sentiment,\n sentimentValue: tag.sentimentValue,\n reportId: vm.report.id,\n moduleId: tag.moduleId,\n moduleName: tag.moduleName,\n document: vm.document,\n userName: vm.user.userName,\n categories: vm.categories,\n closePopup: closed,\n data: {\n tags: []\n }\n });\n vm.annotations[0].push(annotation);\n }\n\n vm.setDate = function (date) {\n return moment(date).toDate().toLocaleString(\"tr-TR\", { timeZone: \"Europe/Istanbul\" });;\n }\n\n function init() {\n getReportDocumentAudits();\n }\n init();\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.report')\n .service('ReportDocumentService', ReportDocumentService)\n .controller('ReportWebContentDocumentDialogController', ReportWebContentDocumentDialogController);\n\n /** @ngInject */\n function ReportDocumentService($q, $log, $translate, $mdMedia, $mdDialog, $stateParams, api, user, $mdToast, $utils) {\n\n this.showReportWebContentDocument = function ($scope, $event, document, singleClassificationModule, categories, report) {\n var deferred = $q.defer();\n showWebContentDocumentDialog($scope, $event, document, singleClassificationModule, categories, report)\n .then(function (answer) {\n if (!answer) return deferred.resolve(answer);\n else\n deferred.resolve(answer);\n });\n return deferred.promise;\n }\n\n this.selectBasicMainCategory = function (item, categories) {\n if (!item.mainCategory) return;\n item.sub1Categories = categories.filter(function (k) { return k.parent == item.mainCategory.id; });\n item.sub1Category = null;\n item.searchSub1Category = null;\n item.sub2Categories = [];\n item.sub2Category = null;\n item.searchSub2Category = null;\n }\n\n this.selectBasicSub1Category = function (item, categories) {\n if (!item.sub1Category) return;\n item.sub2Categories = categories.filter(function (k) { return k.parent == item.sub1Category.id; })\n item.sub2Category = null;\n item.searchSub2Category = null;\n }\n\n this.addBasicCategory = function (item, module, report) {\n var reportId = report.id;\n var def = $q.defer();\n var addCategoryId = item.sub2Category ? item.sub2Category.id : item.sub1Category ? item.sub1Category.id : item.mainCategory ? item.mainCategory.id : null;\n if (!addCategoryId || !module) return;\n var body = {\n categoryRequest: {\n categoryIds: [addCategoryId]\n }\n }\n var sentiment = null;\n var sentimentValue = null;\n var sentimentRate = null;\n if (item.categories && item.categories.length > 0) {\n sentiment = item.categories[0].sentiment;\n sentimentValue = item.categories[0].sentimentValue;\n sentimentRate = item.categories[0].sentimentRate;\n }\n api.report.document.updateSingleModuleCategory(reportId, item.id, module.moduleId, body)\n .then(function () {\n $utils.googleAnalyticsSetAction(\"REPORT_DOCUMENT\", \"Add Single Category\", JSON.stringify(body))\n setUpdateAudit(item);\n setDraftAudit(item);\n handleReady(item, report.workspaceId);\n var aspect = {\n startIndex: 0,\n endIndex: item.content.endIndex,\n moduleName: module.name,\n moduleId: module.moduleId,\n sentiment: sentiment,\n sentimentValue: sentimentValue,\n sentimentRate: sentimentRate,\n categories: generateCategories(item)\n }\n item[\"categories\"] = item[\"categories\"] ? item[\"categories\"].filter(function (m) { return m.moduleId != module.moduleId }) : [];\n item.categories.push(aspect);\n item.isBasicCategoryAdded = true;\n def.resolve(true);\n }, function (err) {\n var lang = $translate.use();\n var text = \"Döküman Başkası Tarafından Kullanılıyor.\";\n if (lang == \"en\") {\n text = \"Document is being used by another user.\";\n }\n var toast = $mdToast.simple()\n .textContent(text)\n .action('OK')\n .position('center center');\n\n $mdToast.show(toast);\n\n console.log(err);\n def.resolve(false);\n })\n\n return def.promise;\n }\n\n function setReadyAudit(doc) {\n doc[\"isReady\"] = true;\n doc[\"readyBy\"] = user.userName;\n doc[\"readyDate\"] = new Date();\n }\n\n function setPendingAudit(doc) {\n doc[\"isReady\"] = false;\n doc[\"readyBy\"] = null;\n doc[\"readyDate\"] = null;\n doc[\"isPending\"] = true;\n doc[\"pendingBy\"] = user.userName;\n doc[\"pendingDate\"] = new Date();\n }\n\n function setDraftAudit(doc) {\n doc[\"draftedBy\"] = user.userName;\n doc[\"draftedDate\"] = new Date();\n doc[\"isDrafted\"] = true;\n doc[\"draftedByName\"] = user.name;\n }\n\n function setUpdateAudit(doc) {\n doc[\"updateDate\"] = new Date();\n doc[\"updatedBy\"] = user.userName;\n doc[\"isUpdated\"] = true;\n }\n\n function handleReady(item,reportWorkspaceId) {\n var readyPermission = false;\n var permissions = user.permissions.filter(function (k) {\n return k.workspaceId == reportWorkspaceId\n })[0].permissions;\n if (permissions.includes('REPORT/DATA/READY')) {\n readyPermission = true;\n }\n if (readyPermission) {\n setReadyAudit(item);\n } else {\n setPendingAudit(item);\n }\n }\n\n function generateCategories(item) {\n var cats = [];\n if (item.mainCategory && item.mainCategory.id) {\n cats.push({\n name: item.mainCategory.name,\n id: item.mainCategory.id\n });\n }\n if (item.mainCategory && item.mainCategory.id && item.sub1Category && item.sub1Category.id) {\n cats.push({\n name: item.sub1Category.name,\n id: item.sub1Category.id\n });\n }\n if (item.mainCategory && item.mainCategory.id && item.sub1Category && item.sub1Category.id && item.sub2Category && item.sub2Category.id) {\n cats.push({\n name: item.sub2Category.name,\n id: item.sub2Category.id\n });\n }\n return cats;\n }\n\n function showWebContentDocumentDialog($scope, $event, document, singleClassificationModule, categories, report) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'ReportWebContentDocumentDialogController as vm',\n templateUrl: 'app/main/apps/reports/views/data/web-content-document-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: false,\n fullscreen: useFullScreen,\n locals: {\n document: document,\n singleClassificationModule: singleClassificationModule,\n categories: categories,\n report: report\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function (answer) {\n deferred.resolve(answer);\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n }\n }\n\n\n function ReportWebContentDocumentDialogController($mdDialog, $translate, document, singleClassificationModule, categories, report, ReportDocumentService, user, api, $utils) {\n var vm = this;\n vm.document = document;\n vm.singleClassificationModule = singleClassificationModule;\n vm.categories = categories;\n vm.report = report;\n vm.user = user;\n init();\n\n vm.getHeader = function (title) {\n var header = $translate.instant('REPORT.WEB_CONTENT.' + title.toUpperCase())\n return header || title;\n }\n\n vm.selectBasicMainCategory = function (item) {\n ReportDocumentService.selectBasicMainCategory(item, vm.categories);\n }\n\n vm.selectBasicSub1Category = function (item) {\n ReportDocumentService.selectBasicSub1Category(item, vm.categories);\n }\n\n vm.addBasicCategory = function (item) {\n vm.addProcessing = true;\n ReportDocumentService.addBasicCategory(item, vm.singleClassificationModule, vm.report)\n .then(function (response) {\n item.dashboardCategories = item.categories.filter(function (k) { return k.moduleId == vm.singleClassificationModule.moduleId })[0];\n vm.addProcessing = false;\n }, function (err) {\n vm.addProcessing = false;\n console.log(err);\n })\n }\n\n vm.mainCategorySearch = function (query, item) {\n var results = query ? item.mainCategories.filter(createFilterFor(query)) : item.mainCategories;\n return results;\n }\n\n vm.sub1CategorySearch = function (query, item) {\n var results = query ? item.sub1Categories.filter(createFilterFor(query)) : item.sub1Categories;\n return results;\n }\n\n vm.sub2CategorySearch = function (query, item) {\n var results = query ? item.sub2Categories.filter(createFilterFor(query)) : item.sub2Categories;\n return results;\n }\n\n function createFilterFor(query) {\n var lowercaseQuery = angular.lowercase(query);\n return function filterFn(item) {\n return (angular.lowercase(item.name).indexOf(lowercaseQuery) === 0);\n };\n }\n\n vm.getCategoryTitle = function (cat) {\n var title = cat.name;\n var category = vm.categories.filter(function (k) { return k.id == cat.id; })[0];\n if (category && category.localVariables) {\n var localVariable = category.localVariables.filter(function (k) { return $translate.use() == k.language; })[0];\n if (localVariable) title = localVariable.value;\n }\n return title;\n }\n\n vm.handleReadyButton = function handleReadyButton(item) {\n var readyPermission = false;\n var permissions = vm.user.permissions.filter(function (k) {\n return k.workspaceId == vm.report.workspaceId\n })[0].permissions;\n if (permissions.includes('REPORT/DATA/READY')) {\n readyPermission = true;\n }\n if (readyPermission) {\n if (item.isReady) {\n unReadyDocument(item);\n } else {\n readyDocument(item, readyPermission);\n }\n } else {\n if (item.isPending || item.isReady) {\n item[\"isPending\"] = false;\n item[\"pendingBy\"] = null;\n item[\"pendingDate\"] = null;\n unReadyDocument(item);\n } else {\n readyDocument(item, readyPermission);\n }\n }\n }\n\n function readyDocument(doc, readyPermission) {\n api.report.document.ready(vm.report.id, doc.id)\n .then(function () {\n $utils.googleAnalyticsSetAction(\"REPORT_DOCUMENT\", \"Ready\", doc.id)\n if (readyPermission) {\n doc[\"isReady\"] = true;\n doc[\"readyBy\"] = vm.user.userName;\n doc[\"readyDate\"] = new Date();\n } else {\n doc[\"isReady\"] = false;\n doc[\"readyBy\"] = null;\n doc[\"readyDate\"] = null;\n doc[\"isPending\"] = true;\n doc[\"pendingBy\"] = vm.user.userName;\n doc[\"pendingDate\"] = new Date();\n }\n doc[\"isIgnored\"] = null;\n doc[\"ignoredBy\"] = null;\n doc[\"ignoredDate\"] = null;\n }, function (err) {\n $log.error(err);\n })\n }\n\n function unReadyDocument(doc) {\n api.report.document.unready(vm.report.id, doc.id)\n .then(function () {\n $utils.googleAnalyticsSetAction(\"REPORT_DOCUMENT\", \"Un Ready\", doc.id)\n doc[\"isReady\"] = false;\n doc[\"readyBy\"] = null;\n doc[\"readyDate\"] = null;\n }, function (err) {\n $log.error(err);\n })\n }\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n\n function init() {\n\n }\n\n vm.colors = [\n [\"#1f77b4\", \"#fff\"],\n [\"#aec7e8\", \"#000\"],\n [\"#ff7f0e\", \"#000\"],\n [\"#ffbb78\", \"#000\"],\n [\"#2ca02c\", \"#fff\"],\n [\"#98df8a\", \"#000\"],\n [\"#d62728\", \"#fff\"],\n [\"#ff9896\", \"#000\"],\n [\"#9467bd\", \"#000\"],\n [\"#c5b0d5\", \"#000\"],\n [\"#8c564b\", \"#fff\"],\n [\"#c49c94\", \"#000\"],\n [\"#e377c2\", \"#000\"],\n [\"#f7b6d2\", \"#000\"],\n [\"#7f7f7f\", \"#fff\"],\n [\"#c7c7c7\", \"#000\"],\n [\"#bcbd22\", \"#000\"],\n [\"#dbdb8d\", \"#000\"],\n [\"#17becf\", \"#000\"],\n [\"#9edae5\", \"#000\"]\n ];\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.report')\n .service('ReportDataOrganizationService', ReportDataOrganizationService)\n .controller('BasicReplaceDialogController', BasicReplaceDialogController)\n .controller('EditReportFieldDialogController', EditReportFieldDialogController)\n .controller('BasicDialogController', BasicDialogController)\n\n function ReportDataOrganizationService($q, $log, $translate, $mdMedia, $mdDialog, api, $stateParams) {\n\n this.replaceCategoryValue = function ($scope, $state, $event, controlResponse) {\n var confirmTitle = $translate.instant('REPORT.CONFIRM.REPLACE_REPORT_FIELD_VALUE_TITLE');\n var confirmBody = $translate.instant('REPORT.CONFIRM.REPLACE_REPORT_FIELD_VALUE_WITH_COUNT_BODY', {\n count: controlResponse.replaceableCount,\n oldValue: controlResponse.fields[0].oldFieldValue,\n newValue: controlResponse.fields[0].newFieldValue\n });\n\n var successTitle = $translate.instant('REPORT.CONFIRM.REPLACE_REPORT_FIELD_VALUE_SUCCESS_TITLE');\n var successBody = $translate.instant('REPORT.CONFIRM.REPLACE_REPORT_FIELD_VALUE_WITH_COUNT_SUCCESS_BODY', {\n count: controlResponse.replaceableCount,\n oldValue: controlResponse.fields[0].oldFieldValue,\n newValue: controlResponse.fields[0].newFieldValue\n });\n var deferred = $q.defer();\n showConfirmDialog($scope, $event, confirmTitle, confirmBody, 1)\n .then(function (answer) {\n if (!answer)\n deferred.resolve(answer);\n else {\n controlResponse.replaceable = true;\n api.report.changeReportFieldCategoryValue(controlResponse)\n .then(function (response) {\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function (answer) {\n deferred.resolve(answer);\n });\n },\n function (response) {\n deferred.resolve(false);\n $log.error(response);\n });\n }\n });\n return deferred.promise;\n };\n\n this.deleteReportField = function ($scope, $state, $event, reportField) {\n var confirmTitle = $translate.instant('REPORT.CONFIRM.DELETE_REPORT_FIELD_TITLE', {\n name: reportField.fieldTitle\n });\n var confirmBody = $translate.instant('REPORT.CONFIRM.DELETE_REPORT_FIELD_BODY', {\n name: reportField.fieldTitle\n });\n\n var successTitle = $translate.instant('REPORT.CONFIRM.DELETE_REPORT_FIELD_SUCCESS_TITLE', {\n name: reportField.fieldTitle\n });\n var successBody = $translate.instant('REPORT.CONFIRM.DELETE_REPORT_FIELD_SUCCESS_BODY', {\n name: reportField.fieldTitle\n });\n var deferred = $q.defer();\n showConfirmDialog($scope, $event, confirmTitle, confirmBody, 2)\n .then(function (answer) {\n if (!answer)\n deferred.resolve(answer);\n else {\n api.reportv2.reportField.deleteReportField(reportField.reportId,reportField.id,reportField)\n .then(function (response) {\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function (answer) {\n deferred.resolve(answer);\n });\n },\n function (response) {\n deferred.resolve(false);\n $log.error(response);\n });\n }\n });\n return deferred.promise;\n };\n\n this.updateReportField = function ($scope, $state, $event, reportField, type, reportId, documentNickname) {\n var confirmTitle = $translate.instant('REPORT.CONFIRM.UPDATE_REPORT_FIELD_TITLE', {\n name: reportField.fieldTitle\n });\n var confirmBody = $translate.instant('REPORT.CONFIRM.UPDATE_REPORT_FIELD_BODY', {\n name: reportField.fieldTitle\n });\n\n var successTitle = $translate.instant('REPORT.CONFIRM.UPDATE_REPORT_FIELD_SUCCESS_TITLE', {\n name: reportField.fieldTitle\n });\n var successBody = $translate.instant('REPORT.CONFIRM.UPDATE_REPORT_FIELD_SUCCESS_BODY', {\n name: reportField.fieldTitle\n });\n var deferred = $q.defer();\n showReportFieldDialog($scope, $event, confirmTitle, confirmBody, successTitle, successBody, type, reportField, reportId, documentNickname)\n .then(function (result) {\n if (!result || !result.answer)\n deferred.resolve(result.answer);\n else {\n var successTitle = $translate.instant('REPORT.CONFIRM.UPDATE_REPORT_FIELD_SUCCESS_TITLE', {\n name: result.reportField.fieldTitle\n });\n var successBody = $translate.instant('REPORT.CONFIRM.UPDATE_REPORT_FIELD_SUCCESS_BODY', {\n name: result.reportField.fieldTitle\n });\n if (result.reportField.id) {\n api.reportv2.reportField.updateReportField(reportId,result.reportField.id,result.reportField)\n .then(function (response) {\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function (answer) {\n if(answer){\n deferred.resolve(response);\n }\n });\n },\n function (response) {\n deferred.resolve(false);\n $log.error(response);\n });\n }else{\n api.reportv2.reportField.saveReportField(reportId,result.reportField)\n .then(function (response) {\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function (answer) {\n if(answer){\n deferred.resolve(response);\n }\n });\n },\n function (response) {\n deferred.resolve(false);\n $log.error(response);\n });\n }\n \n }\n });\n return deferred.promise;\n };\n\n this.mapReportField = function ($scope, $state, $event, mappingReportFields) {\n var confirmTitle = $translate.instant('REPORT.DATA_ORGANIZATION.MAP_REPORT_FIELD_TITLE');\n var confirmBody = $translate.instant('REPORT.DATA_ORGANIZATION.MAP_REPORT_FIELD_BODY');\n\n var successTitle = $translate.instant('REPORT.DATA_ORGANIZATION.MAP_REPORT_FIELD_SUCCESS_TITLE');\n var successBody = $translate.instant('REPORT.DATA_ORGANIZATION.MAP_REPORT_FIELD_SUCCESS_BODY');\n var deferred = $q.defer();\n showMappingReportFieldConfirmDialog($scope, $event, confirmTitle, confirmBody, mappingReportFields)\n .then(function (answer) {\n if (!answer)\n deferred.resolve(answer);\n else {\n api.report.mapReportFields(mappingReportFields)\n .then(function (response) {\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function (answer) {\n deferred.resolve(answer);\n });\n },\n function (response) {\n deferred.resolve(false);\n $log.error(response);\n });\n }\n });\n return deferred.promise;\n };\n\n this.deleteCategoryValue = function ($scope, $state, $event, controlResponse) {\n var confirmTitle = $translate.instant('REPORT.CONFIRM.REPLACE_REPORT_FIELD_VALUE_TITLE');\n var confirmBody = $translate.instant('REPORT.CONFIRM.DELETE_REPORT_FIELD_VALUE_WITH_COUNT_BODY', {\n count: controlResponse.deletableCount,\n oldValue: controlResponse.fields[0].oldFieldValue\n });\n\n var successTitle = $translate.instant('REPORT.CONFIRM.REPLACE_REPORT_FIELD_VALUE_SUCCESS_TITLE');\n var successBody = $translate.instant('REPORT.CONFIRM.DELETE_REPORT_FIELD_VALUE_WITH_COUNT_SUCCESS_BODY', {\n count: controlResponse.deletableCount,\n oldValue: controlResponse.fields[0].oldFieldValue\n });\n var deferred = $q.defer();\n showConfirmDialog($scope, $event, confirmTitle, confirmBody, 2)\n .then(function (answer) {\n if (!answer)\n deferred.resolve(answer);\n else {\n controlResponse.replaceable = true;\n api.report.changeReportFieldCategoryValue(controlResponse)\n .then(function (response) {\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function (answer) {\n deferred.resolve(answer);\n });\n },\n function (response) {\n deferred.resolve(false);\n $log.error(response);\n });\n }\n });\n return deferred.promise;\n }\n\n function showReportFieldDialog($scope, $event, askTitle, askBody, successTitle, successBody, type, reportField, reportId, documentNickname) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'EditReportFieldDialogController as vm',\n templateUrl: 'app/main/apps/reports/views/create/edit-report-field-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n askTitle: askTitle,\n askBody: askBody,\n successTitle: successTitle,\n successBody: successBody,\n reportField: reportField,\n type: type,\n reportId: reportId,\n documentNickname: documentNickname\n }\n })\n .then(function (result) {\n deferred.resolve(result);\n }, function () {\n deferred.resolve(false);\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n\n function showConfirmDialog($scope, $event, title, body, type) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'BasicReplaceDialogController as vm',\n templateUrl: type == 1 ? 'app/main/apps/reports/services/basic-replace-confirm-dialog.html' : 'app/main/apps/reports/services/basic-delete-confirm-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function () {\n deferred.resolve(false);\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showMappingReportFieldConfirmDialog($scope, $event, title, body, mappingReportFields) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'BasicDialogController as vm',\n templateUrl: 'app/main/apps/reports/services/basic-confirm-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function () {\n deferred.resolve(false);\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showSuccessDialog($scope, $event, title, body) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'BasicDialogController as vm',\n templateUrl: 'app/main/apps/modules/services/basic-success-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body\n }\n })\n .then(function (answer) {\n deferred.resolve(true);\n }, function (answer) {\n deferred.resolve(true);\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n \n }\n\n\n function BasicDialogController($mdDialog, title, body) {\n var vm = this;\n vm.title = title;\n vm.body = body;\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n }\n\n function BasicReplaceDialogController($mdDialog, title, body) {\n var vm = this;\n vm.title = title;\n vm.body = body;\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n }\n\n\n function EditReportFieldDialogController($mdDialog, reportField, type, reportId, ReportService, documentNickname) {\n var vm = this;\n console.log(reportField)\n vm.type = type;\n vm.selectedColor = reportField && reportField.color ? reportField.color : \"#eae8e8\";\n vm.selectedFormulaValue = 7;\n vm.documentNickname = documentNickname;\n if (vm.type == 2) { \n vm.reportField = reportField;\n vm.reportField.filterable = true;\n vm.reportField.color = vm.reportField.color ? vm.reportField.color : \"#eae8e8\";\n if (ReportService.isThisFieldSubType(310, vm.reportField.fieldType)) {\n vm.reportField.fieldType = vm.reportField.fieldType - 10;\n vm.reportField.filterable = false;\n }\n }\n else {\n vm.reportField = {\n fieldTitle:null,\n fieldName:null,\n fieldType:null,\n reportId:reportId,\n isActive:1,\n dashboardField:0,\n horizontalComparisionField:0,\n verticalComparisionField: 0,\n userFilterField: 0,\n filterable: true,\n color: \"#eae8e8\",\n url:null\n }\n }\n\n vm.selectFormulaValue = function(){\n if (vm.selectedFormulaValue == 1) {\n vm.reportField.formula = \"AVG()\"\n } else if (vm.selectedFormulaValue == 2) {\n vm.reportField.formula = \"SUM()\"\n } else if (vm.selectedFormulaValue == 3) {\n vm.reportField.formula = \"COUNT()\"\n } else if (vm.selectedFormulaValue == 4) {\n vm.reportField.formula = \"(COUNT(5)+COUNT(4)*80/100+COUNT(3)*60/100+COUNT(2)*40/100+COUNT(1)*20/100)/COUNT([1-5])*100\"\n } else if (vm.selectedFormulaValue == 5) {\n vm.reportField.formula = \"(COUNT(5)-COUNT(3)-COUNT(2)-COUNT(1))/COUNT([1-5])*100\"\n } else if (vm.selectedFormulaValue == 6) {\n vm.reportField.formula = \"AVG([1-5])\"\n } else {\n vm.reportField.formula = \"\"\n }\n }\n\n vm.isThisFieldType = function (mainType, currentType) {\n return ReportService.isThisFieldType(mainType, currentType);\n }\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n\n vm.ok = function () {\n var result = {\n reportField:vm.reportField,\n answer:true\n }\n if (vm.isThisFieldType(300, vm.reportField.fieldType) && !vm.reportField.filterable) result.reportField.fieldType = result.reportField.fieldType + 10;\n $mdDialog.hide(result);\n };\n\n function findFormulaValue() {\n switch (vm.reportField.formula) {\n case \"AVG()\":\n vm.selectedFormulaValue = 1;\n break;\n case \"SUM()\":\n vm.selectedFormulaValue = 2;\n break;\n case \"COUNT()\":\n vm.selectedFormulaValue = 3;\n break;\n case \"(COUNT(5)+COUNT(4)*80/100+COUNT(3)*60/100+COUNT(2)*40/100+COUNT(1)*20/100)/COUNT([1-5])*100\":\n vm.selectedFormulaValue = 4;\n break;\n case \"(COUNT(5)-COUNT(3)-COUNT(2)-COUNT(1))/COUNT([1-5])*100\":\n vm.selectedFormulaValue = 5;\n break;\n case \"AVG([1-5])\":\n vm.selectedFormulaValue = 6;\n break;\n case undefined:\n vm.selectedFormulaValue = 1;\n break;\n default:\n vm.selectedFormulaValue = 7;\n }\n }\n\n function init() {\n findFormulaValue();\n }\n init();\n }\n\n})();\n\n(function () {\n 'use strict';\n angular\n .module('app.report')\n .directive('standartnormalcurve', standartNormalCurve);\n\n am4core.useTheme(am4themes_animated);\n /** @ngInject */\n function standartNormalCurve($state, ReportService, $q) {\n var chart;\n return {\n restrict: \"E\",\n scope: {\n chartId: '@',\n data: '=',\n refresh: '='\n },\n template: '
',\n replace: true,\n link: function ($scope, element, attrs) {\n // $scope.$watch('data', function () {\n $scope.$watch(function () {\n return $scope.data;\n }, function (newValue, oldValue) {\n if (!angular.equals(oldValue, newValue)) {\n //chart.dispose();\n chart = drawChart();\n }\n else if ($scope.data) {\n chart = drawChart();\n }\n }, true);\n\n $scope.$watch(function () {\n return $scope.refresh;\n }, function (newValue, oldValue) {\n if (newValue) {\n //chart.dispose();\n chart = drawChart();\n $scope.refresh = false;\n }\n }, true);\n\n //drawChart();\n\n function drawChart() {\n var chart = am4core.create(element.context, am4charts.XYChart);\n chart.logo.disabled = true;\n \n var values = [];\n var data = $scope.data;\n if (!data.data || !data.data[data.value]) return;\n Object.keys(data.data[data.value]).forEach(function (key) {\n values.push(data.data[data.value][key].value);\n });\n var max = Math.max.apply(null, values);\n var min = Math.min.apply(null, values);\n var mean = getMean(values);\n var sd = getSD(values);\n chart.data = calculateChartData(max, min, mean, sd, values, data.data[data.value]);\n var dateAxis = chart.xAxes.push(new am4charts.ValueAxis());\n dateAxis.renderer.grid.template.location = 0;\n dateAxis.strictMinMax = true;\n\n var range2 = dateAxis.axisRanges.create();\n range2.value = mean;\n range2.grid.stroke = am4core.color(\"#396478\");\n range2.grid.strokeWidth = 3;\n range2.grid.strokeOpacity = 0.5;\n \n range2.label.text = \"Ortalama\";\n range2.label.fill = range2.grid.stroke;\n\n var valueAxis = chart.yAxes.push(new am4charts.ValueAxis());\n valueAxis.cursorTooltipEnabled = false;\n valueAxis.visible = false;\n // Create series\n var series = chart.series.push(new am4charts.LineSeries());\n series.dataFields.valueY = \"value\";\n series.dataFields.valueX = \"category\";\n series.strokeWidth = 2;\n series.yAxis = valueAxis;\n series.xAxis = dateAxis;\n series.tooltipText = \"{valueY}\";\n series.tooltip.pointerOrientation = \"vertical\";\n series.tooltip.background.cornerRadius = 20;\n series.tooltip.background.fillOpacity = 0.5;\n series.tooltip.label.padding(12, 12, 12, 12);\n\n\n\n var valueAxis2 = chart.yAxes.push(new am4charts.ValueAxis());\n valueAxis2.cursorTooltipEnabled = false;\n valueAxis2.syncWithAxis = valueAxis;\n valueAxis2.renderer.opposite = true;\n valueAxis2.visible = false;\n var series2 = chart.series.push(new am4charts.LineSeries());\n series2.dataFields.valueY = \"index\";\n series2.dataFields.valueX = \"value2\";\n series2.strokeWidth = 2;\n series2.strokeOpacity = 0;\n series2.yAxis = valueAxis2;\n series2.xAxis = dateAxis;\n series2.name = \"deneme\"\n if (data.isUserRestricted) {\n series2.tooltipText = \"{value2}\";\n } else {\n series2.tooltipText = \"{name}\\n{value2}\";\n }\n var circleBullet = series2.bullets.push(new am4charts.CircleBullet());\n circleBullet.circle.radius = 2;\n\n circleBullet.adapter.add(\"fill\", function (fill, target) {\n if (!target.dataItem) {\n return fill;\n }\n var values = target.dataItem.values;\n return values.valueX.value >= mean\n ? am4core.color(\"green\")\n : am4core.color(\"red\");\n });\n\n\n circleBullet.circle.fillOpacity = 0.5;\n circleBullet.circle.strokeOpacity = 0.5;\n circleBullet.propertyFields.disabled = \"disabled\";\n\n var secondCircle = circleBullet.createChild(am4core.Circle);\n secondCircle.radius = 2;\n secondCircle.fill = chart.colors.getIndex(8);\n \n\n circleBullet.events.on(\"inited\", function (event) {\n animateBullet(event.target.circle);\n })\n\n\n \n // Add scrollbar\n\n // Add cursor\n \n chart.cursor = new am4charts.XYCursor();\n chart.cursor.xAxis = dateAxis;\n chart.cursor.maxTooltipDistance = -1;\n chart.cursor.snapToSeries = series2;\n\n /*\n valueAxis2.renderer.grid.template.strokeOpacity = 0.07;\n dateAxis.renderer.grid.template.strokeOpacity = 0.07;\n valueAxis.renderer.grid.template.strokeOpacity = 0.07;\n*/\n\n valueAxis2.renderer.grid.template.disabled = true;\n //dateAxis.renderer.grid.template.disabled = true;\n valueAxis.renderer.grid.template.disabled = true;\n\n return chart;\n }\n\n\n function animateBullet(bullet) {\n \n if ($scope.data.resultData[$scope.data.value] && $scope.data.resultData[$scope.data.value][bullet.events.target.dataItem.dataContext.name] && Object.keys($scope.data.resultData[$scope.data.value]).length != Object.keys($scope.data.data[$scope.data.value]).length) {\n var animation = bullet.animate([{ property: \"scale\", from: 1, to: 10 }, { property: \"opacity\", from: 1, to: 0 }], 1000, am4core.ease.circleOut);\n animation.events.on(\"animationended\", function (event) {\n animateBullet(event.target.object);\n })\n }\n }\n\n function getMean(data) {\n return data.reduce(function (a, b) {\n return Number(a) + Number(b);\n }) / data.length;\n };\n\n function getSD(data) {\n var m = getMean(data);\n return Math.sqrt(data.reduce(function (sq, n) {\n return sq + Math.pow(n - m, 2);\n }, 0) / (data.length - 1));\n };\n\n //----------------------------------------------------------------------------------------------\n // Calculates a point Z(x), the Probability Density Function, on any normal curve. \n // This is the height of the point ON the normal curve.\n // For values on the Standard Normal Curve, call with Mean = 0, StdDev = 1.\n function NormalDensityZx(x, Mean, StdDev) {\n var a = x - Mean;\n return Math.exp(-(a * a) / (2 * StdDev * StdDev)) / (Math.sqrt(2 * Math.PI) * StdDev);\n }\n //----------------------------------------------------------------------------------------------\n // Calculates Q(x), the right tail area under the Standard Normal Curve. \n function StandardNormalQx(x) {\n if (x === 0) // no approximation necessary for 0\n return 0.50;\n\n var t1, t2, t3, t4, t5, qx;\n var negative = false;\n if (x < 0) {\n x = -x;\n negative = true;\n }\n t1 = 1 / (1 + (0.2316419 * x));\n t2 = t1 * t1;\n t3 = t2 * t1;\n t4 = t3 * t1;\n t5 = t4 * t1;\n qx = NormalDensityZx(x, 0, 1) * ((0.319381530 * t1) + (-0.356563782 * t2) +\n (1.781477937 * t3) + (-1.821255978 * t4) + (1.330274429 * t5));\n if (negative == true)\n qx = 1 - qx;\n return qx;\n }\n //----------------------------------------------------------------------------------------------\n // Calculates P(x), the left tail area under the Standard Normal Curve, which is 1 - Q(x). \n function StandardNormalPx(x) {\n return 1 - StandardNormalQx(x);\n }\n //----------------------------------------------------------------------------------------------\n // Calculates A(x), the area under the Standard Normal Curve between +x and -x. \n function StandardNormalAx(x) {\n return 1 - (2 * StandardNormalQx(Math.abs(x)));\n }\n //----------------------------------------------------------------------------------------------\n\n /**\n * Define values where to put vertical lines at\n */\n var verticals = [\n -1.4, -0.2, 1.2\n ];\n\n function calculateChartData(max, min, mean, sd, values, data) {\n var chartData = [];\n var minSideDistance = mean - min;\n var maxSideDistance = max - mean;\n var extraDistance = minSideDistance < maxSideDistance ? minSideDistance : maxSideDistance;\n max += extraDistance;\n min -= extraDistance;\n var curveForValue = extraDistance / 50;\n for (var i = min; i < max; i += curveForValue) {\n var dp = {\n category: i,\n value: NormalDensityZx(i, mean, sd)\n };\n if (verticals.indexOf(Math.round(i * 10) / 10) !== -1) {\n dp.vertical = dp.value;\n }\n chartData.push(dp);\n }\n data = shuffleProperties(data);\n\n Object.keys(data).forEach(function (key, index) {\n if (data[key]) {\n chartData.push({\n index: index,\n value2: data[key].value.toFixed(2),\n name: key,\n disabled: false\n })\n }\n });\n return chartData;\n }\n\n Array.prototype.shuffle = function () {\n for (var i = 0; i < this.length; i++) {\n var a = this[i];\n var b = Math.floor(Math.random() * this.length);\n this[i] = this[b];\n this[b] = a;\n }\n }\n\n function shuffleProperties(obj) {\n var new_obj = {};\n var keys = getKeys(obj);\n keys.shuffle();\n for (var key in keys) {\n if (key == \"shuffle\") continue; // skip our prototype method\n new_obj[keys[key]] = obj[keys[key]];\n }\n return new_obj;\n }\n\n function getKeys(obj) {\n var arr = new Array();\n for (var key in obj)\n arr.push(key);\n return arr;\n }\n\n\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('app.report')\n .directive('stackedbarchart', StackedBarChartDirective);\n\n am4core.useTheme(am4themes_animated);\n /** @ngInject */\n function StackedBarChartDirective($stateParams, $translate) {\n var chart = {};\n return {\n restrict: \"E\",\n scope: {\n chartId: '@',\n data: '=',\n refresh: '='\n },\n template: '
',\n replace: true,\n link: function ($scope, element, attrs) {\n // $scope.$watch('data', function () {\n $scope.$watch(function () {\n return $scope.data;\n }, function (newValue, oldValue) {\n if (!angular.equals(oldValue, newValue)) {\n chart[element.context.id].dispose();\n chart[element.context.id] = drawChart();\n }\n else if ($scope.data) {\n if (chart[element.context.id]) chart[element.context.id].dispose();\n chart[element.context.id] = drawChart();\n }\n }, true);\n\n $scope.$watch(function () {\n return $scope.refresh;\n }, function (newValue, oldValue) {\n if (newValue) {\n chart[element.context.id].dispose();\n chart[element.context.id] = drawChart();\n //$scope.refresh = false;\n }\n if (chart) chart[element.context.id].dispose();\n chart[element.context.id] = drawChart();\n }, true);\n\n function drawChart() {\n var chart = am4core.create(element.context, am4charts.XYChart);\n chart.language.locale = am4lang_tr_TR;\n chart.logo.disabled = true;\n chart.data = $scope.data.data;\n\n // Create axes\n var categoryAxis = chart.xAxes.push(new am4charts.CategoryAxis());\n categoryAxis.dataFields.category = \"key\";\n categoryAxis.renderer.grid.template.location = 0;\n var label = categoryAxis.renderer.labels.template;\n label.wrap = true;\n label.maxWidth = 150;\n //categoryAxis.renderer.minGridDistance = 30;\n \n \n //label.tooltipText = \"{category}\";\n \n categoryAxis.events.on(\"sizechanged\", function (ev) {\n var axis = ev.target;\n var cellWidth = axis.pixelWidth / (axis.endIndex - axis.startIndex);\n if (cellWidth < axis.renderer.labels.template.maxWidth) {\n //axis.renderer.labels.template.rotation = -45;\n //axis.renderer.labels.template.horizontalCenter = \"right\";\n //axis.renderer.labels.template.verticalCenter = \"middle\";\n }\n else {\n categoryAxis.renderer.labels.template.wrap = false;\n //axis.renderer.labels.template.rotation = 0;\n //axis.renderer.labels.template.horizontalCenter = \"middle\";\n //axis.renderer.labels.template.verticalCenter = \"top\";\n }\n });\n\n var valueAxis = chart.yAxes.push(new am4charts.ValueAxis());\n valueAxis.tooltip.disabled = true;\n\n for (var i = 0; i < $scope.data.uniqueKeys.length; i++) {\n var series = chart.series.push(new am4charts.ColumnSeries());\n series.dataFields.categoryX = \"key\";\n series.name = $scope.data.uniqueKeys[i].name;\n series.dataFields.valueY = $scope.data.uniqueKeys[i].name;\n series.stacked = true;\n series.sequencedInterpolation = true;\n series.columns.template.width = am4core.percent(60);\n series.columns.template.tooltipText = \"[bold]{name}[/][font-size:14px]: {valueY}\";\n series.cursorTooltipEnabled = false;\n series.columns.template.fill = am4core.color($scope.data.uniqueKeys[i].color);\n // Add label\n var labelBullet = series.bullets.push(new am4charts.LabelBullet());\n labelBullet.label.text = \"{valueY}\";\n labelBullet.locationY = 0.5;\n labelBullet.label.hideOversized = true;\n }\n /* Create a cursor */\n chart.cursor = new am4charts.XYCursor();\n\n return chart;\n }\n\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('app.report')\n .directive('stackhorizontalsentimentchart', SentimentCategoryChartDirective);\n\n am4core.useTheme(am4themes_animated);\n /** @ngInject */\n function SentimentCategoryChartDirective($translate) {\n var chart;\n return {\n restrict: \"E\",\n scope:\n {\n chartId: '@',\n data: '=',\n visibility:'=',\n refresh: '=',\n barclick: '&'\n },\n template: '
',\n replace: true,\n link: function ($scope, element, attrs) {\n $scope.$watch(function () {\n return $scope.data;\n }, function (newValue, oldValue) {\n if (!angular.equals(oldValue, newValue)) {\n chart.dispose();\n chart = drawChart();\n }\n else if ($scope.data) {\n chart = drawChart();\n }\n }, true);\n\n $scope.$watch(function () {\n return $scope.visibility;\n }, function (newValue, oldValue) {\n if (!angular.equals(oldValue, newValue)) {\n chart.dispose();\n chart = drawChart();\n }\n }, true);\n\n\n $scope.$watch(function () {\n return $scope.refresh;\n }, function (newValue, oldValue) {\n if (newValue) {\n chart.dispose();\n chart = drawChart();\n $scope.refresh = false;\n }\n }, true);\n\n var externalCategories = $translate.use() == \"tr\" ? \"Diğerleri\" : \"Others\";\n var summarizeDataToNCategories = function (data, n, groupOrder) {\n var multiplierValue = data.multiplierValue;\n data.categories = data.categories.sort(function (a, b) { return b['nowTotal'] - a['nowTotal'] });\n var beforeTotalDataCount = data.categories[0]['beforeTotal']*100/data.categories[0]['beforeCount'];\n var nowTotalDataCount = data.categories[0]['nowTotal']*100/data.categories[0]['nowCount'];\n data = data.categories.slice(n * (groupOrder - 1), data.categories.length);\n var isThereAnyOtherOrderWithoutZero = false;\n var maxOrder = 0;\n for (var i = 0; i < data.length; i++) {\n if (data[i].order != 0) {\n isThereAnyOtherOrderWithoutZero = true;\n if (data[i].order > maxOrder) {\n maxOrder = data[i].order;\n }\n }\n }\n if(data.length<=n){\n return data;\n }\n var dataNew = data.slice(0,n-1);\n var dataSummarize = data.slice(n-1,data.length);\n var dataSummarized = {};\n dataSummarized.name = externalCategories;\n dataSummarized.shortName = externalCategories;\n var countCategory = dataSummarize.length;\n dataSummarized.nowCount = Math.floor(dataSummarize.map(function(d){return d['nowCount'];}).reduce(function(sum, current){return sum+current;})/countCategory);\n dataSummarized.beforeCount = Math.floor(dataSummarize.map(function(d){return d['beforeCount'];}).reduce(function(sum, current){return sum+current;})/countCategory);\n dataSummarized.beforeTotal = dataSummarize.map(function(d){return d['beforeTotal'];}).reduce(function(sum, current){return sum+current;});\n dataSummarized.beforeCategoryTotal = dataSummarize.map(function(d){return d['beforeCategoryTotal'];}).reduce(function(sum, current){return sum+current;});\n dataSummarized.nowTotal = dataSummarize.map(function(d){return d['nowTotal'];}).reduce(function(sum, current){return sum+current;});\n dataSummarized.nowCategoryTotal = dataSummarize.map(function(d){return d['nowCategoryTotal'];}).reduce(function(sum, current){return sum+current;});\n dataSummarized.order = isThereAnyOtherOrderWithoutZero == false ? 0 : maxOrder+1;\n dataSummarized.positiveBeforeTotal = Math.floor(dataSummarize.map(function (d) { return d['positiveBeforeTotal']; }).reduce(function (sum, current) { return sum + current; }));\n dataSummarized.positiveNowTotal = Math.floor(dataSummarize.map(function (d) { return d['positiveNowTotal']; }).reduce(function (sum, current) { return sum + current; }));\n dataSummarized.negativeBeforeTotal = Math.floor(dataSummarize.map(function (d) { return d['negativeBeforeTotal']; }).reduce(function (sum, current) { return sum + current; }));\n dataSummarized.negativeNowTotal = Math.floor(dataSummarize.map(function (d) { return d['negativeNowTotal']; }).reduce(function (sum, current) { return sum + current; }));\n if(dataSummarized['beforeTotal'] == 0){\n dataSummarized.positiveBeforeCount = 0;\n dataSummarized.negativeBeforeCount = 0;\n } else {\n if (multiplierValue && multiplierValue!=1) {\n dataSummarized.positiveBeforeCount = parseInt(Math.floor(100 * dataSummarized['positiveBeforeTotal'] / dataSummarized['beforeTotal']) * multiplierValue / 100);\n dataSummarized.negativeBeforeCount = parseInt(Math.floor(100 * dataSummarized['negativeBeforeTotal'] / dataSummarized['beforeTotal']) * multiplierValue / 100); \n } else {\n dataSummarized.positiveBeforeCount = Math.floor(100 * dataSummarized['positiveBeforeTotal'] / dataSummarized['beforeTotal']);\n dataSummarized.negativeBeforeCount = Math.floor(100 * dataSummarized['negativeBeforeTotal'] / dataSummarized['beforeTotal']); \n }\n }\n if(dataSummarized['nowTotal'] == 0){\n dataSummarized.positiveNowCount = 0;\n dataSummarized.negativeNowCount = 0; \n } else {\n if (multiplierValue && multiplierValue != 1) {\n dataSummarized.positiveNowCount = parseInt(Math.floor(100 * dataSummarized['positiveNowTotal'] / dataSummarized['nowTotal']) * multiplierValue / 100);\n dataSummarized.negativeNowCount = parseInt(Math.floor(100 * dataSummarized['negativeNowTotal'] / dataSummarized['nowTotal']) * multiplierValue / 100); \n } else {\n dataSummarized.positiveNowCount = Math.floor(100 * dataSummarized['positiveNowTotal'] / dataSummarized['nowTotal']);\n dataSummarized.negativeNowCount = Math.floor(100 * dataSummarized['negativeNowTotal'] / dataSummarized['nowTotal']); \n }\n \n }\n if(beforeTotalDataCount>0){\n dataSummarized.negativeBeforeCountRatio = multiplierValue && multiplierValue != 1 ? parseInt(Math.round((dataSummarized.negativeBeforeTotal * 100 / beforeTotalDataCount) * 10) / 10) : Math.round((dataSummarized.negativeBeforeTotal * 100 / beforeTotalDataCount) * 10) / 10; \n dataSummarized.positiveBeforeCountRatio = multiplierValue && multiplierValue != 1 ? parseInt(Math.round((dataSummarized.positiveBeforeTotal * 100 / beforeTotalDataCount) * 10) / 10) : Math.round((dataSummarized.positiveBeforeTotal * 100 / beforeTotalDataCount) * 10) / 10; \n }else{\n dataSummarized.negativeBeforeCountRatio = multiplierValue && multiplierValue != 1 ? 0 : 0.0; \n dataSummarized.positiveBeforeCountRatio = multiplierValue && multiplierValue != 1 ? 0 : 0.0;\n }\n if(nowTotalDataCount>0){\n dataSummarized.negativeNowCountRatio = multiplierValue && multiplierValue != 1 ? parseInt(Math.round((dataSummarized.negativeNowTotal * 100 / nowTotalDataCount) * 10) / 10) : Math.round((dataSummarized.negativeNowTotal * 100 / nowTotalDataCount) * 10) / 10; \n dataSummarized.positiveNowCountRatio = multiplierValue && multiplierValue != 1 ? parseInt(Math.round((dataSummarized.positiveNowTotal * 100 / nowTotalDataCount) * 10) / 10) : Math.round((dataSummarized.positiveNowTotal * 100 / nowTotalDataCount) * 10) / 10; \n }else{\n dataSummarized.negativeNowCountRatio = multiplierValue && multiplierValue != 1 ? 0 : 0.0; \n dataSummarized.positiveNowCountRatio = multiplierValue && multiplierValue != 1 ? 0 : 0.0; \n }\n dataNew.push(dataSummarized);\n return dataNew;\n\n }\n\n var drawChart = function () {\n if (!$scope.data || !$scope.data.categories)\n return;\n\n var chart = am4core.create(element.context, am4charts.XYChart);\n window.charts = window.charts || {};\n window.charts['SentimentChangeRate'] = chart;\n\n chart.logo.disabled = true;\n var height = chart.maxHeight;\n var minVisibleText = 120 / chart.maxWidth;\n var maxCategoryCount = 15;\n var groupOrder = 1;\n var floatingPointVisibilityEffect = 2;\n if($scope.data.groupOrder){\n groupOrder = $scope.data.groupOrder;\n }\n var useRatio = $scope.data.useRatio;\n chart.data = summarizeDataToNCategories($scope.data, maxCategoryCount, groupOrder);\n console.log(chart.data)\n chart.data.sort(function (a, b) {\n return a.order - b.order || b['nowTotal'] - a['nowTotal'];\n });\n var lighten = 0.1;//[0,1]\n var directions = ['top', 'bottom'];\n\n var maxNowCount = 0;\n var maxNowCountRatio = 0;\n for (var g = 0; g < chart.data.length; g++) {\n var d = chart.data[g];\n maxNowCount = Math.max(maxNowCount, d.positiveNowCount, (-1) * d.negativeNowCount);\n maxNowCountRatio = Math.max(maxNowCountRatio, d.positiveNowCountRatio, (-1) * d.negativeNowCountRatio);\n if(useRatio){\n if (d.positiveBeforeCountRatio > d.positiveNowCountRatio) {\n d.positiveDirection = directions[1];\n } else if (d.positiveBeforeCountRatio < d.positiveNowCountRatio) {\n d.positiveDirection = directions[0];\n } else {\n d.positiveDirection = \"none\";\n }\n if (d.negativeBeforeCountRatio > d.negativeNowCountRatio) {\n d.negativeDirection = directions[0];\n } else if (d.negativeBeforeCountRatio < d.negativeNowCountRatio) {\n d.negativeDirection = directions[1];\n } else {\n d.negativeDirection = \"none\";\n }\n \n }else{\n if (d.positiveBeforeCount > d.positiveNowCount) {\n d.positiveDirection = directions[1];\n } else if (d.positiveBeforeCount < d.positiveNowCount) {\n d.positiveDirection = directions[0];\n } else {\n d.positiveDirection = \"none\";\n }\n if (d.negativeBeforeCount > d.negativeNowCount) {\n d.negativeDirection = directions[0];\n } else if (d.negativeBeforeCount < d.negativeNowCount) {\n d.negativeDirection = directions[1];\n } else {\n d.negativeDirection = \"none\";\n } \n }\n d.negativeChange = '' + Math.abs(-d.negativeNowCount - (-d.negativeBeforeCount)).toFixed(0);\n d.positiveChange = '' + Math.abs(d.positiveNowCount - d.positiveBeforeCount).toFixed(0);\n if (!$scope.data.multiplierValue || $scope.data.multiplierValue == 1) {\n d.negativeChangeRatio = '' + Math.abs(-d.negativeNowCountRatio - (-d.negativeBeforeCountRatio)).toFixed(1);\n d.positiveChangeRatio = '' + Math.abs(d.positiveNowCountRatio - d.positiveBeforeCountRatio).toFixed(1);\n } else {\n d.negativeChangeRatio = '' + Math.abs(-d.negativeNowCountRatio - (-d.negativeBeforeCountRatio)).toFixed(0);\n d.positiveChangeRatio = '' + Math.abs(d.positiveNowCountRatio - d.positiveBeforeCountRatio).toFixed(0);\n }\n if(d.visibleName === undefined || d.visibleName === null){\n d.visibleName = d.name;\n }\n }\n maxNowCount = maxNowCount * (1 + 2 * minVisibleText);\n maxNowCountRatio = maxNowCountRatio * (1 + 2 * minVisibleText);\n chart.data.forEach(function (d) {\n if(useRatio){\n if (d.positiveNowCount < maxNowCountRatio * minVisibleText * floatingPointVisibilityEffect) {\n d.positiveTooltipText = $scope.data.multiplierValue && $scope.data.multiplierValue!=1 ? Math.abs(d.positiveNowCount).toFixed(0) : \"%\" + Math.abs(d.positiveNowCount).toFixed(1);\n } else {\n d.positiveTooltipText = \"\";\n }\n if (d.negativeNowCount > -maxNowCountRatio * minVisibleText*floatingPointVisibilityEffect) {\n d.negativeTooltipText = $scope.data.multiplierValue && $scope.data.multiplierValue != 1 ? Math.abs(d.negativeNowCount).toFixed(0) : \"%\" +Math.abs(d.negativeNowCount).toFixed(1);\n } else {\n d.negativeTooltipText = \"\";\n }\n \n }else{\n if (d.positiveNowCount < maxNowCount * minVisibleText) {\n d.positiveTooltipText = $scope.data.multiplierValue && $scope.data.multiplierValue != 1 ? Math.abs(d.positiveNowCount).toFixed(0) : \"%\" + Math.abs(d.positiveNowCount).toFixed(0);\n } else {\n d.positiveTooltipText = \"\";\n }\n if (d.negativeNowCount > -maxNowCount * minVisibleText) {\n d.negativeTooltipText = $scope.data.multiplierValue && $scope.data.multiplierValue != 1 ? Math.abs(d.negativeNowCount).toFixed(0) : \"%\" + Math.abs(d.negativeNowCount).toFixed(0);\n } else {\n d.negativeTooltipText = \"\";\n }\n \n }\n });\n\n var columnCount = chart.data.length;\n var columnHeightPercent = 55;\n var scale = height * (1 + 0.1 * (maxCategoryCount-columnCount)) * (columnHeightPercent-15) / 100;\n\n //triangle sizes\n var wBig = scale * 0.075;\n var wSmall = scale * 0.05;\n var hBig = wBig / 2;\n var hSmall = wSmall / 2;\n\n //arrow paddings\n var firstPad = scale / 10 + 2 * hBig;\n var arrowPad = [3.5 * hSmall, 2.5 * hSmall, 1.5 * hSmall, 0.5 * hSmall];\n\n // Use only absolute numbers\n chart.numberFormatter.numberFormat = \"#.#s\";\n\n // Create axes\n var categoryAxis = chart.yAxes.push(new am4charts.CategoryAxis());\n categoryAxis.dataFields.category = \"visibleName\";\n categoryAxis.dataFields.name = \"name\";\n categoryAxis.renderer.labels.template.wrap=true;\n categoryAxis.renderer.labels.template.maxWidth=200;\n categoryAxis.renderer.grid.template.location = 0;\n categoryAxis.renderer.inversed = true;\n categoryAxis.renderer.minGridDistance = 1;\n categoryAxis.renderer.labels.template.dy = 0;\n categoryAxis.tooltip.label.wrap = true;\n categoryAxis.tooltip.maxWidth = 150;\n\n\n var valueAxis = chart.xAxes.push(new am4charts.ValueAxis());\n if($scope.visibility && !$scope.visibility.positive){\n valueAxis.max = 0;\n }else{\n if(useRatio){\n valueAxis.max = maxNowCountRatio - 1;\n }else{\n valueAxis.max = maxNowCount - 1;\n }\n }\n if($scope.visibility && !$scope.visibility.negative){\n valueAxis.min = 0;\n }else{\n if(useRatio){\n valueAxis.min = -maxNowCountRatio + 1;\n }else{\n valueAxis.min = -maxNowCount + 1;\n }\n }\n valueAxis.cursorTooltipEnabled = false;\n valueAxis.renderer.ticks.template.disabled = false;\n valueAxis.renderer.ticks.template.strokeOpacity = 1;\n if (!$scope.data.multiplierValue || $scope.data.multiplierValue == 1) {\n valueAxis.renderer.labels.template.adapter.add(\"text\", function (text) {\n return \"%\" + text;\n })\n }\n\n // Create series\n var positiveNowCount = chart.series.push(new am4charts.ColumnSeries());\n if(useRatio){\n positiveNowCount.dataFields.valueX = \"positiveNowCountRatio\";\n }else{\n positiveNowCount.dataFields.valueX = \"positiveNowCount\"; \n }\n positiveNowCount.dataFields.tooltipX = \"positiveTooltipText\";\n if(useRatio){\n positiveNowCount.dataFields.changeX = \"positiveChangeRatio\";\n }else{\n positiveNowCount.dataFields.changeX = \"positiveChange\";\n }\n if(useRatio){\n positiveNowCount.dataFields.beforeX = \"positiveBeforeCountRatio\";\n }else{\n positiveNowCount.dataFields.beforeX = \"positiveBeforeCount\";\n }\n positiveNowCount.dataFields.positiveDirection = \"positiveDirection\";\n positiveNowCount.dataFields.categoryY = \"visibleName\";\n positiveNowCount.fill = \"#4CAF50\";\n positiveNowCount.stroke = \"#4CAF50\";\n positiveNowCount.columns.template.height = am4core.percent(columnHeightPercent);\n if (useRatio) {\n if ($scope.data.multiplierValue && $scope.data.multiplierValue != 1) {\n positiveNowCount.tooltipHTML = '
' + $translate.instant(\"SHARED.BEFORE\") + ': {positiveBeforeCountRatio} ({positiveBeforeTotal})
' + $translate.instant(\"SHARED.NOW\") + ': {positiveNowCountRatio} ({positiveNowTotal})
';\n } else {\n positiveNowCount.tooltipHTML = '
' + $translate.instant(\"SHARED.BEFORE\") + ': %{positiveBeforeCountRatio} ({positiveBeforeTotal})
' + $translate.instant(\"SHARED.NOW\") + ': %{positiveNowCountRatio} ({positiveNowTotal})
';\n }\n } else {\n\n if ($scope.data.multiplierValue && $scope.data.multiplierValue != 1) {\n positiveNowCount.tooltipHTML = '
' + $translate.instant(\"SHARED.BEFORE\") + ': {positiveBeforeCount} ({positiveBeforeTotal})
' + $translate.instant(\"SHARED.NOW\") + ': {positiveNowCount} ({positiveNowTotal})
';\n } else {\n positiveNowCount.tooltipHTML = '
' + $translate.instant(\"SHARED.BEFORE\") + ': %{positiveBeforeCount} ({positiveBeforeTotal})
' + $translate.instant(\"SHARED.NOW\") + ': %{positiveNowCount} ({positiveNowTotal})
';\n }\n }\n positiveNowCount.tooltip.label.fill = am4core.color(\"#FFFFFF\");\n positiveNowCount.tooltip.pointerOrientation = \"vertical\";\n positiveNowCount.columns.template.events.on(\"hit\",function(x){\n $scope.barclick({data_:x});\n $scope.$apply();\n });\n\n\n var positiveNowCountLabel = positiveNowCount.bullets.push(new am4charts.LabelBullet());\n positiveNowCountLabel.label.text = $scope.data.multiplierValue && $scope.data.multiplierValue != 1 ? \"{valueX}\" : \"%{valueX}\";\n positiveNowCountLabel.label.fontSize = scale / 14;\n positiveNowCountLabel.label.fontWeight = 500;\n positiveNowCountLabel.label.hideOversized = false;\n positiveNowCountLabel.label.truncate = false;\n positiveNowCountLabel.label.horizontalCenter = \"right\";\n positiveNowCountLabel.label.dx = -scale / 50;\n positiveNowCountLabel.label.fill = \"#ffffff\";\n if(useRatio){\n positiveNowCountLabel.label.adapter.add('hidden', function (_, target) {\n return target.dataItem.valueX < maxNowCountRatio * minVisibleText*floatingPointVisibilityEffect;\n }); \n }else{\n positiveNowCountLabel.label.adapter.add('hidden', function (_, target) {\n return target.dataItem.valueX < maxNowCount * minVisibleText;\n }); \n }\n\n\n var i = 0;\n var arrow_Neg = positiveNowCountLabel.createChild(am4core.Triangle);\n arrow_Neg.horizontalCenter = \"middle\";\n arrow_Neg.verticalCenter = \"middle\";\n arrow_Neg.strokeWidth = 0;\n arrow_Neg.width = (i % 2 == 0) ? wBig : wSmall;\n arrow_Neg.height = (i % 2 == 0) ? hBig : hSmall;\n arrow_Neg.adapter.add(\"direction\", function (_, target) { return target.dataItem.positiveDirection; });\n arrow_Neg.paddingLeft = firstPad;\n arrow_Neg.adapter.add(\"paddingTop\",\n function (_, target) {\n return (target.dataItem && target.dataItem.positiveDirection == directions[1]) ? arrowPad[0] : arrowPad[3];\n });\n arrow_Neg.adapter.add('fill', function (_, target) {\n if (!target.dataItem) {\n return \"#ffffff\";\n } else if (target.dataItem.positiveDirection == directions[1]) {\n return am4core.color(\"#e53935\").lighten(lighten);\n } else {\n return am4core.color(\"#43a047\").lighten(lighten);\n }\n });\n\n i = 1;\n var arrow_Neg2 = positiveNowCountLabel.createChild(am4core.Triangle);\n arrow_Neg2.horizontalCenter = \"middle\";\n arrow_Neg2.verticalCenter = \"middle\";\n arrow_Neg2.strokeWidth = 0;\n arrow_Neg2.fill = \"#ffffff\";\n arrow_Neg2.width = (i % 2 == 0) ? wBig : wSmall;\n arrow_Neg2.height = (i % 2 == 0) ? hBig : hSmall;\n arrow_Neg2.adapter.add(\"direction\", function (_, target) { return target.dataItem.positiveDirection; });\n arrow_Neg2.paddingLeft = firstPad;\n arrow_Neg2.adapter.add(\"paddingTop\",\n function (_, target) {\n return (target.dataItem && target.dataItem.positiveDirection == directions[1]) ? arrowPad[1] : arrowPad[2];\n });\n i = 2;\n var arrow_Neg = positiveNowCountLabel.createChild(am4core.Triangle);\n arrow_Neg.horizontalCenter = \"middle\";\n arrow_Neg.verticalCenter = \"middle\";\n arrow_Neg.strokeWidth = 0;\n arrow_Neg.width = (i % 2 == 0) ? wBig : wSmall;\n arrow_Neg.height = (i % 2 == 0) ? hBig : hSmall;\n arrow_Neg.adapter.add(\"direction\", function (_, target) { return target.dataItem.positiveDirection; });\n arrow_Neg.paddingLeft = firstPad;\n arrow_Neg.adapter.add(\"paddingTop\",\n function (_, target) {\n return (target.dataItem && target.dataItem.positiveDirection == directions[1]) ? arrowPad[2] : arrowPad[1];\n });\n arrow_Neg.adapter.add('fill', function (_, target) {\n if (!target.dataItem) {\n return \"#ffffff\";\n } else if (target.dataItem.positiveDirection == directions[1]) {\n return am4core.color(\"#e53935\").lighten(lighten);\n } else {\n return am4core.color(\"#43a047\").lighten(lighten);\n }\n });\n i = 3;\n var arrow_Neg2 = positiveNowCountLabel.createChild(am4core.Triangle);\n arrow_Neg2.horizontalCenter = \"middle\";\n arrow_Neg2.verticalCenter = \"middle\";\n arrow_Neg2.strokeWidth = 0;\n arrow_Neg2.fill = \"#ffffff\";\n arrow_Neg2.width = (i % 2 == 0) ? wBig : wSmall;\n arrow_Neg2.height = (i % 2 == 0) ? hBig : hSmall;\n arrow_Neg2.adapter.add(\"direction\", function (_, target) { return target.dataItem.positiveDirection; });\n arrow_Neg2.adapter.add(\"paddingTop\",\n function (_, target) {\n return (target.dataItem && target.dataItem.positiveDirection == directions[1]) ? arrowPad[3] : arrowPad[0];\n });\n arrow_Neg2.paddingLeft = firstPad;\n var positiveNowCountChangeLabel = positiveNowCount.bullets.push(new am4charts.LabelBullet());\n \n positiveNowCountChangeLabel.label.text = $scope.data.multiplierValue && $scope.data.multiplierValue != 1 ? \"[bold]{changeX}\" : \"[bold]%{changeX}\";\n positiveNowCountChangeLabel.label.fontSize = scale / Math.max(columnCount, 14);\n positiveNowCountChangeLabel.label.fontWeight = 500;\n positiveNowCountChangeLabel.label.hideOversized = false;\n positiveNowCountChangeLabel.label.truncate = false;\n positiveNowCountChangeLabel.label.dx = scale / 10;\n if(columnCount>=10){\n positiveNowCountChangeLabel.label.dy = - (1 + hSmall);\n }else{\n positiveNowCountChangeLabel.label.dy = - (3 + hSmall);\n }\n positiveNowCountChangeLabel.label.horizontalCenter = \"middle\";\n positiveNowCountChangeLabel.label.adapter.add('fill', function (_, target) {\n if (!target.dataItem) {\n return \"#ffffff\";\n } else if (target.dataItem.positiveDirection == directions[1]) {\n return am4core.color(\"#e53935\").lighten(lighten);\n } else {\n return am4core.color(\"#43a047\").lighten(lighten);\n }\n });\n\n positiveNowCountChangeLabel.label.adapter.add('hidden', function (_, target) {\n return parseFloat(target.dataItem.changeX) === 0;\n });\n\n var negativeNowCount = chart.series.push(new am4charts.ColumnSeries());\n if(useRatio){\n negativeNowCount.dataFields.valueX = \"negativeNowCountRatio\";\n }else{\n negativeNowCount.dataFields.valueX = \"negativeNowCount\"; \n }\n negativeNowCount.dataFields.tooltipX = \"negativeTooltipText\";\n if(useRatio){\n negativeNowCount.dataFields.changeX = \"negativeChangeRatio\";\n }else{\n negativeNowCount.dataFields.changeX = \"negativeChange\";\n }\n negativeNowCount.dataFields.negativeDirection = \"negativeDirection\";\n if(useRatio){\n negativeNowCount.dataFields.beforeX = \"negativeBeforeCountRatio\";\n }else{\n negativeNowCount.dataFields.beforeX = \"negativeBeforeCount\"; \n }\n negativeNowCount.dataFields.categoryY = \"visibleName\";\n negativeNowCount.clustered = false;\n negativeNowCount.fill = \"#F44336\";\n if (useRatio) {\n if ($scope.data.multiplierValue && $scope.data.multiplierValue != 1) {\n negativeNowCount.tooltipHTML = \"
\" + $translate.instant(\"SHARED.BEFORE\") + \": {negativeBeforeCountRatio} ({negativeBeforeTotal})
\" + $translate.instant(\"SHARED.NOW\") + \": {negativeNowCountRatio} ({negativeNowTotal})
\";\n } else {\n negativeNowCount.tooltipHTML = \"
\" + $translate.instant(\"SHARED.BEFORE\") + \": %{negativeBeforeCountRatio} ({negativeBeforeTotal})
\" + $translate.instant(\"SHARED.NOW\") + \": %{negativeNowCountRatio} ({negativeNowTotal})
\";\n }\n } else {\n if ($scope.data.multiplierValue && $scope.data.multiplierValue != 1) {\n negativeNowCount.tooltipHTML = \"
\" + $translate.instant(\"SHARED.BEFORE\") + \": {negativeBeforeCount} ({negativeBeforeTotal})
\" + $translate.instant(\"SHARED.NOW\") + \": {negativeNowCount} ({negativeNowTotal})
\";\n } else {\n negativeNowCount.tooltipHTML = \"
\" + $translate.instant(\"SHARED.BEFORE\") + \": %{negativeBeforeCount} ({negativeBeforeTotal})
\" + $translate.instant(\"SHARED.NOW\") + \": %{negativeNowCount} ({negativeNowTotal})
\";\n }\n }\n\n negativeNowCount.tooltip.label.fill = am4core.color(\"#FFFFFF\");\n negativeNowCount.stroke = \"#F44336\";\n negativeNowCount.columns.template.height = am4core.percent(columnHeightPercent);\n negativeNowCount.tooltip.pointerOrientation = \"vertical\";\n negativeNowCount.columns.template.events.on(\"hit\",function(x){\n $scope.barclick({data_:x});\n $scope.$apply();\n });\n var negativeNowCountLabel = negativeNowCount.bullets.push(new am4charts.LabelBullet());\n negativeNowCountLabel.label.text = $scope.data.multiplierValue && $scope.data.multiplierValue != 1 ? \"{valueX}\" : \"%{valueX}\";\n negativeNowCountLabel.label.fontSize = scale / 14;\n negativeNowCountLabel.label.fontWeight = 500;\n negativeNowCountLabel.label.hideOversized = false;\n negativeNowCountLabel.label.truncate = false;\n negativeNowCountLabel.label.horizontalCenter = \"left\";\n negativeNowCountLabel.label.dx = scale / 50;\n negativeNowCountLabel.label.fill = \"#ffffff\";\n if(useRatio){\n negativeNowCountLabel.label.adapter.add('hidden', function (_, target) {\n return target.dataItem.valueX >= -maxNowCountRatio * minVisibleText*floatingPointVisibilityEffect;\n });\n }else{\n negativeNowCountLabel.label.adapter.add('hidden', function (_, target) {\n return target.dataItem.valueX >= -maxNowCount * minVisibleText;\n });\n }\n\n\n var i = 0;\n var arrow_Neg = negativeNowCountLabel.createChild(am4core.Triangle);\n arrow_Neg.horizontalCenter = \"middle\";\n arrow_Neg.verticalCenter = \"middle\";\n arrow_Neg.strokeWidth = 0;\n arrow_Neg.adapter.add('fill', function (_, target) {\n if (!target.dataItem) {\n return \"#ffffff\";\n } else if (target.dataItem.negativeDirection == directions[0]) {\n return am4core.color(\"#F44336\").lighten(lighten);\n } else {\n return am4core.color(\"#4CAF50\").lighten(lighten);\n }\n });\n arrow_Neg.width = (i % 2 == 0) ? wBig : wSmall;\n arrow_Neg.height = (i % 2 == 0) ? hBig : hSmall;\n arrow_Neg.adapter.add(\"direction\", function (_, target) { return target.dataItem.negativeDirection; });\n arrow_Neg.paddingRight = firstPad;\n arrow_Neg.adapter.add(\"paddingTop\",\n function (_, target) {\n return (target.dataItem && target.dataItem.negativeDirection == directions[1]) ? arrowPad[0] : arrowPad[3];\n });\n i = 1;\n var arrow_Neg2 = negativeNowCountLabel.createChild(am4core.Triangle);\n arrow_Neg2.horizontalCenter = \"middle\";\n arrow_Neg2.verticalCenter = \"middle\";\n arrow_Neg2.strokeWidth = 0;\n arrow_Neg2.fill = (i % 2 == 0) ? am4core.color(\"#F44336\").lighten(lighten) : \"#ffffff\";\n arrow_Neg2.width = (i % 2 == 0) ? wBig : wSmall;\n arrow_Neg2.height = (i % 2 == 0) ? hBig : hSmall;\n arrow_Neg2.adapter.add(\"direction\", function (_, target) { return target.dataItem.negativeDirection; });\n arrow_Neg2.paddingRight = firstPad;\n arrow_Neg2.adapter.add(\"paddingTop\",\n function (_, target) {\n return (target.dataItem && target.dataItem.negativeDirection == directions[1]) ? arrowPad[1] : arrowPad[2];\n });\n i = 2;\n var arrow_Neg = negativeNowCountLabel.createChild(am4core.Triangle);\n arrow_Neg.horizontalCenter = \"middle\";\n arrow_Neg.verticalCenter = \"middle\";\n arrow_Neg.strokeWidth = 0;\n arrow_Neg.adapter.add('fill', function (_, target) {\n if (!target.dataItem) {\n return \"#ffffff\";\n } else if (target.dataItem.negativeDirection == directions[0]) {\n return am4core.color(\"#F44336\").lighten(lighten);\n } else {\n return am4core.color(\"#4CAF50\").lighten(lighten);\n }\n });\n arrow_Neg.width = (i % 2 == 0) ? wBig : wSmall;\n arrow_Neg.height = (i % 2 == 0) ? hBig : hSmall;\n arrow_Neg.adapter.add(\"direction\", function (_, target) { return target.dataItem.negativeDirection; });\n arrow_Neg.paddingRight = firstPad;\n arrow_Neg.adapter.add(\"paddingTop\",\n function (_, target) {\n return (target.dataItem && target.dataItem.negativeDirection == directions[1]) ? arrowPad[2] : arrowPad[1];\n });\n i = 3;\n var arrow_Neg2 = negativeNowCountLabel.createChild(am4core.Triangle);\n arrow_Neg2.horizontalCenter = \"middle\";\n arrow_Neg2.verticalCenter = \"middle\";\n arrow_Neg2.strokeWidth = 0;\n arrow_Neg2.fill = (i % 2 == 0) ? am4core.color(\"#F44336\").lighten(lighten) : \"#ffffff\";\n arrow_Neg2.width = (i % 2 == 0) ? wBig : wSmall;\n arrow_Neg2.height = (i % 2 == 0) ? hBig : hSmall;\n arrow_Neg2.adapter.add(\"direction\", function (_, target) { return target.dataItem.negativeDirection; });\n arrow_Neg2.paddingRight = firstPad;\n arrow_Neg2.adapter.add(\"paddingTop\",\n function (_, target) {\n return (target.dataItem && target.dataItem.negativeDirection == directions[1]) ? arrowPad[3] : arrowPad[0];\n });\n\n var negativeNowCountChangeLabel = negativeNowCount.bullets.push(new am4charts.LabelBullet());\n negativeNowCountChangeLabel.label.text = $scope.data.multiplierValue && $scope.data.multiplierValue != 1 ? \"[bold]{changeX}\" : \"[bold]%{changeX}\";\n negativeNowCountChangeLabel.label.fontSize = scale / Math.max(columnCount, 14);\n negativeNowCountChangeLabel.label.fontWeight = 500;\n negativeNowCountChangeLabel.label.hideOversized = false;\n negativeNowCountChangeLabel.label.truncate = false;\n negativeNowCountChangeLabel.label.horizontalCenter = \"middle\";\n negativeNowCountChangeLabel.label.dx = - scale / 10;\n if(columnCount>=10){\n negativeNowCountChangeLabel.label.dy = - (1 + hSmall);\n }else{\n negativeNowCountChangeLabel.label.dy = - (3 + hSmall);\n }\n\n\n negativeNowCountChangeLabel.label.adapter.add('fill', function (_, target) {\n if (!target.dataItem) {\n return \"#ffffff\";\n } else if (target.dataItem.negativeDirection == directions[0]) {\n return am4core.color(\"#F44336\").lighten(lighten);\n } else {\n return am4core.color(\"#4CAF50\").lighten(lighten);\n }\n });\n\n negativeNowCountChangeLabel.label.adapter.add('hidden', function (_, target) {\n return parseFloat(target.dataItem.changeX) === 0;\n });\n\n chart.cursor = new am4charts.XYCursor();\n chart.cursor.behavior = \"zoomY\";\n\n $scope.$on(\"$destroy\", function () {\n chart.dispose();\n });\n return chart;\n }\n }\n };\n }\n})();\n\n\n(function () {\n 'use strict';\n angular\n .module('app.report')\n .directive('stackhorizontalcategorychart', CategoryChartDirective);\n\n am4core.useTheme(am4themes_animated);\n /** @ngInject */\n function CategoryChartDirective($translate) {\n var chart;\n return {\n restrict: \"E\",\n scope:\n {\n chartId: '@',\n data: '=',\n refresh: '=',\n barclick: '&'\n },\n template: '
',\n replace: true,\n link: function ($scope, element, attrs) {\n $scope.$watch(function () {\n return $scope.data;\n }, function (newValue, oldValue) {\n if (!angular.equals(oldValue, newValue)) {\n chart.dispose();\n chart = drawChart();\n }\n else if ($scope.data) {\n chart = drawChart();\n }\n }, true);\n\n $scope.$watch(function () {\n return $scope.refresh;\n }, function (newValue, oldValue) {\n if (newValue) {\n chart.dispose();\n chart = drawChart();\n $scope.refresh = false;\n }\n }, true);\n\n var externalCategories = $translate.use() == \"tr\" ? \"Diğerleri\" : \"Others\";\n var summarizeDataToNCategories = function (data,n,groupOrder){\n data.categories = data.categories.sort(function (a, b) { return b['nowTotal'] - a['nowTotal'] });\n data = data.categories.slice(n * (groupOrder - 1), data.categories.length);\n var isThereAnyOtherOrderWithoutZero = false;\n var maxOrder = 0;\n for (var i = 0; i < data.length; i++) {\n if (data[i].order != 0) {\n isThereAnyOtherOrderWithoutZero = true;\n if (data[i].order > maxOrder) {\n maxOrder = data[i].order;\n }\n }\n }\n if(data.length<=n){\n return data;\n }\n var dataNew = data.slice(0,n-1);\n var dataSummarize = data.slice(n-1,data.length);\n var dataSummarized = {};\n dataSummarized.name = externalCategories;\n dataSummarized.visibleName = externalCategories;\n dataSummarized.nowCount = dataSummarize.map(function(d){return d['nowCount'];}).reduce(function(sum, current){return sum+current;});\n dataSummarized.beforeCount = dataSummarize.map(function(d){return d['beforeCount'];}).reduce(function(sum, current){return sum+current;});\n dataSummarized.beforeTotal = dataSummarize.map(function(d){return d['beforeTotal'];}).reduce(function(sum, current){return sum+current;});\n dataSummarized.beforeCategoryTotal = dataSummarize.map(function(d){return d['beforeCategoryTotal'];}).reduce(function(sum, current){return sum+current;});\n dataSummarized.beforeCategoryCount = dataSummarize.map(function(d){return d['beforeCategoryCount'];}).reduce(function(sum, current){return sum+current;});\n dataSummarized.nowTotal = dataSummarize.map(function(d){return d['nowTotal'];}).reduce(function(sum, current){return sum+current;});\n dataSummarized.nowCategoryTotal = dataSummarize.map(function(d){return d['nowCategoryTotal'];}).reduce(function(sum, current){return sum+current;});\n dataSummarized.nowCategoryCount = dataSummarize.map(function(d){return d['nowCategoryCount'];}).reduce(function(sum, current){return sum+current;});\n dataSummarized.positiveBeforeCount = dataSummarize.map(function(d){return d['positiveBeforeCount'];}).reduce(function(sum, current){return sum+current;});\n dataSummarized.positiveNowCount = dataSummarize.map(function(d){return d['positiveNowCount'];}).reduce(function(sum, current){return sum+current;});\n dataSummarized.negativeBeforeCount = dataSummarize.map(function(d){return d['negativeBeforeCount'];}).reduce(function(sum, current){return sum+current;});\n dataSummarized.negativeNowCount = dataSummarize.map(function (d) { return d['negativeNowCount']; }).reduce(function (sum, current) { return sum + current; });\n dataSummarized.order = isThereAnyOtherOrderWithoutZero == false ? 0 : maxOrder+1;\n \n dataNew.push(dataSummarized);\n return dataNew;\n }\n \n var drawChart = function () {\n if (!$scope.data || !$scope.data.categories)\n return;\n\n var chart = am4core.create(element.context, am4charts.XYChart);\n window.charts = window.charts || {};\n window.charts['CategoryChangeRate'] = chart;\n\n chart.logo.disabled = true;\n var height = chart.maxHeight;\n var minVisibleText = 40 / chart.maxWidth; \n var maxCategoryCount = 15;\n var groupOrder = 1;\n if($scope.data.groupOrder){\n groupOrder = $scope.data.groupOrder;\n }\n var useRatio = $scope.data.useRatio;\n chart.data = summarizeDataToNCategories($scope.data, maxCategoryCount, groupOrder);\n chart.data.sort(function (a, b) {\n return a.order - b.order || b['nowTotal'] - a['nowTotal'];\n });\n var lighten = 0.1;//[0,1]\n var directions = ['top', 'bottom', 'none'];\n\n var colors = [\n \"#33BBFF\",\n \"#33BBFF\"\n ];\n\n var maxNowCount = 0;\n var maxNowCountCategory = 0;\n for (var g = 0; g < chart.data.length; g++) {\n var d = chart.data[g];\n if(useRatio){\n if (d.beforeCount > d.nowCount) {\n d.direction = directions[1];\n } else if (d.beforeCount < d.nowCount) {\n d.direction = directions[0];\n } else {\n d.direction = directions[2];\n } \n }else{\n if (d.beforeCategoryCount > d.nowCategoryCount) {\n d.direction = directions[1];\n } else if (d.beforeCategoryCount < d.nowCategoryCount) {\n d.direction = directions[0];\n } else {\n d.direction = directions[2];\n } \n }\n d.change = '' + Math.abs(d.nowCount - d.beforeCount).toFixed(1);\n d.categoryChange = '' + Math.abs(d.nowCategoryCount - d.beforeCategoryCount).toFixed(1);\n if(d.visibleName === undefined || d.visibleName === null){\n d.visibleName = d.name;\n }\n maxNowCount = Math.max(maxNowCount, d.nowCount);\n maxNowCountCategory = Math.max(maxNowCountCategory,d.nowCategoryCount);\n\n }\n maxNowCount = maxNowCount * (1 + 2 * minVisibleText);\n maxNowCountCategory = maxNowCountCategory * (1 + 2 * minVisibleText);\n chart.data.forEach(function (d) {\n if(!useRatio){\n if (d.nowCount < maxNowCountCategory * minVisibleText) {\n //d.tooltipText = $scope.data.multiplierValue && $scope.data.multiplierValue != 1 ? d.nowCategoryCount : \"%\" + d.nowCategoryCount;\n d.tooltipText = \"%\" + d.nowCategoryCount;\n } else {\n d.tooltipText = \"\";\n } \n }else{\n if (d.nowCount < maxNowCount * minVisibleText) {\n\n //d.tooltipText = $scope.data.multiplierValue && $scope.data.multiplierValue != 1 ? d.nowCount : \"%\" + d.nowCount;\n d.tooltipText = \"%\" + d.nowCount;\n } else {\n d.tooltipText = \"\";\n }\n }\n });\n \n var columnCount = chart.data.length;\n var columnHeightPercent = 55;\n var scale = height * (1 + 0.1 * (maxCategoryCount-columnCount)) * (columnHeightPercent-15) / 100;\n\n //triangle sizes\n var wBig = scale * 0.075;\n var wSmall = scale * 0.05;\n var hBig = wBig / 2;\n var hSmall = wSmall / 2;\n\n //arrow paddings\n var firstPad = scale / 10 + 2 * hBig;\n var arrowPad = [3.5 * hSmall, 2.5 * hSmall, 1.5 * hSmall, 0.5 * hSmall];\n\n\n // Use only absolute numbers\n chart.numberFormatter.numberFormat = \"#.#s\";\n\n // Create axes\n var categoryAxis = chart.yAxes.push(new am4charts.CategoryAxis());\n categoryAxis.dataFields.category = \"visibleName\";\n categoryAxis.dataFields.name = \"name\";\n categoryAxis.renderer.grid.template.location = 0;\n categoryAxis.renderer.inversed = true;\n categoryAxis.renderer.minGridDistance = 1;\n categoryAxis.renderer.labels.template.dy = 0;\n categoryAxis.renderer.labels.template.wrap=true;\n categoryAxis.renderer.labels.template.maxWidth=200;\n //categoryAxis.cursorTooltipEnabled = true;\n categoryAxis.adapter.add('getTooltipText', function (text, target) {\n return text;//target.dataItemsByCategory.getKey(text).name; // defined\n });\n \n categoryAxis.tooltip.label.wrap = true;\n categoryAxis.tooltip.maxWidth = 150;\n\n\n var valueAxis = chart.xAxes.push(new am4charts.ValueAxis());\n if(!useRatio){\n valueAxis.max = maxNowCountCategory - 1;\n }else{\n valueAxis.max = maxNowCount - 1;\n\n }\n valueAxis.min = 0;\n //valueAxis.renderer.minGridDistance = 10;\n //valueAxis.renderer.ticks.template.length = 10;\n valueAxis.renderer.ticks.template.disabled = false;\n valueAxis.renderer.ticks.template.strokeOpacity = 1;\n valueAxis.cursorTooltipEnabled = false;\n //if (!$scope.data.multiplierValue || $scope.data.multiplierValue == 1) {\n valueAxis.renderer.labels.template.adapter.add(\"text\", function (text) {\n return text + \"%\";\n });\n //}\n\n // Create series\n var nowCount = chart.series.push(new am4charts.ColumnSeries());\n if(!useRatio){\n nowCount.dataFields.valueX = \"nowCategoryCount\";\n }else{\n nowCount.dataFields.valueX = \"nowCount\";\n }\n nowCount.dataFields.tooltipX = \"tooltipText\";\n if(!useRatio){\n nowCount.dataFields.changeX = \"categoryChange\";\n }else{\n nowCount.dataFields.changeX = \"change\";\n }\n if(!useRatio){\n nowCount.dataFields.beforeX = \"beforeCategoryCount\";\n }else{\n nowCount.dataFields.beforeX = \"beforeCount\";\n }\n nowCount.dataFields.direction = \"direction\";\n nowCount.dataFields.categoryY = \"visibleName\";\n nowCount.fill = colors[0];\n nowCount.stroke = colors[0];\n nowCount.columns.template.height = am4core.percent(columnHeightPercent);\n if (!useRatio) {\n //if ($scope.data.multiplierValue && $scope.data.multiplierValue != 1) {\n //nowCount.tooltipHTML = '
' + $translate.instant(\"SHARED.BEFORE\") + ': {beforeCategoryCount} ({beforeCategoryTotal})
' + $translate.instant(\"SHARED.NOW\") + ': {nowCategoryCount} ({nowCategoryTotal})
';\n //} else {\n nowCount.tooltipHTML = '
' + $translate.instant(\"SHARED.BEFORE\") + ': %{beforeCategoryCount} ({beforeCategoryTotal})
' + $translate.instant(\"SHARED.NOW\") + ': %{nowCategoryCount} ({nowCategoryTotal})
';\n //}\n } else {\n //if ($scope.data.multiplierValue && $scope.data.multiplierValue != 1) {\n //nowCount.tooltipHTML = '
' + $translate.instant(\"SHARED.BEFORE\") + ': {beforeCount} ({beforeTotal})
' + $translate.instant(\"SHARED.NOW\") + ': {nowCount} ({nowTotal})
';\n //} else {\n nowCount.tooltipHTML = '
' + $translate.instant(\"SHARED.BEFORE\") + ': %{beforeCount} ({beforeTotal})
' + $translate.instant(\"SHARED.NOW\") + ': %{nowCount} ({nowTotal})
';\n //}\n }\n nowCount.tooltip.adapter.add(\"disabled\", function (_, target) {\n return (nowCount.dataFields.tooltipX === \"\");\n });\n nowCount.tooltip.pointerOrientation = \"vertical\";\n nowCount.tooltip.autoTextColor = false;\n nowCount.tooltip.label.fill = am4core.color(\"#ffffff\");\n nowCount.columns.template.events.on(\"hit\",function(x){\n $scope.barclick({data_:x});\n $scope.$apply();\n });\n\n var nowCountLabel = nowCount.bullets.push(new am4charts.LabelBullet());\n //nowCountLabel.label.text = $scope.data.multiplierValue && $scope.data.multiplierValue != 1 ? \"{valueX}\" : \"%{valueX}\";\n nowCountLabel.label.text = \"%{valueX}\";\n nowCountLabel.label.fontSize = scale / 14;\n nowCountLabel.label.fontWeight = 500;\n nowCountLabel.label.hideOversized = false;\n nowCountLabel.label.truncate = false;\n nowCountLabel.label.horizontalCenter = \"right\";\n nowCountLabel.label.dx = -scale / 50;\n nowCountLabel.label.fill = \"#ffffff\";\n if(!useRatio){\n nowCountLabel.label.adapter.add('hidden', function (_, target) {\n return target.dataItem.valueX < maxNowCountCategory * minVisibleText;\n }); \n }else{\n nowCountLabel.label.adapter.add('hidden', function (_, target) {\n return target.dataItem.valueX < maxNowCount * minVisibleText;\n }); \n }\n\n var i = 0;\n var arrow_Neg = nowCountLabel.createChild(am4core.Triangle);\n arrow_Neg.horizontalCenter = \"middle\";\n arrow_Neg.verticalCenter = \"middle\";\n arrow_Neg.strokeWidth = 0;\n //arrow_Neg.fill = (i%2==0)?colors[0]:\"#ffffff\";\n arrow_Neg.width = (i % 2 == 0) ? wBig : wSmall;\n arrow_Neg.height = (i % 2 == 0) ? hBig : hSmall;\n //arrow_Neg.direction = 'left';\n arrow_Neg.adapter.add(\"direction\", function (_, target) { return target.dataItem.direction; });\n arrow_Neg.adapter.add(\"paddingLeft\",\n function (_, target) {\n return firstPad;\n });\n arrow_Neg.adapter.add(\"paddingTop\",\n function (_, target) {\n return (target.dataItem && target.dataItem.direction == directions[1]) ? arrowPad[0] : arrowPad[3];\n });\n arrow_Neg.adapter.add('fill', function (_, target) {\n if (!target.dataItem) {\n return \"#ffffff\";\n } else if (target.dataItem.direction == directions[1]) {\n return am4core.color(colors[0]).lighten(lighten);\n } else {\n return am4core.color(colors[1]).lighten(lighten);\n }\n });\n i = 1;\n var arrow_Neg2 = nowCountLabel.createChild(am4core.Triangle);\n arrow_Neg2.horizontalCenter = \"middle\";\n arrow_Neg2.verticalCenter = \"middle\";\n arrow_Neg2.strokeWidth = 0;\n arrow_Neg2.fill = (i % 2 == 0) ? am4core.color(colors[0]).lighten(lighten) : \"#ffffff\";\n arrow_Neg2.width = (i % 2 == 0) ? wBig : wSmall;\n arrow_Neg2.height = (i % 2 == 0) ? hBig : hSmall;\n arrow_Neg2.adapter.add(\"direction\", function (_, target) { return target.dataItem.direction; });\n arrow_Neg2.adapter.add(\"paddingLeft\",\n function (_, target) {\n return firstPad;\n });\n arrow_Neg2.adapter.add(\"paddingTop\",\n function (_, target) {\n return (target.dataItem && target.dataItem.direction == directions[1]) ? arrowPad[1] : arrowPad[2];\n });\n i = 2;\n var arrow_Neg = nowCountLabel.createChild(am4core.Triangle);\n arrow_Neg.horizontalCenter = \"middle\";\n arrow_Neg.verticalCenter = \"middle\";\n arrow_Neg.strokeWidth = 0;\n arrow_Neg.width = (i % 2 == 0) ? wBig : wSmall;\n arrow_Neg.height = (i % 2 == 0) ? hBig : hSmall;\n arrow_Neg.adapter.add(\"direction\", function (_, target) { return target.dataItem.direction; });\n arrow_Neg.adapter.add(\"paddingLeft\",\n function (_, target) {\n return firstPad;\n });\n\n arrow_Neg.adapter.add(\"paddingTop\",\n function (_, target) {\n return (target.dataItem && target.dataItem.direction == directions[1]) ? arrowPad[2] : arrowPad[1];\n });\n arrow_Neg.adapter.add('fill', function (_, target) {\n if (!target.dataItem) {\n return \"#ffffff\";\n } else if (target.dataItem.direction == directions[1]) {\n return am4core.color(colors[0]).lighten(lighten);\n } else {\n return am4core.color(colors[1]).lighten(lighten);\n }\n });\n i = 3;\n var arrow_Neg2 = nowCountLabel.createChild(am4core.Triangle);\n arrow_Neg2.horizontalCenter = \"middle\";\n arrow_Neg2.verticalCenter = \"middle\";\n arrow_Neg2.strokeWidth = 0;\n arrow_Neg2.fill = (i % 2 == 0) ? am4core.color(colors[0]).lighten(lighten) : \"#ffffff\";\n arrow_Neg2.width = (i % 2 == 0) ? wBig : wSmall;\n arrow_Neg2.height = (i % 2 == 0) ? hBig : hSmall;\n arrow_Neg2.adapter.add(\"direction\", function (_, target) { return target.dataItem.direction; });\n arrow_Neg2.adapter.add(\"paddingLeft\",\n function (_, target) {\n return firstPad;\n });\n arrow_Neg2.adapter.add(\"paddingTop\",\n function (_, target) {\n return (target.dataItem && target.dataItem.direction == directions[1]) ? arrowPad[3] : arrowPad[0];\n });\n var nowCountChangeLabel = nowCount.bullets.push(new am4charts.LabelBullet());\n //nowCountChangeLabel.label.text = $scope.data.multiplierValue && $scope.data.multiplierValue != 1 ? \"[bold]{changeX}\" : \"[bold]%{changeX}\";\n nowCountChangeLabel.label.text = \"[bold]%{changeX}\";\n nowCountChangeLabel.label.fontSize = scale / Math.max(columnCount, 14);\n nowCountChangeLabel.label.fontWeight = 500;\n nowCountChangeLabel.label.hideOversized = false;\n nowCountChangeLabel.label.truncate = false;\n nowCountChangeLabel.label.horizontalCenter = \"middle\";\n if(columnCount>=10){\n nowCountChangeLabel.label.dy = - (1 + hSmall);\n }else{\n nowCountChangeLabel.label.dy = - (3 + hSmall);\n }\n nowCountChangeLabel.label.dx = scale / 10;\n\n nowCountChangeLabel.label.fill = am4core.color(colors[0]).lighten(lighten);\n nowCountChangeLabel.label.adapter.add('hidden', function (_, target) {\n return parseFloat(target.dataItem.changeX) === 0;\n });\n\n\n chart.cursor = new am4charts.XYCursor();\n chart.cursor.behavior = \"zoomY\";\n \n $scope.$on(\"$destroy\", function () {\n chart.dispose();\n });\n\n return chart;\n }\n\n \n }\n };\n }\n})();\n\n\n(function () {\n 'use strict';\n angular\n .module('app.report')\n .directive('radarchart', RadarChartDirective);\n\n am4core.useTheme(am4themes_animated);\n /** @ngInject */\n function RadarChartDirective($stateParams, $translate) {\n var chart;\n return {\n restrict: \"E\",\n scope: {\n chartId: '@',\n data: '=',\n refresh: '='\n },\n template: '
',\n replace: true,\n link: function ($scope, element, attrs) {\n // $scope.$watch('data', function () {\n $scope.$watch(function () {\n return $scope.data;\n }, function (newValue, oldValue) {\n if (!angular.equals(oldValue, newValue)) {\n //chart.dispose();\n chart = drawChart();\n }\n else if ($scope.data) {\n chart = drawChart();\n }\n }, true);\n\n $scope.$watch(function () {\n return $scope.refresh;\n }, function (newValue, oldValue) {\n if (newValue) {\n //chart.dispose();\n chart = drawChart();\n $scope.refresh = false;\n }\n }, true);\n \n function drawChart() {\n var chart = am4core.create(element.context, am4charts.RadarChart);\n chart.logo.disabled = true;\n chart.colors.list = [\n am4core.color(\"#4661EE\"),\n am4core.color(\"#EC5657\"),\n am4core.color(\"#1BCDD1\"),\n am4core.color(\"#8FAABB\"),\n am4core.color(\"#B08BEB\"),\n am4core.color(\"#3EA0DD\"),\n am4core.color(\"#F5A52A\"),\n am4core.color(\"#23BFAA\"),\n am4core.color(\"#FAA586\"),\n am4core.color(\"#EB8CC6\"),\n ];\n chart.data = $scope.data.data;\n if (!chart.data || chart.data.length == 0) return;\n var categoryAxis = chart.xAxes.push(new am4charts.CategoryAxis());\n categoryAxis.dataFields.category = \"item\";\n /*\n categoryAxis.renderer.labels.template.adapter.add(\"fill\", function (fill, target) {\n return (target.dataItem.index >= 0) ? chart.colors.getIndex(target.dataItem.index) : fill;\n });*/\n categoryAxis.fontSize = 14\n\n var valueAxis = chart.yAxes.push(new am4charts.ValueAxis());\n valueAxis.min = 0;\n /*valueAxis.renderer.labels.template.adapter.add(\"fill\", function (fill, target) {\n return (target.dataItem.index >= 0) ? chart.colors.getIndex(target.dataItem.index) : fill;\n });*/\n\n /* Create and configure series */\n if ($scope.data.data[0].filteredData) {\n var series = chart.series.push(new am4charts.RadarSeries());\n series.dataFields.valueY = \"filteredData\";\n series.dataFields.categoryX = \"item\";\n series.name = $scope.data.nickname;\n series.tooltipText = \"{name}\\n{categoryX}: {valueY}%[/]\";\n series.strokeWidth = 3;\n series.zIndex = 2;\n series.colors = new am4core.ColorSet();\n }\n \n\n var series2 = chart.series.push(new am4charts.RadarSeries());\n series2.dataFields.valueY = \"allData\";\n series2.dataFields.categoryX = \"item\";\n var general = $scope.data.allDataNickname ? $scope.data.allDataNickname : $translate.instant('REPORT.DASHBOARD_TEMPLATE_3.GENERAL');\n series2.name = general;\n series2.tooltipText = \"{name}\\n{categoryX}: {valueY}%[/]\";\n series2.strokeWidth = 3;\n series2.colors = new am4core.ColorSet();\n series2.zIndex = 2;\n \n\n //chart.scrollbarX = new am4core.Scrollbar();\n chart.cursor = new am4charts.RadarCursor();\n\n chart.legend = new am4charts.Legend();\n\n chart.numberFormatter.numberFormat = \"#.00\";\n\n return chart;\n }\n\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('app.report')\n .directive('piechart', PieChartDirective);\n\n am4core.useTheme(am4themes_animated);\n /** @ngInject */\n function PieChartDirective($stateParams, $translate) {\n var chart = {};\n return {\n restrict: \"E\",\n scope: {\n chartId: '@',\n data: '=',\n refresh: '='\n },\n template: '
',\n replace: true,\n link: function ($scope, element, attrs) {\n // $scope.$watch('data', function () {\n $scope.$watch(function () {\n return $scope.data;\n }, function (newValue, oldValue) {\n if (!angular.equals(oldValue, newValue)) {\n if (chart[element.context.id]) chart[element.context.id].dispose();\n \n chart[element.context.id] = drawChart();\n }\n else if ($scope.data) {\n if (chart[element.context.id]) chart[element.context.id].dispose();\n chart[element.context.id] = drawChart();\n }\n }, true);\n\n $scope.$watch(function () {\n return $scope.refresh;\n }, function (newValue, oldValue) {\n if (newValue) {\n chart[element.context.id].dispose();\n chart[element.context.id] = drawChart();\n //$scope.refresh = false;\n }\n if (chart) chart[element.context.id].dispose();\n chart[element.context.id] = drawChart();\n }, true);\n\n function drawChart() {\n var chart = am4core.create(element.context, am4charts.PieChart);\n // Add data\n chart.data = $scope.data.data;\n chart.legend = new am4charts.Legend();\n chart.legend.valueLabels.template.textAlign = \"start\";\n chart.logo.disabled = true;\n var myColors = $scope.data.colors;\n\n // Set inner radius\n chart.innerRadius = am4core.percent(50);\n\n // Add and configure Series\n var pieSeries = chart.series.push(new am4charts.PieSeries());\n pieSeries.dataFields.value = \"value\";\n pieSeries.dataFields.category = \"key\";\n pieSeries.colors.list = getColors(myColors);\n pieSeries.legendSettings.valueText = \" : [bold]{value}\";\n // This creates initial animation\n pieSeries.hiddenState.properties.opacity = 1;\n pieSeries.hiddenState.properties.endAngle = -90;\n pieSeries.hiddenState.properties.startAngle = -90;\n // This creates texts inside pie's\n pieSeries.ticks.template.disabled = true;\n pieSeries.alignLabels = false;\n pieSeries.labels.template.text = \"{value.percent.formatNumber('#.0')}%\";\n pieSeries.labels.template.fill = am4core.color(\"white\");\n pieSeries.labels.template.radius = -27;\n\n pieSeries.labels.template.adapter.add(\"radius\", function (radius, target) {\n if (target.dataItem && (target.dataItem.values.value.percent < 5)) {\n return 0;\n }\n return radius;\n });\n\n pieSeries.labels.template.adapter.add(\"fill\", function (color, target) {\n if (target.dataItem && (target.dataItem.values.value.percent < 5)) {\n return am4core.color(\"#000\");\n }\n return color;\n });\n\n return chart;\n }\n\n function getColors(myColors) {\n var list = []\n for (var i = 0; i < myColors.length; i++) {\n list.push(am4core.color(myColors[i]))\n }\n return list;\n }\n\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('app.report')\n .directive('matrixchart', ChartDirective);\n\n am4core.useTheme(am4themes_animated);\n /** @ngInject */\n function ChartDirective($translate) {\n var chart;\n return {\n restrict: \"E\",\n scope: {\n chartId: '@',\n data: '=',\n refresh: '='\n },\n template: '
',\n replace: true,\n link: function ($scope, element, attrs) {\n // $scope.$watch('data', function () {\n $scope.$watch(function () {\n return $scope.data;\n }, function (newValue, oldValue) {\n if (!angular.equals(oldValue, newValue)) {\n chart.dispose();\n chart = drawChart();\n }\n else if ($scope.data) {\n chart = drawChart();\n }\n }, true);\n\n $scope.$watch(function () {\n return $scope.refresh;\n }, function (newValue, oldValue) {\n if (newValue) {\n chart.dispose();\n chart = drawChart();\n $scope.refresh = false;\n }\n }, true);\n\n function drawChart() {\n var chart = am4core.create(element.context, am4charts.XYChart);\n /*\n chart.exporting.menu = new am4core.ExportMenu();\n chart.exporting.menu.items = [{\n \"menu\": [\n { \"type\": \"png\", \"label\": \"PNG\" }\n ]\n }];\n chart.exporting.menu.items[0].icon = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAQAAABLCVATAAABB0lEQVR4Ae3UMU4CQRhA4Y+Y2JlspY3AVbiFVHgTgUosCA0cQz0CmxhPoCVaz1a7nmBtJxslO2Nl9L1uipfMP5nfX+Tcu7bjmwuJnHnVfuGLMwmcetZ+45NTRxhYCtpEg6UBMSttpnfENNmhmpg2336h2t7W1l6dHwqmYqZCTujgUpexQ2ooGIHC3N7eXAFGQlpoBibqaFoTMEsJNQYo1J3BFxho+ocewULbcQHu+4c2oNQNlWDTP7Q+Glr3Dz30uFrSsJvOaYETHznP30SZCbjWpoQqQ1BYKJUWCjBUpX+Rce4X6VqZirkSfrZGdnbK7DWSoJiQnQnE3GaHVjrcqJIjlaVfzD+fD+Z/xXpDJH0AAAAASUVORK5CYII=\";\n chart.exporting.filePrefix = \"ComparisionTable\";\n */\n chart.logo.disabled = true;\n chart.hiddenState.properties.opacity = 0; // this creates initial fade-\n chart.maskBullets = true;\n\n var xAxis = chart.xAxes.push(new am4charts.CategoryAxis());\n var yAxis = chart.yAxes.push(new am4charts.CategoryAxis());\n\n xAxis.dataFields.category = \"x\";\n yAxis.dataFields.category = \"y\";\n\n xAxis.renderer.grid.template.disabled = true;\n xAxis.renderer.minGridDistance = 40;\n xAxis.renderer.labels.template.wrap = true;\n yAxis.renderer.labels.template.wrap = true;\n yAxis.renderer.labels.template.maxWidth = 400;\n yAxis.renderer.grid.template.disabled = true;\n yAxis.renderer.inversed = true;\n yAxis.renderer.minGridDistance = 30;\n yAxis.renderer.labels.template.align = \"left\";\n yAxis.renderer.labels.template.textAlign = \"left\";\n\n var series = chart.series.push(new am4charts.ColumnSeries());\n series.dataFields.categoryX = \"x\";\n series.dataFields.categoryY = \"y\";\n series.dataFields.value = \"positivePercent\";\n series.sequencedInterpolation = true;\n series.defaultState.transitionDuration = 3000;\n series.tooltip.getFillFromObject = false;\n series.tooltip.background.fill = am4core.color(\"#1B5E20\");\n //series.fillOpacity = 0;\n //series.opacity = 0;\n\n var series1 = chart.series.push(new am4charts.ColumnSeries());\n series1.dataFields.categoryX = \"x\";\n series1.dataFields.categoryY = \"y\";\n series1.dataFields.value = \"negativePercent\";\n series1.sequencedInterpolation = true;\n series1.defaultState.transitionDuration = 3000;\n series1.fillOpacity = 0;\n series1.opacity = 0;\n series1.tooltip.getFillFromObject = false;\n series1.tooltip.background.fill = am4core.color(\"#b71c1c\");\n // Set up column appearance\n var column = series.columns.template;\n column.strokeWidth = 2;\n column.strokeOpacity = 1;\n column.stroke = am4core.color(\"#ffffff\");\n //column.tooltipText = \"{x}, {y}: {value.workingValue.formatNumber('#.')}\";\n column.width = am4core.percent(100);\n column.height = am4core.percent(100);\n column.column.cornerRadius(6, 6, 6, 6);\n column.propertyFields.fill = \"color\";\n column.propertyFields.fillOpacity = \"opacity\";\n\n var column1 = series1.columns.template;\n column1.strokeWidth = 2;\n column1.strokeOpacity = 0;\n column1.stroke = am4core.color(\"#000000\");\n //column1.tooltipText = \"{x}, {y}: {value.workingValue.formatNumber('#.')}\";\n column1.width = am4core.percent(100);\n column1.height = am4core.percent(100);\n //column1.fillOpacity = 0;\n //column1.opacity = 0;\n column1.column.cornerRadius(0, 0, 0, 0);\n //column1.propertyFields.opacity = 0;\n column1.propertyFields.fill = \"color\";\n column1.propertyFields.fillOpacity = 0.8;\n //column1.propertyFields.fillOpacity = 0.5;\n\n // Set up bullet appearance\n var bullet1 = series.bullets.push(new am4charts.CircleBullet());\n bullet1.circle.propertyFields.radius = \"positiveRadius\";\n bullet1.circle.fill = am4core.color(\"#1B5E20\");\n if ($translate.use() === \"tr\") {\n bullet1.tooltipText = \"Olumlu Adedi : [bold]{positive}[/]\";\n } else {\n bullet1.tooltipText = \"Positive Count : [bold]{positive}[/]\";\n }\n bullet1.stroke = am4core.color(\"#1B5E20\");\n bullet1.circle.strokeWidth = 0;\n bullet1.circle.fillOpacity = 0.7;\n bullet1.interactionsEnabled = true;\n\n var bullet2 = series.bullets.push(new am4charts.LabelBullet());\n bullet2.label.text = \"% {value}\";\n bullet2.label.fill = am4core.color(\"#fff\");\n bullet2.zIndex = 1;\n bullet2.fontSize = 11;\n bullet2.interactionsEnabled = false;\n\n var bullet3 = series1.bullets.push(new am4charts.CircleBullet());\n bullet3.circle.propertyFields.radius = \"negativeRadius\";\n bullet3.circle.fill = am4core.color(\"#b71c1c\");\n if ($translate.use() === \"tr\") {\n bullet3.tooltipText = \"Olumsuz Adedi : [bold]{negative}[/]\";\n } else {\n bullet3.tooltipText = \"Negative Count : [bold]{negative}[/]\";\n }\n bullet3.stroke = am4core.color(\"#b71c1c\");\n bullet3.circle.strokeWidth = 0;\n bullet3.circle.fillOpacity = 0.7;\n bullet3.interactionsEnabled = true;\n\n var bullet4 = series1.bullets.push(new am4charts.LabelBullet());\n bullet4.label.text = \"% {value}\";\n bullet4.label.fill = am4core.color(\"#fff\");\n bullet4.zIndex = 1;\n bullet4.fontSize = 11;\n bullet4.interactionsEnabled = false;\n\n var color = {\n \"positive\": \"#66BB6A\",\n \"negative\": \"#ef5350\"\n }\n chart.data = $scope.data;\n\n\n var redColors = [\n \"#ffebee\", \"#ffcdd2\", \"#ef9a9a\", \"#e57373\", \"#ef5350\", \"#f44336\", \"#e53935\", \"#d32f2f\", \"#c62828\", \"#b71c1c\"\n ];\n\n var greenColors = [\n \"#e8f5e9\", \"#c8e6c9\", \"#a5d6a7\", \"#81c784\", \"#66bb6a\", \"#4caf50\", \"#43a047\", \"#388e3c\", \"#2e7d32\", \"#1b5e20\"\n ];\n\n $scope.$on(\"$destroy\", function () {\n chart.dispose();\n });\n\n //});\n\n xAxis.events.on(\"sizechanged\", function (ev) {\n var axis = ev.target;\n var cellWidth = axis.pixelWidth / (axis.endIndex - axis.startIndex);\n axis.renderer.labels.template.maxWidth = cellWidth;\n });\n\n return chart;\n }\n\n\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('app.report')\n .directive('linechart', LineChartDirective);\n\n am4core.useTheme(am4themes_animated);\n /** @ngInject */\n function LineChartDirective($stateParams, $translate) {\n var chart;\n return {\n restrict: \"E\",\n scope: {\n chartId: '@',\n data: '=',\n refresh: '='\n },\n template: '
',\n replace: true,\n link: function ($scope, element, attrs) {\n // $scope.$watch('data', function () {\n $scope.$watch(function () {\n return $scope.data;\n }, function (newValue, oldValue) {\n if (!angular.equals(oldValue, newValue)) {\n //chart.dispose();\n chart = drawChart();\n }\n else if ($scope.data) {\n chart = drawChart();\n }\n }, true);\n\n $scope.$watch(function () {\n return $scope.refresh;\n }, function (newValue, oldValue) {\n if (newValue) {\n //chart.dispose();\n chart = drawChart();\n $scope.refresh = false;\n }\n }, true);\n\n function drawChart() {\n var chart = am4core.create(element.context, am4charts.XYChart);\n chart.logo.disabled = true;\n chart.language.locale = am4lang_tr_TR;\n var data = $scope.data;\n var dateAxis = chart.xAxes.push(new am4charts.DateAxis());\n var valueAxis = chart.yAxes.push(new am4charts.ValueAxis());\n\n calculateUniqeuDatesAndAddEmptyValues(data);\n //colors = [\"#D4AC0D\",\"#F4D03F\"]\n\n for (var i = 0; i < data.length; i++) {\n createSeries(data[i], chart, i);\n }\n\n chart.legend = new am4charts.Legend();\n chart.legend.position = \"bottom\";\n chart.legend.scrollable = true;\n chart.legend.itemContainers.template.events.on(\"over\", function (event) {\n processOver(event.target.dataItem.dataContext, chart);\n })\n\n chart.legend.itemContainers.template.events.on(\"out\", function (event) {\n processOut(event.target.dataItem.dataContext, chart);\n })\n chart.cursor = new am4charts.XYCursor();\n chart.numberFormatter.numberFormat = \"#.00\";\n\n return chart;\n }\n\n function createSeries(data, chart, i) {\n Object.keys(data).forEach(function (key, index) {\n if (key == \"selectedTimelineValue\" || key==\"fieldYNickname\" || key==\"allDataNickname\") return;\n var series = chart.series.push(new am4charts.LineSeries());\n\n series.dataFields.valueY = \"value\";\n series.dataFields.dateX = \"date\";\n series.strokeWidth = 2;\n if (key == \"result\") {\n series.name = data.selectedTimelineValue + \" (\" + data.fieldYNickname + \")\";\n series.strokeDasharray = \"3,4\";\n series.tensionX = 0.77;\n if (i == 1) series.stroke = am4core.color(\"#D4AC0D\");\n } else {\n var general = data.allDataNickname ? data.allDataNickname : $translate.instant('REPORT.DASHBOARD_TEMPLATE_3.GENERAL');\n series.name = data.selectedTimelineValue + \" (\" + general + \")\";\n if (i == 1) series.stroke = am4core.color(\"#F4D03F\");\n }\n series.tooltipText = \"{name}\\nDeğer: {valueY}[/]\";\n var segment = series.segments.template;\n segment.interactionsEnabled = true;\n\n var hoverState = segment.states.create(\"hover\");\n hoverState.properties.strokeWidth = 3;\n\n var dimmed = segment.states.create(\"dimmed\");\n dimmed.properties.stroke = am4core.color(\"#dadada\");\n\n segment.events.on(\"over\", function (event) {\n processOver(event.target.parent.parent.parent, chart);\n });\n\n segment.events.on(\"out\", function (event) {\n processOut(event.target.parent.parent.parent, chart);\n });\n\n data[key] = data[key].sort(function (a, b) {\n a = new Date(a.date);\n b = new Date(b.date);\n return a < b ? -1 : a > b ? 1 : 0;\n })\n series.data = data[key];\n });\n }\n\n function processOver(hoveredSeries, chart) {\n hoveredSeries.toFront();\n\n hoveredSeries.segments.each(function (segment) {\n segment.setState(\"hover\");\n })\n\n chart.series.each(function (series) {\n if (series != hoveredSeries) {\n series.segments.each(function (segment) {\n segment.setState(\"dimmed\");\n })\n series.bulletsContainer.setState(\"dimmed\");\n }\n });\n }\n\n function processOut(hoveredSeries, chart) {\n chart.series.each(function (series) {\n series.segments.each(function (segment) {\n segment.setState(\"default\");\n })\n series.bulletsContainer.setState(\"default\");\n });\n }\n\n function calculateUniqeuDatesAndAddEmptyValues(data) {\n var uniqueDates = [];\n for (var i = 0; i < data.length; i++) {\n Object.keys(data[i]).forEach(function (key) {\n if (key != \"selectedTimelineValue\" && key != \"fieldYNickname\" && key!=\"allDataNickname\") {\n for (var j = 0; j < data[i][key].length; j++) {\n if (!uniqueDates.includes(data[i][key][j].date)) {\n uniqueDates.push(data[i][key][j].date);\n }\n }\n }\n });\n }\n \n for (var k = 0; k < uniqueDates.length; k++) {\n for (var i = 0; i < data.length; i++) {\n Object.keys(data[i]).forEach(function (key) {\n if (key != \"selectedTimelineValue\" && key != \"fieldYNickname\" && key!= \"allDataNickname\" && data[i][key].filter(function (e) { return e.date === uniqueDates[k]; }).length == 0) {\n data[i][key].push({\n date: uniqueDates[k],\n value: 0\n })\n }\n });\n }\n }\n \n\n }\n\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('app.report')\n .directive('keywordschart', keywordschartDirective);\n\n am4core.useTheme(am4themes_animated);\n /** @ngInject */\n function keywordschartDirective($state, ReportService, $q) {\n var chart;\n return {\n restrict: \"E\",\n scope: {\n chartId: '@',\n data: '=',\n refresh: '='\n },\n template: '
',\n replace: true,\n link: function ($scope, element, attrs) {\n // $scope.$watch('data', function () {\n $scope.$watch(function () {\n return $scope.data;\n }, function (newValue, oldValue) {\n if (!angular.equals(oldValue, newValue)) {\n //chart.dispose();\n chart = drawChart();\n }\n else if ($scope.data) {\n chart = drawChart();\n }\n }, true);\n\n $scope.$watch(function () {\n return $scope.refresh;\n }, function (newValue, oldValue) {\n if (newValue) {\n //chart.dispose();\n chart = drawChart();\n $scope.refresh = false;\n }\n }, true);\n\n //drawChart();\n\n function drawChart() {\n var chart = am4core.create(element.context, am4plugins_wordCloud.WordCloud);\n chart.logo.disabled = true;\n /*\n chart.exporting.menu = new am4core.ExportMenu();\n chart.exporting.menu.items = [{\n \"menu\": [\n { \"type\": \"png\", \"label\": \"PNG\" }\n ]\n }];\n chart.exporting.menu.items[0].icon = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAQAAABLCVATAAABB0lEQVR4Ae3UMU4CQRhA4Y+Y2JlspY3AVbiFVHgTgUosCA0cQz0CmxhPoCVaz1a7nmBtJxslO2Nl9L1uipfMP5nfX+Tcu7bjmwuJnHnVfuGLMwmcetZ+45NTRxhYCtpEg6UBMSttpnfENNmhmpg2336h2t7W1l6dHwqmYqZCTujgUpexQ2ooGIHC3N7eXAFGQlpoBibqaFoTMEsJNQYo1J3BFxho+ocewULbcQHu+4c2oNQNlWDTP7Q+Glr3Dz30uFrSsJvOaYETHznP30SZCbjWpoQqQ1BYKJUWCjBUpX+Rce4X6VqZirkSfrZGdnbK7DWSoJiQnQnE3GaHVjrcqJIjlaVfzD+fD+Z/xXpDJH0AAAAASUVORK5CYII=\";\n chart.exporting.filePrefix = \"Keywords\";\n */\n var series = chart.series.push(new am4plugins_wordCloud.WordCloudSeries());\n series.text = \"Lorem impsum...\";\n series.accuracy = 4;\n series.step = 15;\n series.rotationThreshold = 0.7;\n series.maxCount = 200;\n series.minWordLength = 2;\n series.angles = [0]\n series.maxFontSize = am4core.percent(15);\n series.maxFontSize = am4core.percent(20);\n series.excludeWords = [\"the\", \"an\", \"to\"];\n series.randomness = 0.4\n series.data = $scope.data;\n\n series.dataFields.word = \"text\";\n series.dataFields.value = \"weight\";\n\n series.colors = new am4core.ColorSet();\n series.colors.passOptions = {};\n series.labels.template.events.on(\"hit\", function (ev) {\n $state.go('app.report.data', {\n id: ev.target.dataItem.dataContext.reportId,\n query: ev.target.dataItem.dataContext.parameters\n }, { reload: true });\n });\n\n series.labels.template.events.on(\"rightclick\", function (ev) {\n var promises = [ReportService.addStopLabel($scope, $state, ev, ev.target.dataItem.dataContext.text)];\n $q.all(promises).then(function (results) {\n if (results[0]) {\n ev.target.dataItem.dataContext.rightClickFunc([ev.target.dataItem.dataContext.text])\n }\n }, function (error) {\n $log.error(error);\n })\n });\n\n return chart;\n }\n\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('app.report')\n .directive('horizontalbubblechart', HorizontalBubbleChartDirective);\n\n am4core.useTheme(am4themes_animated);\n /** @ngInject */\n function HorizontalBubbleChartDirective($translate) {\n var others = $translate.use() == \"tr\" ? \"Diğerleri\" : \"Others\";\n return {\n restrict: \"E\",\n scope: {\n chartId: '@',\n data: '=',\n bubbleClick: '&'\n },\n template: '',\n replace: true,\n link: function ($scope, element, attrs) {\n $scope.$watch(function () {\n return $scope.data;\n }, function (newValue, oldValue) {\n if (!angular.equals(oldValue, newValue) ||$scope.data) {\n \n\n var textPadding = 4;\n\n var arc_ratio = 0.83;\n\n var onArc = false;\n // space between bubbles\n var padding = 3;\n //var padding = scale/4+tickConst + tickSizeDependent;\n\n var arc_space = 0.15;//angle\n //text padding in bubble\n //var xPadding = scale/5;\n var xPadding = 10;\n var font_family = '\"Roboto\", \"Helvetica Neue\", \"Arial\", sans - serif';\n var font_weight = \"400\";\n var level = -1;\n if($scope.data.level || $scope.data.level == 0){\n level =$scope.data.level;\n }\n var maxCategoryCount = 10;\n if(level == 0 && maxCategoryCount>6){\n maxCategoryCount = 6;// overflow in chart for more categories in first level.\n }\n\n\n\n // ===========================\n // ancillary geometric classes\n // ===========================\n var Point = function (x, y) {\n this.x = x;\n this.y = y;\n }\n\n Point.prototype = {\n dist: function (p) { return this.vect(p).norm(); },\n vect: function (p) { return new Point(p.x - this.x, p.y - this.y); },\n norm: function (p) { return Math.sqrt(this.x * this.x + this.y * this.y); },\n add: function (v) { return new Point(this.x + v.x, this.y + v.y); },\n mult: function (a) { return new Point(this.x * a, this.y * a); }\n };\n var Circle = function (radius, center) {\n this.r = radius;\n this.c = center;\n };\n\n Circle.prototype = {\n surface: function () { return Math.PI * this.r * this.r; },\n distance: function (circle) { return this.c.dist(circle.c) - this.r - circle.r; }\n };\n\n\n // =========================\n // circle packer lives here!\n // =========================\n var Packer = function (circles, ratio) {\n this.circles = circles;\n this.ratio = ratio || 1;\n this.list = this.solve();\n }\n\n Packer.prototype = {\n // try to fit all circles into a rectangle of a given surface\n compute: function (surface) {\n // check if a circle is inside our rectangle\n function in_rect(radius, center) {\n if (center.x - radius < - w / 2) return false;\n if (center.x + radius > w / 2) return false;\n if (center.y - radius < - h / 2) return false;\n if (center.y + radius > h / 2) return false;\n return true;\n }\n\n // approximate a segment with an \"infinite\" radius circle\n var bounding_circle = function (x0, y0, x1, y1) {\n var xm = Math.abs((x1 - x0) * w);\n var ym = Math.abs((y1 - y0) * h);\n var m = xm > ym ? xm : ym;\n var theta = Math.asin(m / 4 / bounding_r);\n var r = bounding_r * Math.cos(theta);\n return new Circle(bounding_r,\n new Point(r * (y0 - y1) / 2 + (x0 + x1) * w / 4,\n r * (x1 - x0) / 2 + (y0 + y1) * h / 4));\n }\n\n // return the corner placements for two circles\n var corner = function (radius, c1, c2) {\n var u = c1.c.vect(c2.c); // c1 to c2 vector\n var A = u.norm();\n if (A == 0) return [] // same centers\n u = u.mult(1 / A); // c1 to c2 unary vector\n // compute c1 and c2 intersection coordinates in (u,v) base\n var B = c1.r + radius;\n var C = c2.r + radius;\n if (A > (B + C)) return []; // too far apart\n var x = (A + (B * B - C * C) / A) / 2;\n var y = Math.sqrt(B * B - x * x);\n var base = c1.c.add(u.mult(x));\n\n var res = [];\n var p1 = new Point(base.x - u.y * y, base.y + u.x * y);\n var p2 = new Point(base.x + u.y * y, base.y - u.x * y);\n if (in_rect(radius, p1)) res.push(new Circle(radius, p1));\n if (in_rect(radius, p2)) res.push(new Circle(radius, p2));\n return res;\n }\n\n /////////////////////////////////////////////////////////////////\n\n // deduce starting dimensions from surface\n var bounding_r = Math.sqrt(surface) * 100; // \"infinite\" radius\n var w = Math.sqrt(surface * this.ratio);\n this.w = Math.sqrt(surface * this.ratio);\n var h = this.w / this.ratio;\n this.h = this.w / this.ratio;\n\n // place our bounding circles\n var placed = [\n bounding_circle(1, 1, 1, -1),\n bounding_circle(1, -1, -1, -1),\n bounding_circle(-1, -1, -1, 1),\n bounding_circle(-1, 1, 1, 1)];\n\n // Initialize our rectangles list\n var unplaced = this.circles.slice(0); // clones the array\n while (unplaced.length > 0) {\n // compute all possible placements of the unplaced circles\n var lambda = {};\n var circle = {};\n for (var i = 0; i != unplaced.length; i++) {\n var lambda_min = 1e10;\n lambda[i] = -1e10;\n // match current circle against all possible pairs of placed circles\n for (var j = 0; j < placed.length; j++)\n for (var k = j + 1; k < placed.length; k++) {\n // find corner placement\n if (k > 3) {\n var zog = 1;\n }\n var corners = corner(unplaced[i], placed[j], placed[k]);\n\n // check each placement\n for (var c = 0; c != corners.length; c++) {\n // check for overlap and compute min distance\n var d_min = 1e10;\n for (var l = 0; l != placed.length; l++) {\n // skip the two circles used for the placement\n if (l == j || l == k) continue;\n\n // compute distance from current circle\n var d = placed[l].distance(corners[c]);\n if (d < 0) break; // circles overlap\n\n if (d < d_min) d_min = d;\n }\n if (l == placed.length) // no overlap\n {\n if (d_min < lambda_min) {\n lambda_min = d_min;\n lambda[i] = 1 - d_min / unplaced[i];\n circle[i] = corners[c];\n }\n }\n }\n }\n }\n\n // select the circle with maximal gain\n var lambda_max = -1e10;\n var i_max = -1;\n for (var i = 0; i != unplaced.length; i++) {\n if (lambda[i] > lambda_max) {\n lambda_max = lambda[i];\n i_max = i;\n }\n }\n\n // failure if no circle fits\n if (i_max == -1) break;\n\n // place the selected circle\n unplaced.splice(i_max, 1);\n placed.push(circle[i_max]);\n }\n\n // return all placed circles except the four bounding circles\n this.tmp_bounds = placed.splice(0, 4);\n return placed;\n },\n\n // find the smallest rectangle to fit all circles\n solve: function () {\n // compute total surface of the circles\n var surface = 0;\n for (var i = 0; i != this.circles.length; i++) {\n surface += Math.PI * Math.pow(this.circles[i], 2);\n }\n // set a suitable precision\n var limit = surface / 1000;\n var step = surface / 2;\n var res = [];\n while (step > limit) {\n var placement = this.compute.call(this, surface);\n if (placement.length != this.circles.length) {\n surface += step;\n }\n else {\n res = placement;\n this.bounds = this.tmp_bounds;\n surface -= step;\n }\n step /= 2;\n }\n return res;\n }\n };\n\n var canvas = {};\n\n // ====\n // demo\n // ====\n var draw_result = function (packer) {\n var draw_circle = function (circle) {\n ctx.beginPath();\n ctx.arc((circle.c.x + dx) * zoom + mx, (circle.c.y + dy) * zoom + my, circle.r * zoom, 0, 2 * Math.PI);\n ctx.closePath();\n ctx.stroke();\n }\n\n canvas = document.getElementById('graph');\n var ctx = canvas.getContext(\"2d\");\n canvas.width += 0; // clear canvas\n var margin_factor = 0.1;\n\n var mx = canvas.width * margin_factor / 2;\n var my = canvas.height * margin_factor / 2;\n var dx = packer.w / 2;\n var dy = packer.h / 2;\n var zx = canvas.width * (1 - margin_factor) / packer.w;\n var zy = canvas.height * (1 - margin_factor) / packer.h;\n var zoom = zx < zy ? zx : zy;\n\n // draw all circles\n ctx.strokeStyle = 'black';\n for (var i = 0; i != packer.list.length; i++)\n draw_circle(packer.list[i]);\n\n }\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n var fitText = function (text, lineHeight, context) {\n const word = text.split(/\\s+/g); // To hyphenate: /\\s+|(?<=-)/\n if (!word[word.length - 1]) word.pop();\n if (!word[0]) word.shift();\n var words = word;\n\n var measureWidth = function (text) { return context.measureText(text).width; }\n var targetWidth = Math.sqrt(measureWidth(text.trim()) * lineHeight)\n var line;\n var lineWidth0 = Infinity;\n var lines = [];\n for (var i = 0, n = words.length; i < n; ++i) {\n var lineText1 = (line ? line.text + \" \" : \"\") + words[i];\n var lineWidth1 = \"\";\n lineWidth1 = measureWidth(lineText1);\n /*if ((lineWidth0 + lineWidth1) / 2 < targetWidth) {\n line.width = lineWidth0 = lineWidth1;\n line.text = lineText1;\n } else {*/\n if (words[i].length < 3) {\n lineWidth0 = measureWidth(\"A\");\n } else {\n lineWidth0 = measureWidth(words[i]);\n }\n\n line = { width: lineWidth0, text: words[i] };\n lines.push(line);\n // }\n }\n var textRadius = 0;\n for (var i = 0, n = lines.length; i < n; ++i) {\n const dy = (Math.abs(i - n / 2 + 0.5) + 0.5) * lineHeight;\n const dx = lines[i].width / 2;\n textRadius = Math.max(textRadius, Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2)));\n }\n return {\n textRadius: textRadius,\n lines: lines\n };\n //return [textRadius, lines];\n }\n\n var getData = function () {\n var json = $scope.data.items;\n var hasSentimentModule = $scope.data.hasSentimentModule;\n var groupOrder = 1;\n if($scope.data.groupOrder){\n groupOrder = $scope.data.groupOrder;\n }\n //level = $scope.data.level;\n var datas = [];\n var i;\n var j;\n var sum = [0, 0, 0];\n if(!hasSentimentModule){\n sum.push(0);\n }\n //datas.push([\"Uçuş Deneyimi\", sum,0,'classm14_ss','Uçuş Deneyimi']);\n for (i = 0; i < json[0]['values'].length; i++) {\n var ps = [json[0]['values'][i]['x'], [json[0]['values'][i]['y'], json[1]['values'][i]['y'], json[2]['values'][i]['y']]]\n if(!hasSentimentModule){\n ps[1].push(json[3]['values'][i]['y']);\n }\n ps['label'] = json[0]['values'][i]['label'];\n ps['categoryId'] = json[0]['values'][i]['categoryId'];\n ps['fieldName'] = json[0]['values'][i]['fieldName'];\n ps['docCount'] = json[0]['values'][i]['docCount'];\n ps['facet'] = json[0]['values'][i]['facet'];\n ps['hasSubs'] = json[0]['values'][i]['hasSubs'];\n var visibleName = json[0]['values'][i]['visibleName'];\n if(visibleName===undefined || visibleName === null){\n ps['visibleName'] = json[0]['values'][i]['x']; \n }else{\n ps['visibleName'] = visibleName;\n } \n datas.push(ps);\n\n sum[0] += json[0]['values'][i]['y'];\n sum[1] += json[1]['values'][i]['y'];\n sum[2] += json[2]['values'][i]['y'];\n if(!hasSentimentModule){\n sum[3] += json[3]['values'][i]['y'];\n }\n }\n if (level != 0) {\n datas.sort(function (a, b) { return d3.sum(b[1]) - d3.sum(a[1]) });\n }\n if(datas && datas.length >= maxCategoryCount)\n datas = summarizeDataToNCategories(datas,maxCategoryCount,groupOrder,hasSentimentModule);\n return datas;\n }\n\n //n => maxCategoryCount\n //if grouporder=1-> data[0:n], if groupOrder=2-> data[n:2n], ...\n var summarizeDataToNCategories = function (data,n,groupOrder,hasSentimentModule){\n data = data.slice((n-1)*(groupOrder-1),data.length);\n if(data.length<=n){\n return data;\n }\n var dataNew = data.slice(0,n-1);\n var dataSummarize = data.slice(n-1,data.length);\n var dataSummarized = [];\n dataSummarized.push(others);\n var summaryDocCount = dataSummarize.map(function(d){return d['docCount'];}).reduce(function(sum, current){return sum+current;});\n var summarySentiments = [dataSummarize.map(function(d){return d[1][0];}).reduce(function(sum, current){return sum+current;}),\n dataSummarize.map(function(d){return d[1][1];}).reduce(function(sum, current){return sum+current;}),\n dataSummarize.map(function(d){return d[1][2];}).reduce(function(sum, current){return sum+current;})];\n if(!hasSentimentModule){\n summarySentiments.push(dataSummarize.map(function(d){return d[1][3];}).reduce(function(sum, current){return sum+current;}));\n }\n dataSummarized.push(summarySentiments);\n dataSummarized['label'] = others;\n dataSummarized['categoryId'] = -1;\n dataSummarized['fieldName'] = null;\n dataSummarized['docCount'] = summaryDocCount;\n dataSummarized['hasSubs'] = true;\n dataSummarized['visibleName'] = others;\n dataNew.push(dataSummarized); \n return dataNew;\n }\n var getColors = function () {\n var json = $scope.data.items;\n var i;\n var colors = []\n for (i = 0; i < json.length; i++) {\n colors.push(json[i]['color'])\n }\n return colors;\n }\n\n\n var getCircleData = function (pieData, minRadius, maxRadius) {\n var radiuses = []\n for (var i = 0; i < pieData.length; i++) {\n radiuses.push(d3.sum(pieData[i][1]));\n }\n if (d3.min(radiuses) == d3.max(radiuses)) {\n return radiuses.map(function (x) { return maxRadius; });\n } else {\n var minr = d3.min(radiuses);\n var maxr = d3.max(radiuses);\n var changeRatio = (maxRadius - minRadius) / (maxr - minr);\n radiuses = radiuses.map(function (x) { return (x - minr) * changeRatio + minRadius; });\n return radiuses;\n }\n\n }\n\n var setMinMaxRadius = function(numberOfCategories){\n if(numberOfCategories<=2){\n minRadius = 70;\n maxRadius = 80;\n }else if(numberOfCategories<=4){\n minRadius = 60;\n maxRadius = 80;\n }else if(numberOfCategories<=5){\n minRadius = 55;\n maxRadius = 70;\n }else if(numberOfCategories<=6){\n minRadius = 55;\n maxRadius = 65;\n }else if(numberOfCategories<=8){\n minRadius = 55;\n maxRadius = 75;\n }else{\n minRadius = 50;\n maxRadius = 60;//assuming maxCategoryCount is 10\n }\n }\n\n var pieData = getData();\n var minRadius;\n var maxRadius;\n setMinMaxRadius(pieData.length);\n var circleRadiuses = getCircleData(pieData, minRadius, maxRadius);\n\n //packer rectangle width-height ratio\n var width = 600;\n var height = 300;\n var ratio = width/height;\n\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n var draw = function (radiuses, ratio) {\n if (radiuses.length == 1) {\n ratio = 1;\n }\n var packer = new Packer(radiuses, ratio);\n if (packer.list.length == 0) {\n ratio = 1;\n packer = new Packer(radiuses, ratio);\n }\n draw_result(packer);\n return packer.list;\n };\n\n if (level === 0) {\n var mx = maxRadius;\n var sudodata = [];\n for (var i = 0; i < circleRadiuses.length; i++) {\n sudodata.push(mx);\n }\n var packy = draw(sudodata, ratio);\n for (var i = 0; i < packy.length; i++) {\n packy[i].r = circleRadiuses[packy.length - i - 1];\n }\n } else {\n var packy = draw(circleRadiuses, ratio);\n }\n\n\n var sortLevel0 = function (packy, pieData) {\n var orders = [];\n var r_s = [];\n for (var i = 0; i < pieData.length; i++) {\n orders.push(d3.sum(pieData[i][1]));\n r_s.push(packy[i].r);\n }\n for (var i = 0; i < orders.length; i++) {\n var ind = orders.indexOf(d3.max(orders));\n orders[ind] = -1;\n var ind2 = r_s.indexOf(d3.max(r_s));\n packy[orders.length - 1 - ind] = { 'r': r_s[ind2], 'c': packy[orders.length - 1 - ind].c };\n r_s[ind2] = -1;\n }\n return packy;\n }\n\n\n var nodes = d3.range(circleRadiuses.length).map(function (ind_) {\n var d = {\n radius: circleRadiuses[ind_]\n };\n return d;\n });\n\n var tip = d3.tip()\n .attr('class', 'd3-tip')\n .html(function (d) {\n return \"%\" + d.percent;\n //return \"%\" + (100 * (d.endAngle + arc_space - d.startAngle) / (2 * Math.PI)).toFixed(0);\n });\n\n var tipText = d3.tip()\n .attr('class', 'd3-tip')\n .html(function (d) {\n return d['visibleName'] + '
' + numberWithCommas(d[\"docCount\"]);\n });\n\n function numberWithCommas(x) {\n return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n }\n\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n //////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n d3.select(\"#bubblechart svg\").remove();\n var svg = d3.select(\"#bubblechart\").append(\"svg\")\n .attr(\"width\", width)\n .attr(\"height\", height)\n .attr(\"text-anchor\", \"middle\");\n\n svg.call(tip);\n svg.call(tipText);\n\n var pies = svg.selectAll(\".pie\")\n .data(nodes).enter().append(\"g\")\n .attr(\"class\", \"pie\")\n ;\n\n\n var colors = getColors();\n\n var pie_ = function (dat_) {\n\n var dat = dat_.slice();\n\n var pie = d3.layout.pie()\n .sort(null)\n .value(function (dd) {\n return dd;\n });\n\n var sum = 0;\n var newDat = [];\n for (var i = 0; i < dat.length; i++) {\n newDat.push(dat[i]);\n sum += dat[i];\n }\n for (var i = 0; i < dat.length; i++) {\n if (dat[i] < sum / 25) {\n dat[i] = sum / 25;\n }\n }\n var pied = pie(dat);\n for (var i = 0; i < pied.length; i++) {\n pied[i].value = newDat[i];\n pied[i].data = newDat[i];\n pied[i].percent = (100 * newDat[i] / sum).toFixed(0);\n }\n return pied;\n }\n\n if (level != 0) {\n packy.sort(function (a, b) { return b.r - a.r; });\n } else {\n packy = sortLevel0(packy, pieData);\n pieData.reverse();\n packy[0].c.y = -maxRadius;\n var shiftRight = (maxCategoryCount -1 ) * 10;\n if(maxCategoryCount == 6){\n shiftRight = 50;\n }else if(maxCategoryCount == 5){\n shiftRight = 20;\n }else{\n shiftRight = -30;\n }\n packy[0].c.x +=shiftRight;\n var angleRatio = 1.41;\n for (var j = 0; j < packy.length - 1; j++) {\n packy[j + 1].c.x = packy[j].c.x - (packy[j].r + packy[j + 1].r) / angleRatio;\n if (j % 2 != 0) {\n packy[j + 1].c.y = packy[j].c.y - (packy[j].r + packy[j + 1].r) / angleRatio;\n } else {\n packy[j + 1].c.y = packy[j].c.y + (packy[j].r + packy[j + 1].r) / angleRatio;\n }\n }\n var miny = 80;\n for (var j = 0; j < packy.length; j++) {\n miny = Math.min(packy[j].c.y, miny);\n }\n miny = miny + maxRadius * arc_ratio;\n if (miny < 0) {\n for (var j = 0; j < packy.length; j++) {\n packy[j].c.y -= miny;\n }\n }\n var minX = 0;\n var maxX = 0;\n for(var j = 0; jwidth/2){\n for(var j = 0; j',\n replace: true,\n link: function ($scope, element, attrs) {\n $scope.$watch(function () {\n return $scope.data;\n }, function (newValue, oldValue) {\n if (!angular.equals(oldValue, newValue)) {\n chartt.dispose();\n chartt = drawChart();\n }\n else if ($scope.data) {\n chartt = drawChart();\n }\n }, true);\n\n $scope.$watch(function () {\n return $scope.refresh;\n }, function (newValue, oldValue) {\n if (newValue) {\n chartt.dispose();\n chartt = drawChart();\n }\n }, true);\n\n $scope.$watch(function () {\n return $scope.data.groupOrder;\n }, function (newValue, oldValue) {\n if (!angular.equals(oldValue, newValue)) {\n chartt.dispose();\n chartt = drawChart();\n }\n }, true);\n var maxCategoryCount = 10;\n var groupOrder = 1;\n if ($scope.data.groupOrder) {\n groupOrder = $scope.data.groupOrder;\n } else {\n $scope.data.groupOrder = 1;\n }\n var summarizeDataToNCategories = function (data, n) {\n var groupOrder = data.groupOrder;\n data.sort(function (b, a) { return a[\"value\"] - b[\"value\"]; });\n data = data.slice((n-1) * (groupOrder - 1), data.length);\n var isThereAnyOtherOrderWithoutZero = false;\n var maxOrder = 0;\n for (var i = 0; i < data.length; i++) {\n if (data[i].facet.order != 0) {\n isThereAnyOtherOrderWithoutZero = true;\n if (data[i].facet.order > maxOrder) {\n maxOrder = data[i].facet.order\n }\n }\n }\n if (data.length <= n) {\n return data.sort(function (b, a) { return b[\"value\"] - a[\"value\"]; });\n }\n var dataNew = data.slice(0, n - 1);\n var dataSummarize = data.slice(n - 1, data.length);\n var dataSummarized = {\n \"category\": others,\n \"aliasCategory\": others,\n \"facet\": { 'count': 0, 'order': 0 },\n \"full\": 0,\n \"negative\": 0,\n \"neutral\": 0,\n \"positive\": 0,\n \"insensitive\": 0,\n \"realNegative\": 0,\n \"realNeutral\": 0,\n \"realPositive\": 0,\n \"realInsensitive\": 0,\n \"ratioNegative\": 0,\n \"ratioNeutral\": 0,\n \"ratioPositive\": 0,\n \"ratioInsensitive\": 0,\n \"value\": 0\n };\n if (isThereAnyOtherOrderWithoutZero) {\n dataSummarized.facet.order = maxOrder + 1;\n }\n var externalCategoryCount = dataSummarize.length;\n dataSummarize.forEach(function (d) {\n dataSummarized[\"facet\"][\"count\"] += d[\"facet\"][\"count\"];\n dataSummarized[\"negative\"] += d[\"negative\"];\n dataSummarized[\"neutral\"] += d[\"neutral\"];\n dataSummarized[\"positive\"] += d[\"positive\"];\n dataSummarized[\"insensitive\"] += d[\"insensitive\"];\n dataSummarized[\"realNegative\"] += d[\"realNegative\"];\n dataSummarized[\"realNeutral\"] += d[\"realNeutral\"];\n dataSummarized[\"realPositive\"] += d[\"realPositive\"];\n dataSummarized[\"realInsensitive\"] += d[\"realInsensitive\"];\n dataSummarized[\"ratioNegative\"] += d[\"ratioNegative\"] / externalCategoryCount;\n dataSummarized[\"ratioNeutral\"] += d[\"ratioNeutral\"] / externalCategoryCount;\n dataSummarized[\"ratioPositive\"] += d[\"ratioPositive\"] / externalCategoryCount;\n dataSummarized[\"ratioInsensitive\"] += d[\"ratioInsensitive\"] / externalCategoryCount;\n dataSummarized[\"value\"] += d[\"value\"];\n });\n if (dataSummarized['value'] > dataSummarize[0]['full']) {\n dataNew.forEach(function (d) { d['full'] = dataSummarized['value'] });\n dataSummarized['full'] = dataSummarized['value'];\n } else {\n dataSummarized['full'] = dataSummarize[0]['full'];\n }\n dataNew.push(dataSummarized);\n dataNew.sort(function (b, a) { return b[\"value\"] - a[\"value\"]; });\n return dataNew;\n }\n\n var drawChart = function () {\n if (!$scope.data)\n return;\n var chart = am4core.create(element.context, am4charts.RadarChart);\n /*\n chart.exporting.menu = new am4core.ExportMenu();\n chart.exporting.menu.items = [{\n \"menu\": [\n { \"type\": \"png\", \"label\": \"PNG\" }\n ]\n }];\n chart.exporting.menu.items[0].icon = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAQAAABLCVATAAABB0lEQVR4Ae3UMU4CQRhA4Y+Y2JlspY3AVbiFVHgTgUosCA0cQz0CmxhPoCVaz1a7nmBtJxslO2Nl9L1uipfMP5nfX+Tcu7bjmwuJnHnVfuGLMwmcetZ+45NTRxhYCtpEg6UBMSttpnfENNmhmpg2336h2t7W1l6dHwqmYqZCTujgUpexQ2ooGIHC3N7eXAFGQlpoBibqaFoTMEsJNQYo1J3BFxho+ocewULbcQHu+4c2oNQNlWDTP7Q+Glr3Dz30uFrSsJvOaYETHznP30SZCbjWpoQqQ1BYKJUWCjBUpX+Rce4X6VqZirkSfrZGdnbK7DWSoJiQnQnE3GaHVjrcqJIjlaVfzD+fD+Z/xXpDJH0AAAAASUVORK5CYII=\";\n chart.exporting.filePrefix = \"CategoryDistribution\";\n */\n chart.logo.disabled = true;\n chart.data = $scope.data;\n var totalCount = 0;\n var maxPercent = 0;\n for (var i = 0; i < chart.data.length; i++) {\n totalCount += (chart.data[i].facet.negative + chart.data[i].facet.positive + chart.data[i].facet.neutral + chart.data[i].facet.insensitive);\n if (maxPercent < ((chart.data[i].facet.count / totalCount) * 100)) {\n maxPercent = ((chart.data[i].facet.count / totalCount) * 100);\n }\n }\n for (var i = 0; i < chart.data.length; i++) {\n chart.data[i].facet.count = chart.data[i].facet.negative + chart.data[i].facet.positive + chart.data[i].facet.neutral + chart.data[i].facet.insensitive;\n chart.data[i].ratioInsensitive = (chart.data[i].facet.insensitive / chart.data[i].facet.count) * 100;\n chart.data[i].ratioNegative = (chart.data[i].facet.negative / chart.data[i].facet.count) * 100;\n chart.data[i].ratioPositive = (chart.data[i].facet.positive / chart.data[i].facet.count) * 100;\n chart.data[i].ratioNeutral = (chart.data[i].facet.neutral / chart.data[i].facet.count) * 100;\n chart.data[i].realInsensitive = (chart.data[i].ratioInsensitive / 100) * ((chart.data[i].facet.count / totalCount) * 100);\n chart.data[i].realNegative = (chart.data[i].ratioNegative / 100) * ((chart.data[i].facet.count / totalCount) * 100);\n chart.data[i].realPositive = (chart.data[i].ratioPositive / 100) * ((chart.data[i].facet.count / totalCount) * 100);\n chart.data[i].realNeutral = (chart.data[i].ratioNeutral / 100) * ((chart.data[i].facet.count / totalCount) * 100);\n chart.data[i].negative = chart.data[i].realNegative;\n chart.data[i].positive = chart.data[i].realNegative + chart.data[i].realPositive;\n chart.data[i].neutral = chart.data[i].realNegative + chart.data[i].realPositive + chart.data[i].realNeutral;\n chart.data[i].insensitive = chart.data[i].realNegative + chart.data[i].realPositive + chart.data[i].realNeutral + chart.data[i].realInsensitive;\n chart.data[i].value = ((chart.data[i].facet.count / totalCount) * 100);\n chart.data[i].full = maxPercent;\n }\n if (chart.data && chart.data.length >= 10)\n chart.data = summarizeDataToNCategories(chart.data, maxCategoryCount);\n\n if (chart.data.length>0) {\n chart.data.sort(function (a, b) {\n return b.facet.order - a.facet.order || a.facet.count - b.facet.count;\n });\n }\n \n //chart.data = chart.data.sort(function (b, a) { return b.facet.count - a.facet.count; });\n // Make chart not full circle\n chart.startAngle = -90;\n chart.endAngle = 180;\n chart.innerRadius = am4core.percent(20);\n\n // Set number format\n chart.numberFormatter.numberFormat = \"#.#\";\n\n // Create axes\n var categoryAxis = chart.yAxes.push(new am4charts.CategoryAxis());\n categoryAxis.dataFields.category = \"aliasCategory\";\n categoryAxis.renderer.grid.template.location = 0;\n categoryAxis.renderer.grid.template.strokeOpacity = 0;\n categoryAxis.renderer.labels.template.horizontalCenter = \"right\";\n categoryAxis.renderer.labels.template.fontWeight = 400;\n categoryAxis.renderer.labels.template.cursorOverStyle = am4core.MouseCursorStyle.pointer;\n categoryAxis.renderer.labels.template.adapter.add(\"fill\", function (fill, target) {\n return (target.dataItem.index >= 0) ? chart.colors.getIndex(target.dataItem.index) : fill;\n });\n categoryAxis.renderer.minGridDistance = 10;\n categoryAxis.renderer.labels.template.events.on(\"hit\", function (ev) {\n if (ev.target.dataItem.category === others) {\n if (!$scope.data.groupOrder) {\n $scope.data.groupOrder = 2;\n } else {\n $scope.data.groupOrder = $scope.data.groupOrder + 1;\n }\n $scope.$apply();\n $scope.barClick({ item: $scope.data });\n } else {\n $scope.barClick({ item: ev.target.dataItem.dataContext });\n }\n });\n\n var valueAxis = chart.xAxes.push(new am4charts.ValueAxis());\n valueAxis.renderer.grid.template.strokeOpacity = 0;\n valueAxis.min = 0;\n valueAxis.numberFormatter = new am4core.NumberFormatter();\n valueAxis.numberFormatter.numberFormat = \"'%'#.#\";\n var max = 0;\n if (chart.data.length > 0) {\n chart.data.forEach(function (d) {\n if (d.value >= max)\n max = d.value;\n });\n }\n if (max != 0) {\n valueAxis.max = max;\n }\n else\n valueAxis.max = 100;\n valueAxis.strictMinMax = true;\n // Create series\n var series1 = chart.series.push(new am4charts.RadarColumnSeries());\n series1.dataFields.valueX = \"full\";\n series1.dataFields.categoryY = \"aliasCategory\";\n series1.clustered = true;\n series1.columns.template.fill = new am4core.InterfaceColorSet().getFor(\"alternativeBackground\");\n series1.columns.template.fillOpacity = 0.08;\n series1.columns.template.cornerRadiusTopLeft = 20;\n series1.columns.template.strokeWidth = 0;\n series1.columns.template.radarColumn.cornerRadius = 20;\n series1.columns.template.events.on(\"hit\", function (ev) {\n if (ev.target.dataItem.categoryY === others) {\n if (!$scope.data.groupOrder) {\n $scope.data.groupOrder = 2;\n } else {\n $scope.data.groupOrder = $scope.data.groupOrder + 1;\n }\n $scope.$apply();\n $scope.barClick({ item: $scope.data });\n } else {\n $scope.barClick({ item: ev.target.dataItem.dataContext });\n }\n });\n\n var series5 = chart.series.push(new am4charts.RadarColumnSeries());\n series5.dataFields.valueX = \"insensitive\";\n series5.dataFields.categoryY = \"aliasCategory\";\n series5.clustered = false;\n series5.columns.template.strokeWidth = 0;\n series5.columns.template.tooltipText = \"[bold]{aliasCategory}:[/] \\n Toplam: {facet.count.formatNumber('#,###')} ({value}%)\\n Duygusuz: ({ratioInsensitive}%)\";\n series5.columns.template.radarColumn.cornerRadius = 20;\n series5.columns.template.adapter.add(\"fill\", function (fill, target) {\n return am4core.color(\"#03A9F4\");\n });\n series5.columns.template.events.on(\"hit\", function (ev) {\n if (ev.target.dataItem.categoryY === others) {\n if (!$scope.data.groupOrder) {\n $scope.data.groupOrder = 2;\n } else {\n $scope.data.groupOrder = $scope.data.groupOrder + 1;\n }\n $scope.$apply();\n $scope.barClick({ item: $scope.data });\n } else {\n $scope.barClick({ item: ev.target.dataItem.dataContext });\n }\n });\n\n\n\n\n var series4 = chart.series.push(new am4charts.RadarColumnSeries());\n series4.dataFields.valueX = \"neutral\";\n series4.dataFields.categoryY = \"aliasCategory\";\n series4.clustered = false;\n series4.columns.template.strokeWidth = 0;\n series4.columns.template.tooltipText = \"[bold]{aliasCategory}:[/] \\n Toplam: {facet.count.formatNumber('#,###')} ({value}%)\\n Nötr: ({ratioNeutral}%)\";\n series4.columns.template.radarColumn.cornerRadius = 20;\n\n series4.columns.template.adapter.add(\"fill\", function (fill, target) {\n return am4core.color(\"#9e9e9e\");\n });\n series4.columns.template.events.on(\"hit\", function (ev) {\n if (ev.target.dataItem.categoryY === others) {\n if (!$scope.data.groupOrder) {\n $scope.data.groupOrder = 2;\n } else {\n $scope.data.groupOrder = $scope.data.groupOrder + 1;\n }\n $scope.$apply();\n $scope.barClick({ item: $scope.data });\n } else {\n $scope.barClick({ item: ev.target.dataItem.dataContext });\n }\n });\n\n\n var series3 = chart.series.push(new am4charts.RadarColumnSeries());\n series3.dataFields.valueX = \"positive\";\n series3.dataFields.categoryY = \"aliasCategory\";\n series3.clustered = false;\n series3.columns.template.strokeWidth = 0;\n series3.columns.template.tooltipText = \"[bold]{aliasCategory}:[/] \\n Toplam: {facet.count.formatNumber('#,###')} ({value}%)\\n Olumlu: ({ratioPositive}%)\";\n series3.columns.template.radarColumn.cornerRadius = 20;\n\n series3.columns.template.adapter.add(\"fill\", function (fill, target) {\n return am4core.color(\"#4caf50\");\n });\n series3.columns.template.events.on(\"hit\", function (ev) {\n if (ev.target.dataItem.categoryY === others) {\n if (!$scope.data.groupOrder) {\n $scope.data.groupOrder = 2;\n } else {\n $scope.data.groupOrder = $scope.data.groupOrder + 1;\n }\n $scope.$apply();\n $scope.barClick({ item: $scope.data });\n } else {\n $scope.barClick({ item: ev.target.dataItem.dataContext });\n }\n });\n\n var series2 = chart.series.push(new am4charts.RadarColumnSeries());\n series2.dataFields.valueX = \"negative\";\n series2.dataFields.categoryY = \"aliasCategory\";\n series2.clustered = false;\n series2.columns.template.strokeWidth = 0;\n series2.columns.template.tooltipText = \"[bold]{aliasCategory}:[/] \\n Toplam: {facet.count.formatNumber('#,###')} ({value}%)\\n Olumsuz: ({ratioNegative}%)\";\n series2.columns.template.radarColumn.cornerRadius = 20;\n\n series2.columns.template.adapter.add(\"fill\", function (fill, target) {\n return am4core.color(\"#f44336\");\n });\n series2.columns.template.events.on(\"hit\", function (ev) {\n if (ev.target.dataItem.categoryY === others) {\n if (!$scope.data.groupOrder) {\n $scope.data.groupOrder = 2;\n } else {\n $scope.data.groupOrder = $scope.data.groupOrder + 1;\n }\n $scope.$apply();\n $scope.barClick({ item: $scope.data });\n } else {\n $scope.barClick({ item: ev.target.dataItem.dataContext });\n }\n });\n\n $scope.$on(\"$destroy\", function () {\n chart.dispose();\n });\n \n return chart;\n }\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('app.report')\n .directive('datestackedbarchart', DateStackedBarChartDirective);\n\n am4core.useTheme(am4themes_animated);\n /** @ngInject */\n function DateStackedBarChartDirective($stateParams, $translate) {\n var chart = {};\n return {\n restrict: \"E\",\n scope: {\n chartId: '@',\n data: '=',\n refresh: '='\n },\n template: '
',\n replace: true,\n link: function ($scope, element, attrs) {\n // $scope.$watch('data', function () {\n $scope.$watch(function () {\n return $scope.data;\n }, function (newValue, oldValue) {\n if (!angular.equals(oldValue, newValue)) {\n chart[element.context.id].dispose();\n chart[element.context.id] = drawChart();\n }\n else if ($scope.data) {\n if (chart[element.context.id]) chart[element.context.id].dispose();\n chart[element.context.id] = drawChart();\n }\n }, true);\n\n $scope.$watch(function () {\n return $scope.refresh;\n }, function (newValue, oldValue) {\n if (newValue) {\n chart[element.context.id].dispose();\n chart[element.context.id] = drawChart();\n //$scope.refresh = false;\n }\n if (chart) chart[element.context.id].dispose();\n chart[element.context.id] = drawChart();\n }, true);\n\n function drawChart() {\n var chart = am4core.create(element.context, am4charts.XYChart);\n chart.language.locale = am4lang_tr_TR;\n chart.logo.disabled = true;\n chart.data = $scope.data.data;\n\n var dateAxis = chart.xAxes.push(new am4charts.DateAxis());\n dateAxis.renderer.minGridDistance = 60;\n\n var valueAxis = chart.yAxes.push(new am4charts.ValueAxis());\n if ($scope.data.range) {\n valueAxis.min = $scope.data.range.start;\n valueAxis.max = $scope.data.range.end;\n }\n valueAxis.tooltip.disabled = true;\n valueAxis.calculateTotals = true;\n\n for (var i = 0; i < $scope.data.uniqueKeys.length; i++) {\n var series = chart.series.push(new am4charts.ColumnSeries());\n series.dataFields.dateX = \"year\";\n series.name = $scope.data.uniqueKeys[i].name;\n series.dataFields.valueY = $scope.data.uniqueKeys[i].name;\n series.stacked = true;\n series.sequencedInterpolation = true;\n series.columns.template.width = am4core.percent(60);\n series.calculatePercent = true;\n if (valueAxis.min == 0 && valueAxis.max == 100) \n series.columns.template.tooltipText = \"[bold]{name}[/][font-size:14px]\\n {valueY.formatNumber('#.0')}%\";\n else\n series.columns.template.tooltipText = \"[bold]{name}[/][font-size:14px]\\n {valueY} ({valueY.totalPercent.formatNumber('#.0')}%)\";\n series.tooltip.label.textAlign = \"middle\";\n series.cursorTooltipEnabled = false;\n series.columns.template.fill = am4core.color($scope.data.uniqueKeys[i].color);\n // Add label\n var labelBullet = series.bullets.push(new am4charts.LabelBullet());\n if (valueAxis.min == 0 && valueAxis.max == 100)\n labelBullet.label.text = \"{valueY.formatNumber('#.0')}%\";\n else\n labelBullet.label.text = \"{valueY}\";\n labelBullet.locationY = 0.5;\n labelBullet.label.hideOversized = true;\n }\n\n /* Create a cursor */\n chart.cursor = new am4charts.XYCursor();\n\n\n return chart;\n }\n\n }\n };\n }\n})();\n\n(function () {\n 'use strict';\n angular\n .module('app.report')\n .directive('chart', ChartDirective);\n\n am4core.useTheme(am4themes_animated);\n /** @ngInject */\n function ChartDirective() {\n return {\n restrict: \"E\",\n scope: {\n chartId: '@',\n data : '='\n },\n template: '
',\n replace: true,\n link: function ($scope, element, attrs) {\n $scope.$watch(function () {\n return $scope.data;\n }, function (newValue, oldValue) {\n if (!angular.equals(oldValue, newValue)) {\n drawChart();\n } else if ($scope.data) {\n drawChart();\n }\n \n }, true);\n\n function drawChart() {\n var chart = am4core.create(element.context, am4charts.XYChart);\n var data = $scope.data;\n\n chart.data = data.categories;\n var circle_radius = 5;\n //triangle sizes\n var hBig = circle_radius * 3 / 2;\n var hSmall = circle_radius;\n var wBig = hBig * 2 / 5;\n var wSmall = hSmall * 2 / 5;\n\n //arrow paddings\n var arrowPad = [3 * circle_radius + 4 * wSmall, 3 * circle_radius + 3 * wSmall, 3 * circle_radius + wSmall, 3 * circle_radius];\n //arrowPad=[50,46,38,34]\n\n\n chart.data.forEach(function (d) {\n if (d.positiveBeforeCount > d.positiveNowCount) {\n d.positiveDirection = \"left\";\n } else if (d.positiveBeforeCount < d.positiveNowCount) {\n d.positiveDirection = \"right\";\n } else {\n d.positiveDirection = \"up\";\n }\n if (d.negativeBeforeCount > d.negativeNowCount) {\n d.negativeDirection = \"left\";\n } else if (d.negativeBeforeCount < d.negativeNowCount) {\n d.negativeDirection = \"right\";\n } else {\n d.negativeDirection = \"up\";\n }\n });\n\n\n chart.marginTop = 100;\n\n\n var categoryAxis = chart.yAxes.push(new am4charts.CategoryAxis());\n categoryAxis.dataFields.category = \"name\";\n categoryAxis.renderer.inversed = true;\n categoryAxis.renderer.minGridDistance = 1;\n categoryAxis.renderer.labels.template.dy = 0;\n categoryAxis.renderer.grid.template.location = 0;\n categoryAxis.min = 0;\n categoryAxis.max = 100;\n\n var valueAxis = chart.xAxes.push(new am4charts.ValueAxis());\n valueAxis.tooltip.disabled = false;\n valueAxis.renderer.ticks.template.disabled = false;\n valueAxis.renderer.axisFills.template.disabled = false;\n valueAxis.min = 0;\n valueAxis.max = 100;\n valueAxis.strictMinMax = true;\n\n var series1 = chart.series.push(new am4charts.ColumnSeries());\n series1.dataFields.categoryY = \"name\";\n series1.dataFields.openValueX = \"positiveBeforeCount\";\n series1.dataFields.valueX = \"positiveNowCount\";\n series1.dataFields.positiveDirection = \"positiveDirection\";\n series1.dataFields.negativeDirection = \"negativeDirection\";\n series1.tooltipText = \"Önce: %{openValueX.value} Sonra: %{valueX.value}\";\n series1.sequencedInterpolation = false;\n series1.fillOpacity = 1;\n series1.strokeOpacity = 0;\n series1.stroke = \"#4caf50\";\n series1.columns.template.height = 2;\n series1.columns.template.fill = \"#4caf50\";\n series1.tooltip.pointerOrientation = \"vertical\";\n\n var openBullet = series1.bullets.create(am4charts.CircleBullet);\n openBullet.locationX = 1;\n openBullet.fill = \"#ffffff\";\n openBullet.stroke = \"#808080\";\n openBullet.circle.radius = circle_radius;\n openBullet.circle.strokeWidth = 1;\n\n var closeBullet = series1.bullets.create(am4charts.CircleBullet);\n closeBullet.fill = \"#4caf50\";\n closeBullet.stroke = \"#4caf50\";\n closeBullet.circle.radius = circle_radius;\n\n var i = 0\n var arrow_Pos = closeBullet.createChild(am4core.Triangle);\n arrow_Pos.horizontalCenter = \"middle\";\n arrow_Pos.verticalCenter = \"middle\";\n arrow_Pos.strokeWidth = 0;\n arrow_Pos.fill = (i % 2 == 0) ? \"#4caf50\" : \"#ffffff\";\n arrow_Pos.width = (i % 2 == 0) ? wBig : wSmall;\n arrow_Pos.height = (i % 2 == 0) ? hBig : hSmall;\n arrow_Pos.adapter.add(\"direction\", function (_, target) { return target.dataItem.positiveDirection; });\n arrow_Pos.adapter.add(\"paddingLeft\",\n function (_, target) {\n return (target.dataItem && target.dataItem.positiveDirection == \"right\") ? arrowPad[0] : 0;\n });\n arrow_Pos.adapter.add(\"paddingRight\",\n function (_, target) {\n return (target.dataItem && target.dataItem.positiveDirection == \"left\") ? arrowPad[0] : 0;\n });\n arrow_Pos.adapter.add(\"disabled\",\n function (_, target) {\n return (target.dataItem && target.dataItem.positiveDirection == \"up\") ? true : false;\n });\n i = 1;\n var arrow_Pos2 = closeBullet.createChild(am4core.Triangle);\n arrow_Pos2.horizontalCenter = \"middle\";\n arrow_Pos2.verticalCenter = \"middle\";\n arrow_Pos2.strokeWidth = 0;\n arrow_Pos2.fill = (i % 2 == 0) ? \"#4caf50\" : \"#ffffff\";\n arrow_Pos2.width = (i % 2 == 0) ? wBig : wSmall;\n arrow_Pos2.height = (i % 2 == 0) ? hBig : hSmall;\n arrow_Pos2.adapter.add(\"direction\", function (_, target) { return target.dataItem.positiveDirection; });\n arrow_Pos2.adapter.add(\"paddingLeft\",\n function (_, target) {\n return (target.dataItem && target.dataItem.positiveDirection == \"right\") ? arrowPad[1] : 0;\n });\n arrow_Pos2.adapter.add(\"paddingRight\",\n function (_, target) {\n return (target.dataItem && target.dataItem.positiveDirection == \"left\") ? arrowPad[1] : 0;\n });\n arrow_Pos2.adapter.add(\"disabled\",\n function (_, target) {\n return (target.dataItem && target.dataItem.positiveDirection == \"up\") ? true : false;\n });\n\n i = 2;\n var arrow_Pos3 = closeBullet.createChild(am4core.Triangle);\n arrow_Pos3.horizontalCenter = \"middle\";\n arrow_Pos3.verticalCenter = \"middle\";\n arrow_Pos3.strokeWidth = 0;\n arrow_Pos3.fill = (i % 2 == 0) ? \"#4caf50\" : \"#ffffff\";\n arrow_Pos3.width = (i % 2 == 0) ? wBig : wSmall;\n arrow_Pos3.height = (i % 2 == 0) ? hBig : hSmall;\n arrow_Pos3.adapter.add(\"direction\", function (_, target) { return target.dataItem.positiveDirection; });\n arrow_Pos3.adapter.add(\"paddingLeft\",\n function (_, target) {\n return (target.dataItem && target.dataItem.positiveDirection == \"right\") ? arrowPad[2] : 0;\n });\n arrow_Pos3.adapter.add(\"paddingRight\",\n function (_, target) {\n return (target.dataItem && target.dataItem.positiveDirection == \"left\") ? arrowPad[2] : 0;\n });\n arrow_Pos3.adapter.add(\"disabled\",\n function (_, target) {\n return (target.dataItem && target.dataItem.positiveDirection == \"up\") ? true : false;\n });\n i = 3;\n var arrow_Pos4 = closeBullet.createChild(am4core.Triangle);\n arrow_Pos4.horizontalCenter = \"middle\";\n arrow_Pos4.verticalCenter = \"middle\";\n arrow_Pos4.strokeWidth = 0;\n arrow_Pos4.fill = (i % 2 == 0) ? \"#4caf50\" : \"#ffffff\";\n arrow_Pos4.width = (i % 2 == 0) ? wBig : wSmall;\n arrow_Pos4.height = (i % 2 == 0) ? hBig : hSmall;\n arrow_Pos4.adapter.add(\"direction\", function (_, target) { return target.dataItem.positiveDirection; });\n arrow_Pos4.adapter.add(\"paddingLeft\",\n function (_, target) {\n return (target.dataItem && target.dataItem.positiveDirection == \"right\") ? arrowPad[3] : 0;\n });\n arrow_Pos4.adapter.add(\"paddingRight\",\n function (_, target) {\n return (target.dataItem && target.dataItem.positiveDirection == \"left\") ? arrowPad[3] : 0;\n });\n arrow_Pos4.adapter.add(\"disabled\",\n function (_, target) {\n return (target.dataItem && target.dataItem.positiveDirection == \"up\") ? true : false;\n });\n\n var series2 = chart.series.push(new am4charts.ColumnSeries());\n series2.dataFields.categoryY = \"name\";\n series2.dataFields.openValueX = \"negativeBeforeCount\";\n series2.dataFields.valueX = \"negativeNowCount\";\n series2.dataFields.positiveDirection = \"positiveDirection\";\n series2.dataFields.negativeDirection = \"negativeDirection\";\n series2.tooltipText = \"Önce: %{openValueX.value} Sonra: %{valueX.value}\";\n series2.sequencedInterpolation = false;\n series2.filllOpacity = 1;\n series2.strokeOpacity = 0;\n series2.stroke = \"#f44336\";\n series2.columns.template.height = 2;\n series2.columns.template.fill = \"#f44336\";\n series2.tooltip.pointerOrientation = \"vertical\";\n\n\n\n\n var openBullet2 = series2.bullets.create(am4charts.CircleBullet);\n openBullet2.locationX = 1;\n openBullet2.fill = \"#ffffff\";\n openBullet2.stroke = \"#808080\";\n openBullet2.circle.radius = circle_radius;\n openBullet2.circle.strokeWidth = 1;\n\n\n\n var closeBullet2 = series2.bullets.create(am4charts.CircleBullet);\n\n closeBullet2.fill = \"#f44336\";\n closeBullet2.stroke = \"#f44336\";\n\n closeBullet2.circle.radius = circle_radius;\n\n i = 0;\n var arrow_Neg = closeBullet2.createChild(am4core.Triangle);\n arrow_Neg.horizontalCenter = \"middle\";\n arrow_Neg.verticalCenter = \"middle\";\n arrow_Neg.strokeWidth = 0;\n arrow_Neg.fill = (i % 2 == 0) ? \"#f44336\" : \"#ffffff\";\n arrow_Neg.width = (i % 2 == 0) ? wBig : wSmall;\n arrow_Neg.height = (i % 2 == 0) ? hBig : hSmall;\n arrow_Neg.adapter.add(\"direction\", function (_, target) { return target.dataItem.negativeDirection; });\n arrow_Neg.adapter.add(\"paddingLeft\",\n function (_, target) {\n return (target.dataItem && target.dataItem.negativeDirection == \"right\") ? arrowPad[0] : 0;\n });\n arrow_Neg.adapter.add(\"paddingRight\",\n function (_, target) {\n return (target.dataItem && target.dataItem.negativeDirection == \"left\") ? arrowPad[0] : 0;\n });\n arrow_Neg.adapter.add(\"disabled\",\n function (_, target) {\n return (target.dataItem && target.dataItem.negativeDirection == \"up\") ? true : false;\n });\n\n i = 1;\n var arrow_Neg2 = closeBullet2.createChild(am4core.Triangle);\n arrow_Neg2.horizontalCenter = \"middle\";\n arrow_Neg2.verticalCenter = \"middle\";\n arrow_Neg2.strokeWidth = 0;\n arrow_Neg2.fill = (i % 2 == 0) ? \"#f44336\" : \"#ffffff\";\n arrow_Neg2.width = (i % 2 == 0) ? wBig : wSmall;\n arrow_Neg2.height = (i % 2 == 0) ? hBig : hSmall;\n arrow_Neg2.adapter.add(\"direction\", function (_, target) { return target.dataItem.negativeDirection; });\n arrow_Neg2.adapter.add(\"paddingLeft\",\n function (_, target) {\n return (target.dataItem && target.dataItem.negativeDirection == \"right\") ? arrowPad[1] : 0;\n });\n arrow_Neg2.adapter.add(\"paddingRight\",\n function (_, target) {\n return (target.dataItem && target.dataItem.negativeDirection == \"left\") ? arrowPad[1] : 0;\n });\n arrow_Neg2.adapter.add(\"disabled\",\n function (_, target) {\n return (target.dataItem && target.dataItem.negativeDirection == \"up\") ? true : false;\n })\n\n i = 2\n var arrow_Neg3 = closeBullet2.createChild(am4core.Triangle);\n arrow_Neg3.horizontalCenter = \"middle\";\n arrow_Neg3.verticalCenter = \"middle\";\n arrow_Neg3.strokeWidth = 0;\n arrow_Neg3.fill = (i % 2 == 0) ? \"#f44336\" : \"#ffffff\";\n arrow_Neg3.width = (i % 2 == 0) ? wBig : wSmall;\n arrow_Neg3.height = (i % 2 == 0) ? hBig : hSmall;\n arrow_Neg3.adapter.add(\"direction\", function (_, target) { return target.dataItem.negativeDirection; });\n arrow_Neg3.adapter.add(\"paddingLeft\",\n function (_, target) {\n return (target.dataItem && target.dataItem.negativeDirection == \"right\") ? arrowPad[2] : 0;\n });\n arrow_Neg3.adapter.add(\"paddingRight\",\n function (_, target) {\n return (target.dataItem && target.dataItem.negativeDirection == \"left\") ? arrowPad[2] : 0;\n });\n arrow_Neg3.adapter.add(\"disabled\",\n function (_, target) {\n return (target.dataItem && target.dataItem.negativeDirection == \"up\") ? true : false;\n });\n\n i = 3;\n var arrow_Neg4 = closeBullet2.createChild(am4core.Triangle);\n arrow_Neg4.horizontalCenter = \"middle\";\n arrow_Neg4.verticalCenter = \"middle\";\n arrow_Neg4.strokeWidth = 0;\n arrow_Neg4.fill = (i % 2 == 0) ? \"#f44336\" : \"#ffffff\";\n arrow_Neg4.width = (i % 2 == 0) ? wBig : wSmall;\n arrow_Neg4.height = (i % 2 == 0) ? hBig : hSmall;\n arrow_Neg4.adapter.add(\"direction\", function (_, target) { return target.dataItem.negativeDirection; });\n arrow_Neg4.adapter.add(\"paddingLeft\",\n function (_, target) {\n return (target.dataItem && target.dataItem.negativeDirection == \"right\") ? arrowPad[3] : 0;\n });\n arrow_Neg4.adapter.add(\"paddingRight\",\n function (_, target) {\n return (target.dataItem && target.dataItem.negativeDirection == \"left\") ? arrowPad[3] : 0;\n });\n arrow_Neg4.adapter.add(\"disabled\",\n function (_, target) {\n return (target.dataItem && target.dataItem.negativeDirection == \"up\") ? true : false;\n });\n\n chart.cursor = new am4charts.XYCursor();\n chart.cursor.behavior = \"zoomY\";\n\n $scope.$on(\"$destroy\", function () {\n chart.dispose();\n });\n }\n }\n }; \n }\n})();\n\n\n(function () {\n 'use strict';\n angular\n .module('app.report')\n .directive('categorychart', CategoryChartDirective);\n\n am4core.useTheme(am4themes_animated);\n /** @ngInject */\n function CategoryChartDirective() {\n return {\n restrict: \"E\",\n scope: {\n chartId: '@',\n data: '='\n },\n template: '
',\n replace: true,\n link: function ($scope, element, attrs) {\n $scope.$watch(function () {\n return $scope.data;\n }, function (newValue, oldValue) {\n if (!angular.equals(oldValue, newValue)) {\n drawChart();\n } else if ($scope.data) {\n drawChart();\n }\n \n\n },true);\n\n\n function drawChart() {\n if (!$scope.data || !$scope.data.categories)\n return;\n\n var circle_radius = 5;\n //triangle sizes\n var hBig = circle_radius * 3 / 2;\n var hSmall = circle_radius;\n var wBig = hBig * 2 / 5;\n var wSmall = hSmall * 2 / 5;\n\n //arrow paddings\n var arrowPad = [3 * circle_radius + 4 * wSmall, 3 * circle_radius + 3 * wSmall, 3 * circle_radius + wSmall, 3 * circle_radius];\n\n\n var chart = am4core.create(element.context, am4charts.XYChart);\n var data = $scope.data.categories;\n\n var colors = [\n \"#1f77b4\",\n \"#aec7e8\",\n \"#ff7f0e\",\n \"#ffbb78\",\n \"#2ca02c\",\n \"#98df8a\",\n \"#d62728\",\n \"#ff9896\",\n \"#9467bd\"\n ];\n\n chart.data = data;\n\n chart.data.forEach(function (d) {\n if (d.beforeCount > d.nowCount) {\n d.direction = \"left\";\n } else if (d.beforeCount < d.nowCount) {\n d.direction = \"right\";\n } else {\n d.direction = \"up\";\n }\n });\n\n\n var categoryAxis = chart.yAxes.push(new am4charts.CategoryAxis());\n\n categoryAxis.dataFields.category = \"name\";\n categoryAxis.renderer.inversed = true;\n categoryAxis.renderer.minGridDistance = 1;\n categoryAxis.min = 0;\n categoryAxis.max = 100;\n\n var valueAxis = chart.xAxes.push(new am4charts.ValueAxis());\n valueAxis.tooltip.disabled = false;\n valueAxis.renderer.ticks.template.disabled = false;\n valueAxis.renderer.axisFills.template.disabled = false;\n valueAxis.min = 0;\n valueAxis.max = 100;\n valueAxis.strictMinMax = true;\n\n var series1 = chart.series.push(new am4charts.ColumnSeries());\n series1.dataFields.categoryY = \"name\";\n series1.dataFields.openValueX = \"beforeCount\";\n series1.dataFields.valueX = \"nowCount\";\n series1.dataFields.direction = \"direction\";\n series1.tooltipText = \"Önce: % {openValueX.value} Sonra: % {valueX.value}\";\n series1.sequencedInterpolation = false;\n series1.fillOpacity = 1;\n series1.strokeOpacity = 0;\n series1.stroke = \"#039be5\";\n series1.columns.template.height = 2;\n series1.columns.template.fill = \"#039be5\";\n series1.tooltip.pointerOrientation = \"vertical\";\n series1.columns.template.adapter.add(\"stroke\", function (fill, target) {\n return colors[target.dataItem.index];\n });\n\n series1.columns.template.adapter.add(\"fill\", function (fill, target) {\n return colors[target.dataItem.index];\n });\n\n\n var openBullet = series1.bullets.create(am4charts.CircleBullet);\n openBullet.locationX = 1;\n openBullet.fill = \"#ffffff\";\n openBullet.stroke = \"#808080\";\n openBullet.circle.radius = circle_radius;\n openBullet.circle.strokeWidth = 1;\n\n var closeBullet = series1.bullets.create(am4charts.CircleBullet);\n\n closeBullet.fill = \"#039be5\";\n closeBullet.stroke = \"#039be5\";\n closeBullet.circle.radius = circle_radius;\n\n closeBullet.adapter.add(\"fill\", function (fill, target) {\n return colors[target.dataItem.index];\n });\n closeBullet.adapter.add(\"stroke\", function (fill, target) {\n return colors[target.dataItem.index];\n });\n\n var i = 0\n var arrow = closeBullet.createChild(am4core.Triangle);\n arrow.horizontalCenter = \"middle\";\n arrow.verticalCenter = \"middle\";\n arrow.strokeWidth = 0;\n arrow.fill = (i % 2 == 0) ? \"#4caf50\" : \"#ffffff\";\n arrow.width = (i % 2 == 0) ? wBig : wSmall;\n arrow.height = (i % 2 == 0) ? hBig : hSmall;\n arrow.adapter.add(\"direction\", function (_, target) { console.log(target.dataItem.direction); return target.dataItem.direction; });\n arrow.adapter.add(\"paddingLeft\",\n function (_, target) {\n return (target.dataItem && target.dataItem.direction == \"right\") ? arrowPad[0] : 0;\n });\n arrow.adapter.add(\"paddingRight\",\n function (_, target) {\n return (target.dataItem && target.dataItem.direction == \"left\") ? arrowPad[0] : 0;\n });\n arrow.adapter.add(\"disabled\",\n function (_, target) {\n return (target.dataItem && target.dataItem.direction == \"up\") ? true : false;\n });\n if (i % 2 == 0) {\n arrow.adapter.add(\"fill\", function (fill, target) {\n return (target.dataItem) ? colors[target.dataItem.index] : \"#ffffff\";\n });\n } else {\n arrow.fill = \"#ffffff\";\n }\n\n\n i = 1;\n var arrow2 = closeBullet.createChild(am4core.Triangle);\n arrow2.horizontalCenter = \"middle\";\n arrow2.verticalCenter = \"middle\";\n arrow2.strokeWidth = 0;\n arrow2.fill = (i % 2 == 0) ? \"#4caf50\" : \"#ffffff\";\n arrow2.width = (i % 2 == 0) ? wBig : wSmall;\n arrow2.height = (i % 2 == 0) ? hBig : hSmall;\n arrow2.adapter.add(\"direction\", function (_, target) { return target.dataItem.direction; });\n arrow2.adapter.add(\"paddingLeft\",\n function (_, target) {\n return (target.dataItem && target.dataItem.direction == \"right\") ? arrowPad[1] : 0;\n });\n arrow2.adapter.add(\"paddingRight\",\n function (_, target) {\n return (target.dataItem && target.dataItem.direction == \"left\") ? arrowPad[1] : 0;\n });\n arrow2.adapter.add(\"disabled\",\n function (_, target) {\n return (target.dataItem && target.dataItem.direction == \"up\") ? true : false;\n });\n if (i % 2 == 0) {\n arrow2.adapter.add(\"fill\", function (fill, target) {\n return (target.dataItem) ? colors[target.dataItem.index] : \"#ffffff\";\n });\n } else {\n arrow2.fill = \"#ffffff\";\n }\n\n i = 2;\n var arrow3 = closeBullet.createChild(am4core.Triangle);\n arrow3.horizontalCenter = \"middle\";\n arrow3.verticalCenter = \"middle\";\n arrow3.strokeWidth = 0;\n arrow3.fill = (i % 2 == 0) ? \"#4caf50\" : \"#ffffff\";\n arrow3.width = (i % 2 == 0) ? wBig : wSmall;\n arrow3.height = (i % 2 == 0) ? hBig : hSmall;\n arrow3.adapter.add(\"direction\", function (_, target) { return target.dataItem.direction; });\n arrow3.adapter.add(\"paddingLeft\",\n function (_, target) {\n return (target.dataItem && target.dataItem.direction == \"right\") ? arrowPad[2] : 0;\n });\n arrow3.adapter.add(\"paddingRight\",\n function (_, target) {\n return (target.dataItem && target.dataItem.direction == \"left\") ? arrowPad[2] : 0;\n });\n arrow3.adapter.add(\"disabled\",\n function (_, target) {\n return (target.dataItem && target.dataItem.direction == \"up\") ? true : false;\n });\n if (i % 2 == 0) {\n arrow3.adapter.add(\"fill\", function (fill, target) {\n return (target.dataItem) ? colors[target.dataItem.index] : \"#ffffff\";\n });\n } else {\n arrow3.fill = \"#ffffff\";\n }\n i = 3;\n var arrow4 = closeBullet.createChild(am4core.Triangle);\n arrow4.horizontalCenter = \"middle\";\n arrow4.verticalCenter = \"middle\";\n arrow4.strokeWidth = 0;\n arrow4.width = (i % 2 == 0) ? wBig : wSmall;\n arrow4.height = (i % 2 == 0) ? hBig : hSmall;\n arrow4.adapter.add(\"direction\", function (_, target) { return target.dataItem.direction; });\n arrow4.adapter.add(\"paddingLeft\",\n function (_, target) {\n return (target.dataItem && target.dataItem.direction == \"right\") ? arrowPad[3] : 0;\n });\n arrow4.adapter.add(\"paddingRight\",\n function (_, target) {\n return (target.dataItem && target.dataItem.direction == \"left\") ? arrowPad[3] : 0;\n });\n arrow4.adapter.add(\"disabled\",\n function (_, target) {\n return (target.dataItem && target.dataItem.direction == \"up\") ? true : false;\n });\n if (i % 2 == 0) {\n arrow4.adapter.add(\"fill\", function (fill, target) {\n return (target.dataItem) ? colors[target.dataItem.index] : \"#ffffff\";\n });\n } else {\n arrow4.fill = \"#ffffff\";\n }\n\n\n chart.cursor = new am4charts.XYCursor();\n chart.cursor.behavior = \"zoomY\";\n \n\n\n $scope.$on(\"$destroy\", function () {\n chart.dispose();\n });\n }\n }\n };\n }\n})();\n\n\n(function () {\n 'use strict';\n angular\n .module('app.report')\n .directive('bubblechart', CategoryChartDirective);\n\n am4core.useTheme(am4themes_animated);\n /** @ngInject */\n function CategoryChartDirective() {\n return {\n restrict: \"E\",\n scope: {\n chartId: '@',\n data: '=',\n ratingChanged:'&'\n },\n template: '
',\n replace: true,\n link: function ($scope, element, attrs) {\n $scope.$watch('data', function (newValue, oldValue) {\n if (newValue != oldValue) {\n //for width height etc\n d3.select(\"#graph svg\").remove();\n var scale = 400;\n //min bubble radius\n var minRadius = scale / 13;\n\n var diameter = scale * 9 / 4;\n\n //arc tickness\n //arc tickness = tickConst + tickSizeDependent * d.ratio\n var tickConst = scale / 60\n var tickSizeDependent = scale / 10\n\n // space between bubbles\n var padding = scale / 4 + tickConst + tickSizeDependent;\n\n //text padding in bubble\n var xPadding = scale / 5;\n\n var font_family = \"calibri\";\n var font_weight = \"540\";\n var json = [];\n function getData(json) {\n var json = $scope.data.items;\n var datas = [];\n var i;\n var j;\n var sum = [0, 0, 0];\n for (i = 0; i < json[0]['values'].length; i++) {\n datas.push([json[0]['values'][i]['x'], [json[0]['values'][i]['y'], json[1]['values'][i]['y'], json[2]['values'][i]['y']], json[0]['values'][i]['categoryId'], json[0]['values'][i]['fieldName'], json[0]['values'][i]['label']]);\n sum[0] += json[0]['values'][i]['y'];\n sum[1] += json[1]['values'][i]['y'];\n sum[2] += json[2]['values'][i]['y'];\n }\n datas.unshift([$scope.data.name, sum, 0, $scope.data.fieldName, $scope.data.fieldValue,1]);\n return datas;\n }\n\n function getColors(json) {\n var json = $scope.data.items;\n var i;\n var colors = []\n for (i = 0; i < json.length; i++) {\n colors.push(json[i]['color'])\n }\n return colors;\n }\n\n function adaptLabelFontSize(d) {\n var diameter, labelAvailableWidth, labelWidth;\n diameter = 2 * (d.r - (tickConst + tickSizeDependent * d.ratio));\n labelAvailableWidth = diameter - xPadding * diameter / scale;\n labelWidth = Math.max(this.getComputedTextLength(), 30);\n return (labelAvailableWidth / labelWidth) + 'em';\n }\n\n var data = getData(json);\n\n\n var width = scale,\n height = scale,\n radius = Math.min(width, height) / 2;\n\n var color = d3.scale.ordinal().range(getColors(json));\n\n var pie = d3.layout.pie()\n .sort(null);\n\n var arc = d3.svg.arc()\n .innerRadius(radius)\n .outerRadius(radius);\n\n var bubble = d3.layout\n .pack().value(function (d) {\n return d3.sum(d[1]);\n })\n .sort(null)\n .size([width, height])\n .padding(padding);\n\n var dataM = bubble.nodes({ children: data }).filter(function (d) {\n return !d.children;\n });\n\n var tip = d3.tip()\n .attr('class', 'd3-tip')\n .offset([-1, 0])\n .html(function (d) {\n return \"%\" + (100 * (d.endAngle + 0.05 - d.startAngle) / (2 * Math.PI)).toFixed(0);\n })\n\n\n var svg = d3\n .select(\"#graph\")\n .append(\"svg\")\n .attr(\"width\", diameter / 2 + minRadius)\n .attr(\"height\", diameter / 2 + minRadius)\n .attr(\"class\", \"bubble\");\n\n svg.call(tip);\n var nodes = svg.selectAll(\"#graph g.node\").data(dataM);\n\n\n nodes.enter().append(\"g\").attr(\"class\", \"node\").attr(\"transform\", function (d) {\n return \"translate(\" + (d.x + minRadius) + \",\" + (d.y + minRadius) + \")\";\n });\n var arcGs = nodes.selectAll(\"g.arc\").data(function (d) {\n return pie(d[1]).map(function (m) {\n m.ratio = d3.sum(d[1]) / (d['parent']['value']);\n m.r = d.r + minRadius;\n m.category = d[0];\n m.categoryId = d[2];\n m.fieldName = d[3];\n m.label = d[4];\n if (d[5]) {\n m.main = d[5];\n }\n return m;\n });\n });\n\n\n\n\n var arcEnter = arcGs.enter().append(\"g\").attr(\"class\", \"arc\");\n\n arcEnter\n .append(\"path\")\n .attr(\"d\", function (d) {\n arc.innerRadius(d.r - (tickConst + tickSizeDependent * d.ratio));\n arc.outerRadius(d.r);\n d.endAngle = d.endAngle - 0.05\n return arc(d);\n })\n .style(\"fill\", function (d, i) {\n return color(i);\n })\n .on('mouseover', tip.show)\n .on('mouseout', tip.hide);\n\n arcEnter.append(\"text\")\n .attr(\"dy\", function (d) {\n var len = d.category.split(\" \").length;\n if (len == 1) {\n return \"0.3em\";//\"\"+d.r*0.004+ \n } else {\n return \"-\" + d.r * 0.001 + \"em\";\n }\n })\n .style(\"text-anchor\", \"middle\")\n .style('pointer-events', 'auto')\n .on(\"click\", function (d) {\n $scope.ratingChanged({ bubbleChartData: d });\n d3.event.stopPropagation();\n console.log(d);\n })\n .style('font-weight', font_weight)\n .style(\"font-family\", font_family)\n .text(function (d) {\n return ' ' + d.category.split(\" \")[0] + ' ';\n\n })\n .attr('font-size', adaptLabelFontSize)\n .on(\n {\n \"mouseover\": function (d) {\n d3.select(this).style(\"cursor\", \"pointer\");\n },\n \"mouseout\": function (d) {\n d3.select(this).style(\"cursor\", \"default\");\n }\n })\n ;\n\n\n arcEnter.append(\"text\")\n .attr(\"dy\", function (d) {\n return \"\" + (1 - d.r * 0.001) + \"em\";\n })\n .style(\"text-anchor\", \"middle\")\n .style('pointer-events', 'auto')\n .on(\"click\", function (d) {\n $scope.ratingChanged({ bubbleChartData: d });\n d3.event.stopPropagation();\n console.log(d);\n })\n .on(\n {\n \"mouseover\": function (d) {\n d3.select(this).style(\"cursor\", \"pointer\");\n },\n \"mouseout\": function (d) {\n d3.select(this).style(\"cursor\", \"default\");\n }\n })\n .style('font-weight', font_weight)\n .style(\"font-family\", font_family)\n .text(function (d) {\n if (d.category.split(\" \").length > 2) {\n return d.category.split(\" \")[1] + \" ...\"\n } else {\n return d.category.split(\" \")[1];\n }\n }\n )\n .attr('font-size', adaptLabelFontSize);\n\n $scope.$on(\"$destroy\", function () {\n $scope.data = null;\n json = [];\n d3.select(\"#graph svg\").remove();\n });\n\n\n }\n \n\n },true);\n \n \n }\n };\n }\n})();\n\n\n(function () {\n 'use strict';\n\n angular\n .module('app.report')\n .controller('ReportTestController', ReportTestController);\n\n /** @ngInject */\n function ReportTestController($stateParams, $log, $translate, api, $$report, $mdToast, ReportService, $q, $scope, $mdMedia, $mdDialog, $state, user, appSettings, $utils) {\n var vm = this;\n moment.locale('tr');\n\n //variables\n vm.report = $$report;\n vm.reportModules = $$report.reportModules;\n vm.categories = $$report.moduleCategories;\n vm.user = user;\n vm.reportId = $stateParams.id;\n vm.text = '';\n vm.textCategories = [];\n vm.ners = [];\n vm.loading = false;\n vm.configuration = {\n \"editable\": false,\n \"viewButtonClass\": \"btn-info\",\n \"editButtonClass\": \"btn-success\"\n };\n vm.options = {\n \"mode\": \"code\",\n \"modes\": [\n \"tree\",\n \"form\",\n \"code\",\n \"text\"\n ],\n \"history\": false\n };\n\n //Methods\n vm.classify = classify;\n vm.highlightCategoryContent = highlightCategoryContent;\n vm.unHighlightCategoryContent = unHighlightCategoryContent;\n\n\n function classify() {\n vm.loading = true;\n var data = {\n texts: [vm.text]\n };\n vm.textCategories = [];\n vm.searchedText = vm.text;\n vm.result = null;\n\n api.report.test(vm.reportId,[data])\n .then(function (response) {\n vm.loading = false;\n vm.result = response;\n generateCategories(vm.result.documents[0].classifications)\n generateNers(vm.result.documents[0].ners)\n vm.highlightText = vm.searchedText;\n },\n function (response) {\n vm.loading = false;\n $log.error(response);\n });\n };\n\n function generateNers(ners){\n if (!ners) return;\n var keys = Object.keys(ners);\n var key;\n var value;\n for (var i = 0; i < keys.length; i++) {\n key = keys[i];\n value = ners[key].join(' - ');\n vm.ners.push({\n key: key,\n value: value\n })\n }\n }\n \n\n function generateCategories(classifications) {\n if (!classifications) return;\n for (var i = 0; i < classifications.length; i++) {\n var classification = classifications[i];\n\n if (classification.categories === undefined){\n continue;\n }\n \n for (var j = 0; j < classification.categories.length; j++) {\n var category = {\n text: classification.text,\n startIndex: vm.searchedText.indexOf(classification.text),\n endIndex: vm.searchedText.indexOf(classification.text) + classification.text.length,\n moduleId: classification.moduleId,\n sentiment: classification.sentiment,\n sentimentValue: classification.sentimentValue,\n sentimentRate: classification.sentimentRate,\n categories: [{\n name: classification.categories[j].name,\n probability: classification.categories[j].probability\n }]\n }\n parseCategories(category, classification.categories[j].subCategories)\n }\n }\n }\n\n function parseCategories(category, categories) {\n if (!categories) {\n vm.textCategories.push(category);\n return;\n }\n \n for (var i = 0; i < categories.length; i++) {\n var newCategory = JSON.parse(JSON.stringify(category));\n newCategory.categories.push({\n name: categories[i].name,\n probability: categories[i].probability\n })\n if (categories[i].subCategories) {\n parseCategories(newCategory, categories[i].subCategories)\n } else {\n vm.textCategories.push(newCategory);\n }\n }\n }\n\n function highlightCategoryContent(part) {\n\n vm.highlightingIsOn = true;\n var startIndex = part.startIndex;\n var endIndex = part.endIndex;\n var sentiment = part.sentimentValue;\n var colorCode = \"#aec7e8\";\n var textColor = \"#fff\";\n if (sentiment) {\n if (sentiment == 1) {\n colorCode = \"#4caf50\";\n } else if (sentiment == 3) {\n colorCode = \"#f44336\";\n } else if (sentiment == 2) {\n colorCode = \"#9e9e9e\";\n }\n }\n\n if (!vm.highlightText.includes('' + vm.searchedText.substring(startIndex, endIndex) + '' + vm.searchedText.substring(endIndex, vm.searchedText.length);\n }\n\n }\n\n function unHighlightCategoryContent() {\n vm.highlightText = vm.searchedText;\n }\n\n vm.getCategoryTitle = function (cat) {\n var title = cat.name;\n var category = vm.categories.filter(function (k) { return k.id == cat.id; })[0];\n if (category && category.localVariables) {\n var localVariable = category.localVariables.filter(function (k) { return $translate.use() == k.language; })[0];\n if (localVariable) title = localVariable.value;\n }\n return title;\n }\n\n function init() {\n\n }\n init();\n\n vm.colors = [\n [\"#1f77b4\", \"#fff\"],\n [\"#aec7e8\", \"#000\"],\n [\"#ff7f0e\", \"#000\"],\n [\"#ffbb78\", \"#000\"],\n [\"#2ca02c\", \"#fff\"],\n [\"#98df8a\", \"#000\"],\n [\"#d62728\", \"#fff\"],\n [\"#ff9896\", \"#000\"],\n [\"#9467bd\", \"#000\"],\n [\"#c5b0d5\", \"#000\"],\n [\"#8c564b\", \"#fff\"],\n [\"#c49c94\", \"#000\"],\n [\"#e377c2\", \"#000\"],\n [\"#f7b6d2\", \"#000\"],\n [\"#7f7f7f\", \"#fff\"],\n [\"#c7c7c7\", \"#000\"],\n [\"#bcbd22\", \"#000\"],\n [\"#dbdb8d\", \"#000\"],\n [\"#17becf\", \"#000\"],\n [\"#9edae5\", \"#000\"]\n ];\n }\n})();\n\n\n\n\n(function () {\n 'use strict';\n\n angular\n .module('app.report')\n .controller('ReportSettingsController', ReportSettingsController);\n\n /** @ngInject */\n function ReportSettingsController($rootScope, $scope, $state, $stateParams, $log, $timeout, $translate, api, $utils, $$report, ReportSettingsService, ReportService, $mdToast, user, $settings, toastService, appSettings) {\n var vm = this;\n vm.report = $$report;\n vm.reportId = $stateParams.id;\n vm.selectedMode = 'md-scale';\n vm.thresholdSettingsProcessing = false;\n vm.reportSettings = $$report.reportSettings;\n vm.activeSources = appSettings.activeSources;\n //vm.reportCookie = $cookies.get(\"reports\")?JSON.parse($cookies.get(\"reports\")).filter(function(r){return r.id == vm.report.id;})[0]:null;\n vm.userSettings = $settings.reportSettingsList ? $settings.reportSettingsList.filter(function (r) { return r.id == vm.report.id; })[0] : null;\n vm.documentNickname = $translate.use() == \"tr\" ? vm.reportSettings.commonSettings.documentNicknameTr : vm.reportSettings.commonSettings.documentNicknameEn;\n vm.beforeDatePicker = {};\n vm.afterDatePicker = {};\n vm.user = user;\n vm.reports = [];\n user.moduleWorkspace = $$report.workspaceId;\n $rootScope.selectedWorkspaceId = $$report.workspaceId;\n vm.rules = [];\n vm.formulas = [];\n vm.sortableFields = {\n \"selected\": [],\n \"notSelected\": []\n };\n vm.selectedDashboardTemplates = {};\n vm.addSelectedSortField = addSelectedSortField;\n vm.removeSelectedSortField = removeSelectedSortField;\n \n vm.afterDatePickerPlaceholder = $translate.instant('SHARED.DATE');\n vm.beforeDatePickerPlaceholder = $translate.instant('SHARED.DATE');\n\n vm.dateFormat = function(dateStart, dateEnd) {\n return dateStart && dateEnd && (dateStart.toLocaleDateString('tr-TR') + ' - ' + moment(dateEnd).toDate().toLocaleDateString('tr-TR'));\n }\n\n vm.datePickerLanguage = {\n 'Mon': 'Pzt',\n 'Tue': 'Sal',\n 'Wed': 'Çar',\n 'Thu': 'Per',\n 'Fri': 'Cum',\n 'Sat': 'Cmt',\n 'Sun': 'Paz',\n 'This Week': 'Bu Hafta',\n \"January\": \"Ocak\",\n \"February\": \"Şubat\",\n \"March\": \"Mart\",\n \"April\": \"Nisan\",\n \"May\": \"Mayıs\",\n \"June\": \"Haziran\",\n \"July\": \"Temmuz\",\n \"August\": \"Ağustos\",\n \"September\": \"Eylül\",\n \"October\": \"Ekim\",\n \"November\": \"Kasım\",\n \"December\": \"Aralık\"\n };\n vm.loaders = {\n updateReportSettings: false,\n updateFormulaTableSettings: false\n }\n\n //fields\n vm.selectedDashboardTemplate = null;\n vm.selectedFacetOrder = vm.report.facetOrder;\n vm.openDashboardSettings = false;\n vm.dashboardTemplates = [];\n vm.reportFields = [];\n vm.reportIndicators = [];\n vm.reportModules = [];\n vm.verticalField = null;\n vm.horizontalField = null;\n vm.dashboardFilter1 = null;\n vm.dashboardFilter2 = null;\n vm.dashboardFilter3 = null;\n\n\n vm.defaultDate = {\n period:{type:null},\n beforeDatePeriod:{type:null,startDate:null,endDate:null},\n afterDatePeriod:{type:null,startDate:null,endDate:null}\n };\n vm.defaultTemporalSentimentOption = 'all';\n vm.categoryReportFields = [];\n vm.dashboardFacetField = null;\n vm.levelMinCatProbs = {};\n vm.thresholdLevel = \"all\";\n vm.thresholdLevelProbability = 0;\n vm.indicatorsProcessing = [];\n vm.saveReportSettingsProcessing = false;\n vm.removeIndicatorProcessing = false;\n vm.deletedBatches = [];\n\n vm.range = function(min, max, step) {\n step = step || 1;\n var input = [];\n var i = min;\n if(step<1){\n for (; i <= max; i += step) {\n input.push(i.toFixed(2));\n }\n }else{\n for (; i <= max; i += step) {\n input.push(i.toString());\n }\n }\n return input;\n };\n \n vm.dataProcessPeriods = [0, 1, 2, 3, 4, 6, 8, 12, 24];\n\n //methods\n vm.updateReportModule = updateReportModule;\n vm.updateReportTemplate = updateReportTemplate;\n vm.updateHorizontalReportField = updateHorizontalReportField;\n vm.updateVerticalReportField = updateVerticalReportField;\n vm.updateDashboardFilter = updateDashboardFilter;\n vm.recycleDeletedDocumentsBatches = recycleDeletedDocumentsBatches;\n vm.updateReportFacetOrder = updateReportFacetOrder;\n vm.updateReportDefaultTemporalSentimentOption = updateReportDefaultTemporalSentimentOption;\n vm.updateDashboardFacetField = updateDashboardFacetField;\n vm.updateThresholdSettings = updateThresholdSettings;\n vm.updateLevelMinCatProbability = updateLevelMinCatProbability;\n vm.setThresholdLevelProbability = setThresholdLevelProbability;\n vm.saveSimilarityRate = saveSimilarityRate;\n vm.addDocumentTag = addDocumentTag;\n vm.addPeriodField = addPeriodField;\n\n vm.updateReportDefaultDateSettings = updateReportDefaultDateSettings;\n \n vm.saveReport = saveReport;\n\n vm.editIndicator = editIndicator;\n vm.addIndicator = addIndicator;\n vm.removeIndicators = removeIndicators;\n\n vm.addRule = addRule;\n vm.saveRule = saveRule;\n vm.removeRule = removeRule;\n vm.saveRuleProcessing = false;\n\n vm.addFormula = addFormula;\n vm.saveFormula = saveFormula;\n vm.removeFormula = removeFormula;\n vm.activateFormula = activateFormula;\n vm.saveFormulaProcessing = false;\n\n vm.language = $translate.use();\n setInterval(function () { vm.language = $translate.use(); }, 100);\n $scope.$watch('vm.language', function () {\n vm.documentNickname = $translate.use() == \"tr\" ? vm.reportSettings.commonSettings.documentNicknameTr : vm.reportSettings.commonSettings.documentNicknameEn;\n });\n\n function addIndicator($event) {\n var data = {\n report: vm.report\n };\n ReportSettingsService.reportSettingsIndicator($scope, $event, data)\n .then(function (r) {\n findReportSettingsIndicators();\n });\n }\n\n function addRule(){\n var newRule = {\n 'definition':$translate.instant('REPORT.SETTINGS.RULES.NEW'),\n 'conditions':[],\n 'results':[],\n 'apply':0,\n 'isActive':1,\n }\n vm.saveRule(newRule,true);\n }\n\n function addFormula(isDocument) {\n var newFormula = {\n 'enable' : 0,\n 'definition':\n isDocument ? $translate.instant('REPORT.SETTINGS.FORMULA.NEW_DOCUMENT_FORMULA') \n : $translate.instant('REPORT.SETTINGS.FORMULA.NEW_ATTRIBUTE_FORMULA') ,\n 'formulaName' : $translate.instant('REPORT.SETTINGS.FORMULA.FORMULA') + '_' + vm.formulas.length ,\n 'formula': '',\n 'attribute': '',\n 'isActive': false,\n 'valid': false,\n 'reportId': vm.reportId,\n 'period' : { 'reportid': vm.reportId, 'type': 'DAILY', 'repeatDay': 1, 'repeatWeekDay': 1, 'repeatTime': 600 } \n }\n vm.saveFormula(newFormula, isDocument);\n }\n\n function addSelectedSortField(field) {\n vm.sortableFields['selected'].push(field);\n var index = vm.sortableFields['notSelected'].indexOf(field);\n vm.sortableFields['notSelected'].splice(index, 1);\n }\n\n function removeSelectedSortField(field) {\n vm.sortableFields['notSelected'].push(field);\n\n var index = vm.sortableFields['selected'].indexOf(field);\n vm.sortableFields['selected'].splice(index, 1);\n }\n\n function saveSortableFields(sortableFields) {\n sortableFields['selected'].forEach(function (f) {\n f.allowSort = true;\n })\n sortableFields['notSelected'].forEach(function (f) {\n f.allowSort = false;\n })\n return sortableFields['selected'].concat(sortableFields['notSelected']);\n }\n\n function removeIndicators(indicators, process) {\n var request = [];\n indicators.forEach(function (i) {\n request.push(i.id);\n });\n if (request.length > 0) {\n process.processing = true;\n api.report.removeIndicators(request)\n .then(function (r) {\n process.processing = false;\n findReportSettingsIndicators();\n }, function (err) {\n process.processing = false;\n console.log(err);\n })\n }\n\n }\n\n vm.updateReportSettings = function($event) {\n vm.loaders.updateReportSettings = true;\n ReportSettingsService.updateReportSettings($scope, $state, vm.report, vm.reportSettings, vm.user)\n .then(function (response) {\n console.log(response)\n vm.loaders.updateReportSettings = false;\n }, function (err) {\n console.log(err);\n vm.loaders.updateReportSettings = false;\n })\n }\n\n vm.updateFormulaTableSettings = function () {\n ReportSettingsService.updateFormulaTableSettings($scope, $state, vm.report, vm.reportSettings, vm.user)\n .then(function (response) {\n console.log(response)\n vm.loaders.updateFormulaTableSettings = false;\n }, function (err) {\n console.log(err);\n vm.loaders.updateFormulaTableSettings = false;\n })\n }\n\n vm.filterReportCategories = function () {\n ReportSettingsService.filterCategories($scope, $state, vm.report, vm.reportSettings, vm.user)\n .then(function (response) {\n console.log(response)\n vm.loaders.filterCategories = false;\n }, function (err) {\n console.log(err);\n vm.loaders.filterCategories = false;\n })\n }\n\n \n\n vm.openEditReputationStateWidget = function openReputationStateWidget($event) {\n ReportSettingsService.reportEditReputationStateWidget($scope,$event,vm.report, vm.reportSettings, vm.user);\n }\n\n vm.openEditReputationScoreWidget = function openReputationScoreWidget($event) {\n ReportSettingsService.reportEditReputationScoreWidget($scope,$event,vm.report, vm.reportSettings, vm.user, vm.formulas);\n }\n\n function editIndicator($event, modules) {\n var data = {\n report: vm.report,\n reportModules: modules\n };\n console.log(data);\n ReportSettingsService.reportSettingsIndicator($scope, $event, data)\n .then(function (r) {\n findReportSettingsIndicators();\n });\n }\n vm.openEditReportModuleClassifierSettingsDialog = function openEditReportModuleClassifierSettingsDialog($event, selectedReportModule){\n var nominalFields = vm.reportFields.filter(function(x){return ReportService.isThisFieldType(300, x.fieldType)});\n ReportSettingsService.editReportModuleClassifierSettingsDialog($scope, $event, selectedReportModule, nominalFields, vm.reportModuleSettings[selectedReportModule.id], vm.NERReportModule).then(function (res) {\n vm.reportModuleSettings[selectedReportModule.id] = res;\n });\n }\n\n vm.openFacetOrderDialog = function openFacetOrderDialog($event) {\n ReportSettingsService.reportFacetOrderDialog($scope, $event, vm.report);\n }\n\n vm.openEditFormulaDialog = function reportEditFormulaDialog($event, formula) {\n ReportSettingsService.reportEditFormulaDialog($scope,$event,vm.report, formula, vm.reportId);\n }\n\n vm.openEditRuleDialog = function openEditRuleDialog($event,rule){\n var ruleFields = [];\n vm.reportFields.forEach(function(element){\n if([300,301,302,303,500,600].includes(element.fieldType)){\n ruleFields.push({'fieldName':element.fieldName,'fieldTitle':element.fieldTitle,'fieldType':element.fieldType})\n }\n });\n \n vm.reportModules.forEach(function(module){\n if(module.moduleTypeId == 1){\n ruleFields.push({'fieldName':'_reportmodule_'+module.id,'fieldTitle':module.module.name,'fieldType':100})\n }else if(module.moduleTypeId == 5 || module.moduleTypeId == 7){\n ruleFields.push({'fieldName':'_reportmodule_'+module.id,'fieldTitle':module.module.name,'fieldType':200})\n }\n });\n ReportSettingsService.reportEditRuleDialog($scope,$event,rule,vm.reportId,ruleFields,vm.reportModules);\n }\n \n vm.openReportFieldAliasDialog = function openReportFieldAliasDialog($event) {\n ReportSettingsService.reportReportFieldAliasDialog($scope, $event, vm.report)\n .then(function (r) {\n ReportService.removeQuery(vm.report.id);\n });\n }\n\n vm.openReportFieldValueAliasDialog = function openReportFieldValueAliasDialog($event) {\n ReportSettingsService.reportReportFieldValueAliasDialog($scope, $event, vm.report)\n .then(function (r) {\n ReportService.removeQuery(vm.report.id);\n });\n }\n\n vm.openCategoryThresholdDialog = function openCategoryThresholdDialog($event) {\n ReportSettingsService.reportCategoryThresholdDialog($scope, $event, vm.report)\n .then(function (r) {\n ReportService.removeQuery(vm.report.id);\n });\n }\n\n vm.openCategoryLimitByModuleDialog = function openCategoryLimitByModuleDialog($event) {\n ReportSettingsService.reportCategoryLimitDialog($scope, $event, vm.report)\n .then(function (r) {\n ReportService.removeQuery(vm.report.id);\n });\n }\n\n function findDashboardTemplates() {\n api.report.findDashboardTemplates(vm.report.id)\n .then(function (r) {\n vm.dashboardTemplates = r;\n vm.dashboardTemplates.forEach(function (t) {\n var langValue = \"REPORT.SETTINGS.TEMPLATES.\" + t.value;\n t[\"langValue\"] = langValue;\n });\n api.report.findReport(vm.report.id)\n .then(function (r) {\n vm.report.dashboardTemplate = r.dashboardTemplate;\n var findedTemplates = vm.dashboardTemplates.filter(function (t) {\n return t.value === vm.report.dashboardTemplate;\n });\n if (findedTemplates && findedTemplates.length > 0)\n vm.selectedDashboardTemplate = findedTemplates[0];\n }, function (err) {\n console.log(err);\n });\n }, function (e) {\n console.log(e);\n })\n }\n\n function findSortableFields() {\n api.report.reportFields(vm.report.id)\n .then(function (r) {\n var sortableFields = r.filter(function (f) {\n return f.fieldType == 500 || f.fieldType == 400 || ReportService.isThisFieldType(300, f.fieldType);\n });\n sortableFields = sortableFields.filter(function (r) {\n var founded = sortableFields.filter(function (f1) {\n return f1.fieldTitle === r.fieldTitle;\n })\n return !(founded && founded.length > 1);\n });\n sortableFields.filter(function (element) {\n return element !== undefined;\n });\n vm.sortableFields['selected'] = sortableFields.filter(function (f) {\n return f.allowSort;\n })\n vm.sortableFields['notSelected'] = sortableFields.filter(function (f) {\n return !f.allowSort;\n })\n }, function (err) {\n console.log(err);\n });\n }\n\n function findReportFields() {\n api.reportv2.reportField.findReportFields(vm.report.id)\n .then(function (r) {\n vm.reportFields = r;\n vm.numericReportFields = r.filter(function (k) {\n return k.fieldType == 301;\n })\n setReportFields();\n }, function (err) {\n console.log(err);\n });\n }\n\n function findThresholdSettings(){\n api.report.settings.findReportThresholdSettings(vm.report.id)\n .then(function(r){\n if(r.minCategoryProbability!=null){\n r.minCategoryProbability = r.minCategoryProbability.toFixed(2).toString();\n }\n vm.thresholdSettings = r;\n if(r.minCatProbsByLevel!=null){\n vm.levelMinCatProbs = JSON.parse(r.minCatProbsByLevel);\n }else{\n vm.levelMinCatProbs = {};\n }\n vm.thresholdLevelProbability = vm.thresholdSettings.minCategoryProbability;\n }, function(er){\n console.log(er);\n })\n }\n\n function updateThresholdSettings(){\n vm.thresholdSettingsProcessing = true;\n var requestThresholdSettings = vm.thresholdSettings;\n requestThresholdSettings.minCategoryProbability = parseFloat(vm.thresholdSettings.minCategoryProbability)\n requestThresholdSettings.minCatProbsByLevel = JSON.stringify(vm.levelMinCatProbs);\n api.report.settings.saveOrUpdateThresholdSettings(vm.report.id,requestThresholdSettings)\n .then(function(r){\n vm.thresholdSettingsProcessing = false;\n },function(er){\n console.log(er);\n vm.thresholdSettingsProcessing = false;\n });\n }\n\n function updateLevelMinCatProbability(){\n vm.thresholdSettingsProcessing = true;\n if(vm.thresholdLevel=='all'){\n vm.thresholdSettings.minCategoryProbability = vm.thresholdLevelProbability;\n }else{\n if(vm.thresholdLevel!='undefined'){\n vm.levelMinCatProbs[vm.thresholdLevel] = vm.thresholdLevelProbability;\n }\n }\n updateThresholdSettings();\n }\n\n function setThresholdLevelProbability(){\n if(vm.thresholdLevel==undefined){\n vm.thresholdLevel = 'all';\n return;\n }\n if(vm.thresholdLevel == 'all'){\n vm.thresholdLevelProbability = vm.thresholdSettings.minCategoryProbability;\n }else{\n vm.thresholdLevelProbability =vm.levelMinCatProbs[vm.thresholdLevel];\n }\n }\n\n function saveSimilarityRate() {\n vm.saveSimilarityProcessing = true;\n api.source.saveSimilarityRate(vm.report.id, vm.similarityRate, user.moduleWorkspace)\n .then(function (r) {\n vm.saveSimilarityProcessing = false;\n }, function (er) {\n console.log(er);\n vm.saveSimilarityProcessing = false;\n });\n }\n\n function getSimilarityRate() {\n if (vm.activeSources.includes('WEBSOURCE')) {\n api.source.getSimilarityRate(vm.report.id, vm.similarityRate)\n .then(function (response) {\n vm.similarityRate = response;\n if (!vm.similarityRate) vm.similarityRate = 70;\n }, function (er) {\n vm.similarityRate = 70;\n console.log(er);\n });\n }\n }\n\n function addDocumentTag($event) {\n ReportSettingsService.addDocumentTag($scope, $state, vm.report, vm.reportSettings, vm.user)\n .then(function (response) {\n console.log(response)\n vm.loaders.addDocumentTag = false;\n }, function (err) {\n console.log(err);\n vm.loaders.addDocumentTag = false;\n })\n }\n\n function addPeriodField($event) {\n ReportSettingsService.addPeriodField($scope, $state, vm.report, vm.user, vm.reportFields)\n .then(function (response) {\n console.log(response)\n vm.loaders.addPeriodField = false;\n }, function (err) {\n console.log(err);\n vm.loaders.addPeriodField = false;\n })\n }\n\n function setReportFields() {\n vm.reportFields.forEach(function (reportField) {\n if (ReportService.isThisFieldType(300, reportField.fieldType)) vm.categoryReportFields.push(reportField);\n if (reportField.horizontalComparisonField) vm.horizontalField = reportField;\n if (reportField.verticalComparisonField) vm.verticalField = reportField;\n if (reportField.dashboardField && reportField.dashboardFieldOrder != 0){\n vm['dashboardFilter'+reportField.dashboardFieldOrder] = reportField;\n }\n if(reportField.dashboardFacet){\n vm.dashboardFacetField = reportField;\n }\n })\n }\n\n function findReportModules() {\n api.reportv2.reportModule.findReportModules(vm.report.id)\n .then(function (r) {\n vm.reportModules = r;\n findReportModuleSettings();\n findNERModule();\n }, function (err) {\n console.log(err);\n });\n }\n\n function findNERModule(){\n var nerModules = vm.reportModules.filter(function (k) { return k.moduleTypeId == 6 });\n if(nerModules.length>0){\n vm.NERReportModule = nerModules[0];\n }\n }\n\n function findReportModuleSettings(){\n vm.reportModuleSettings = {};\n vm.reportModules.forEach(function(rm){\n api.reportv2.reportModule.findReportModuleSettings(rm.reportId, rm.id)\n .then(function (settings) {\n vm.reportModuleSettings[rm.id] = settings;\n }, function (err) {\n }); \n });\n }\n\n vm.dashboardTemplateSettingsFunc = function () {\n if (vm.selectedDashboardTemplate != null) {\n vm.openDashboardSettings = !vm.openDashboardSettings;\n } else {\n toastService.serverError($translate.instant('REPORT.SETTINGS.NULL_DASHBOARD_TEMPLATE'));\n }\n }\n\n\n function updateReportModule(reportModule, oldReportModule) {\n if (reportModule.notDashboard != oldReportModule.notDashboard && reportModule.notDashboard == 0) {\n var notDashboardModules = vm.reportModules.filter(function (k) { return k.notDashboard == 0 });\n if (notDashboardModules.length > 1) {\n toastService.serverError($translate.instant('REPORT.SETTINGS.REPORT_MODULES.ERRORS.MORE_THAN_ONE_DASHBOARD'));\n reportModule.notDashboard = 1;\n return;\n }\n }\n reportModule[\"processing\"] = true;\n api.reportv2.reportModule.updateReportModule(vm.report.id, reportModule.id, reportModule)\n .then(function (r) {\n vm.reportModules = vm.reportModules.map(function (rm) {\n if (rm.id === r.id)\n rm[\"processing\"] = false;\n return rm;\n });\n }, function (err) {\n vm.reportModules = vm.reportModules.map(function (rm) {\n if (rm.id === oldReportModule.id) {\n oldReportModule[\"processing\"] = false;\n return oldReportModule;\n }\n return rm;\n });\n reportModule[\"processing\"] = false;\n console.log(err);\n });\n }\n\n function addDefaultDateUpdatedSettings(){\n if ($settings.reportSettingsList) {\n $settings.saveUserSettings(\"defaultDateUpdated\", true, vm.report.id);\n }\n }\n \n function updateReportDefaultDateSettings(){\n if(vm.defaultDate.afterDatePeriod.type=='chooseDate' && vm.afterDatePicker.dateStart && vm.afterDatePicker.dateEnd){\n vm.defaultDate.afterDatePeriod.startDate = new Date(vm.afterDatePicker.dateStart).toJSON();\n vm.defaultDate.afterDatePeriod.endDate = new Date(vm.afterDatePicker.dateEnd).toJSON();\n }\n if(vm.defaultDate.beforeDatePeriod.type=='chooseDate' && vm.beforeDatePicker.dateStart && vm.beforeDatePicker.dateEnd){\n vm.defaultDate.beforeDatePeriod.startDate = new Date(vm.beforeDatePicker.dateStart).toJSON();\n vm.defaultDate.beforeDatePeriod.endDate = new Date(vm.beforeDatePicker.dateEnd).toJSON();\n }\n addDefaultDateUpdatedSettings();\n var defaultDatesSettingsObject = {\n reportId: vm.report.id,\n periodType: vm.defaultDate.period.type,\n beforeDatePeriodType: vm.defaultDate.beforeDatePeriod.type,\n beforeDatePeriodStartDate: vm.defaultDate.beforeDatePeriod.startDate,\n beforeDatePeriodEndDate: vm.defaultDate.beforeDatePeriod.endDate,\n afterDatePeriodType: vm.defaultDate.afterDatePeriod.type,\n afterDatePeriodStartDate:vm.defaultDate.afterDatePeriod.startDate,\n afterDatePeriodEndDate: vm.defaultDate.afterDatePeriod.endDate\n }\n api.report.settings.updateReportDefaultDateSettings(vm.report.id,defaultDatesSettingsObject)\n .then(function(r){\n },function(err){\n console.log(err);\n })\n }\n\n function findReportDefaultDateSettings(){\n api.report.settings.findReportDefaultDateSettings(vm.report.id)\n .then(function(r){\n\n vm.defaultDate = {\n period:{type:r.periodType},\n beforeDatePeriod:{type:r.beforeDatePeriodType,startDate:r.beforeDatePeriodStartDate,endDate:r.beforeDatePeriodEndDate},\n afterDatePeriod:{type:r.afterDatePeriodType,startDate:r.afterDatePeriodStartDate,endDate:r.afterDatePeriodEndDate}\n } \n if(vm.defaultDate.beforeDatePeriod.startDate && vm.defaultDate.beforeDatePeriod.endDate){\n vm.beforeDatePickerPlaceholder = moment(vm.defaultDate.beforeDatePeriod.startDate).format('DD.MM.YYYY').toString()+' - ' +moment(vm.defaultDate.beforeDatePeriod.endDate).format('DD.MM.YYYY').toString()\n } \n if(vm.defaultDate.afterDatePeriod.startDate && vm.defaultDate.afterDatePeriod.endDate){\n vm.afterDatePickerPlaceholder = moment(vm.defaultDate.afterDatePeriod.startDate).format('DD.MM.YYYY').toString()+' - ' +moment(vm.defaultDate.afterDatePeriod.endDate).format('DD.MM.YYYY').toString()\n } \n },function(err){\n console.log(err);\n })\n }\n\n function findReportDefaultTemporalSentimentOption(){\n api.report.findReport(vm.report.id)\n .then(function(r){\n vm.defaultTemporalSentimentOption = r.temporalSentimentOption;\n },function(err){\n console.log(err);\n })\n }\n\n function updateReportDefaultTemporalSentimentOption(){\n api.report.updateReportDefaultTemporalSentimentOption(vm.report.id,vm.defaultTemporalSentimentOption)\n .then(function(r){\n },function(err){\n console.log(err);\n })\n }\n\n function updateReportFacetOrder(oldFacetOrder){\n api.report.settings.updateReportFacetOrder(vm.report.id,vm.selectedFacetOrder)\n .then(function(r){\n ReportService.removeQuery(vm.report.id);\n },function(err){\n vm.selectedFacetOrder = oldFacetOrder;\n console.log(err);\n })\n }\n\n function updateReportTemplate(oldReportTemplate) {\n api.reportv2.template.updateReportTemplate(vm.report.id, vm.selectedDashboardTemplate.value)\n .then(function (r) {\n ReportService.removeQuery(vm.report.id);\n }, function (err) {\n vm.selectedDashboardTemplate = oldReportTemplate;\n console.log(err);\n })\n }\n\n function updateHorizontalReportField(reportField) {\n reportField.horizontalComparisonField = true;\n api.reportv2.reportField.updateReportField(vm.report.id, reportField.id, reportField)\n .then(function (r) {\n ReportService.removeQuery(vm.report.id);\n }, function (err) {\n /*vm.categoryReportFields.forEach(function (r) {\n if (r.id == oldReportField.id)\n vm.horizontalField = r;\n })*/\n console.log(err);\n });\n }\n\n function updateDashboardFacetField(reportField){\n var field = null;\n if(vm.dashboardFacetField){\n vm.dashboardFacetField.dashboardFacet = true;\n field = vm.dashboardFacetField;\n //reportField = vm.dashboardFacetField;\n }else{\n vm.categoryReportFields.forEach(function (r) {\n if (r.id == reportField.id){\n field = r;\n field.dashboardFacet=false;\n }\n })\n }\n api.reportv2.reportField.updateReportField(vm.report.id, field.id, field)\n .then(function (r) {\n ReportService.removeQuery(vm.report.id);\n }, function (err) {\n reportField.dashboardFacet = true;\n });\n }\n\n\n function saveReport($event) {\n var isAnyReportWithSameName = false;\n for (var i = 0; i < vm.reports.length; i++) {\n if (vm.reports[i].id != vm.report.id && vm.reports[i].workspaceId == vm.report.workspaceId && vm.reports[i].name == vm.report.name) {\n isAnyReportWithSameName = true;\n }\n }\n if (!isAnyReportWithSameName) {\n ReportService.updateReport($scope, $state, $event, vm.report);\n } else {\n showSimpleToast($translate.instant('REPORT.SETTINGS.SAME_REPORT_NAME'));\n }\n \n /*api.report.save(vm.report)\n .then(function(r){\n \n },function(err){\n console.log(err);\n })*/\n }\n\n function updateVerticalReportField(reportField) {\n reportField.verticalComparisonField = true;\n api.reportv2.reportField.updateReportField(vm.report.id, reportField.id, reportField)\n .then(function (r) {\n ReportService.removeQuery(vm.report.id);\n }, function (err) {\n /*vm.categoryReportFields.forEach(function (r) {\n if (r.id == oldReportField.id)\n vm.verticalField = r;\n })*/\n console.log(err);\n });\n }\n\n function updateDashboardFilter(reportField, order, oldReportFieldId) {\n if(reportField){\n reportField.dashboardField = true;\n reportField.dashboardFieldOrder = order; \n }else{\n vm.categoryReportFields.forEach(function (r) {\n if (r.id == oldReportFieldId){\n reportField = r;\n reportField.dashboardField=false;\n reportField.dashboardFieldOrder=0;\n }\n })\n }\n api.reportv2.reportField.updateReportField(vm.report.id, reportField.id, reportField)\n .then(function (r) {\n for(var i = 1 ; i <= 3 ; i++){\n if(vm['dashboardFilter'+i] && vm['dashboardFilter'+i].id === r.id && order != i){\n vm['dashboardFilter'+i] = null;\n }\n }\n }, function (err) {\n vm.categoryReportFields.forEach(function (r) {\n if (r.id == oldReportFieldId)\n vm['dashboardFilter'+order] = r;\n })\n if(oldReportFieldId === undefined)\n vm['dashboardFilter'+order] = null;\n console.log(err);\n });\n }\n\n function findReportSettingsIndicators() {\n api.report.reportSettingsIndicators(vm.report.id)\n .then(function (r) {\n vm.reportIndicators = r;\n refreshIndicatorProcessing();\n }, function (err) {\n console.log(err);\n });\n }\n\n function refreshIndicatorProcessing() {\n vm.indicatorsProcessing = [];\n if (vm.reportIndicators) {\n for (var key in vm.reportIndicators) {\n var index = {\n processing: false\n };\n vm.indicatorsProcessing.push(index);\n }\n\n }\n }\n\n function showSimpleToast(text) {\n $mdToast.show($mdToast.simple().textContent(text));\n }\n\n function findDeletedDocumentsBatches(){\n api.report.settings.findDeletedDocumentsBatch(vm.report.id)\n .then(function(response){\n vm.deletedBatches = response;\n vm.deletedBatches = vm.deletedBatches.sort(function (a, b) {\n return new Date(b.createDate) - new Date(a.createDate);\n });\n },function(err){\n console.log(err);\n })\n }\n\n vm.openModule = function (module) {\n for (var i = 0; i < vm.filteredModules.length; i++) {\n if (vm.filteredModules[i].id == module.moduleId) {\n $settings.saveUserCommonSettings(\"lastWorkspaceId\", module.module.workspaceId);\n var state = module.moduleTypeId == 5 || module.moduleTypeId == 6 ? \"test\" : \"overview\";\n var url = $state.href('app.module.' + state, {\n id: module.moduleId\n });\n window.open(url, '_blank');\n }\n }\n }\n\n function findModules() {\n api.module.all()\n .then(function (response) {\n vm.allModules = response;\n vm.modules = response;\n vm.filteredModules = vm.modules;\n filterModulesByPermission();\n },\n function (response) {\n $log.error(response);\n });\n }\n\n function filterModulesByPermission() {\n vm.modules = vm.allModules.filter(function (module) {\n var moduleWorkspaceId = module.workspaceId;\n var permissionWorkspaces = user.permissions;\n var permission = getPermission(module.moduleType);\n var permissionWorkspace = permissionWorkspaces.filter(function (p) {\n return p.workspaceId === moduleWorkspaceId;\n })[0];\n if (permissionWorkspace) {\n if (permissionWorkspace.permissions.indexOf(permission) != -1)\n return true;\n }\n return false;\n });\n vm.filteredModules = vm.modules;\n for (var j = 0; j < vm.reportModules.length; j++) {\n for (var i = 0; i < vm.filteredModules.length; i++) {\n if (vm.filteredModules[i].id == vm.reportModules[j].moduleId) {\n vm.reportModules[j].clickable = true;\n }\n }\n }\n } \n\n function getPermission(type) {\n switch (type.id) {\n case 1:\n case \"1\":\n return \"MODULE/CLASSIFICATION/VIEW\";\n case 2:\n case \"2\":\n return \"MODULE/CLUSTERING/VIEW\";\n case 3:\n case \"3\":\n return \"MODULE/TOPICMODELING/VIEW\";\n case 4:\n case \"4\":\n return \"MODULE/ROOTCAUSE/VIEW\";\n case 5:\n case \"5\":\n return \"MODULE/SENTIMENT/VIEW\";\n case 6:\n case \"6\":\n return \"MODULE/NAMEDENTITY/VIEW\";\n case 7:\n case \"7\":\n return \"MODULE/CLASSIFICATION/VIEW\";\n }\n }\n\n function recycleDeletedDocumentsBatches(batchId){\n api.report.settings.recycleDeletedDocumentsBatch(vm.report.id,batchId)\n .then(function(response){\n showSimpleToast($translate.instant('REPORT.SETTINGS.RECYCLE_DOCUMENTS.RECYCLED', { x: vm.documentNickname }));\n },function(err){\n console.log(err);\n })\n }\n\n function filterReportsByPermission() {\n vm.reports = vm.reports.filter(function (report) {\n var reportWorkspaceId = report.workspaceId;\n if ($rootScope.selectedWorkspace && $rootScope.selectedWorkspace.id) {\n if (reportWorkspaceId !== $rootScope.selectedWorkspace.id) {\n return false;\n }\n }\n var permissionWorkspaces = user.permissions;\n var permission = \"REPORT/VIEW\";\n var permissionWorkspace = permissionWorkspaces.filter(function (p) {\n return p.workspaceId === reportWorkspaceId;\n })[0];\n if (permissionWorkspace) {\n if (permissionWorkspace.permissions.indexOf(permission) != -1)\n return true;\n }\n return false;\n })\n }\n\n function findReports() {\n api.report.list()\n .then(function (response) {\n vm.reports = response;\n filterReportsByPermission();\n },\n function (response) {\n $log.error(response);\n });\n }\n\n function findRules(){\n api.report.findRules(vm.reportId)\n .then(function (response){\n vm.rules = response;\n });\n }\n\n function removeRule(rule){\n rule.isActive = 0;\n vm.rules = vm.rules.filter(function(r){return r.isActive == 1;});\n saveRule(rule,false);\n }\n\n function removeFormula(formula) {\n api.report.deleteFormula(vm.reportId, formula.id)\n .then(function (response){\n formula.isActive = false;\n vm.formulas = vm.formulas.filter(function(r){return r.isActive});\n });\n }\n\n function activateFormula(formula, isActive) {\n var existingState = formula.settings.isActive;\n formula.settings.isActive = isActive;\n api.report.updateFormula(vm.reportId, formula.id, formula.settings)\n .then(function (response){\n formula = JSON.parse(response.settings);\n }, function (err) {\n vm.saveFormulaProcessing = false;\n formula.settings.isActive = existingState;\n }\n );\n }\n\n function findFormulas() {\n api.report.findFormulas(vm.reportId)\n .then(function (response){\n vm.formulas = [];\n response.forEach(function (r) {\n vm.formulas.push({\n 'id' : r.id,\n 'isActive' : true,\n 'settingType' : r.settingType, \n 'settings' : JSON.parse(r.settings)\n })\n });\n })\n }\n\n function saveFormula(formula, isDocument) {\n vm.saveFormulaProcessing = true;\n if(isDocument) {\n api.report.createDocumentFormula(vm.reportId,formula)\n .then(function (response){\n findFormulas();\n vm.saveFormulaProcessing = false;\n });\n }\n else {\n api.report.createAttributeFormula(vm.reportId,formula)\n .then(function (response){\n findFormulas();\n vm.saveFormulaProcessing = false;\n });\n }\n }\n\n function saveRule(rule,isNew){\n vm.saveRuleProcessing = true;\n api.report.saveRule(vm.reportId,rule)\n .then(function (response){\n rule = response;\n if(isNew){\n vm.rules.push(rule);\n }\n vm.saveRuleProcessing = false;\n });\n }\n\n vm.saveFromApply = function(rule){\n vm.saveRule(rule,false)\n }\n function init() {\n findReportFields();\n findReportModules();\n findThresholdSettings();\n findReportSettingsIndicators();\n findDashboardTemplates();\n findSortableFields();\n findDeletedDocumentsBatches();\n findReportDefaultDateSettings();\n findReportDefaultTemporalSentimentOption();\n findReports();\n findModules();\n findRules();\n getSimilarityRate();\n findFormulas();\n $utils.googleAnalyticsSetPageview(\"/report/\" + vm.reportId + \"/settings\");\n $utils.googleAnalyticsSetScreenView(\"Report Settings\");\n }\n init();\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.report')\n .controller('ReportController', ReportController);\n\n /** @ngInject */\n function ReportController($stateParams, api) {\n var vm = this;\n vm.subscription = subscription;\n vm.hasSubscription = null;\n if ($stateParams.hasSubscription != undefined)\n vm.hasSubscription = $stateParams.hasSubscription;\n vm.subscriptionProcessing = false;\n\n function subscription() {\n vm.subscriptionProcessing = true;\n var func = null;\n if (vm.hasSubscription)\n func = api.report.alert.unsubscribe;\n else\n func = api.report.alert.subscribe;\n func($stateParams.id)\n .then(function (r) {\n vm.subscriptionProcessing = false;\n vm.hasSubscription = !vm.hasSubscription;\n }, function (err) {\n vm.subscriptionProcessing = false;\n console.log(err);\n });\n }\n\n /*\n function hasSubscription() {\n api.report.alert.hasSubscription($stateParams.id)\n .then(function (r) {\n if (r === true || r === false)\n vm.hasSubscription = r;\n }, function (err) {\n console.log(err);\n });\n }\n\n function init() {\n hasSubscription();\n }\n init();\n */\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.report')\n .controller('ReportOverviewController', ReportOverviewController);\n\n /** @ngInject */\n function ReportOverviewController($rootScope, $scope, $state, $stateParams, $log, $timeout, $translate, api, ModuleService, $utils, $$report) {\n var vm = this;\n vm.report = $$report;\n vm.reportId = $stateParams.id;\n vm.selectedMode = 'md-scale';\n vm.data = [];\n vm.changedData = [];\n vm.whichPie = 0;\n vm.changePie = changeWhichPie;\n vm.resetChart = resetChart;\n vm.disableChart = false;\n vm.dateEnable = false;\n\n $rootScope.$on('$translateChangeSuccess', function(event, current, previous) {\n vm.classificationChart.options.chart.noData = $translate.instant('CLASSIFICATION.ERRORS.NO_DATA_AVAILABLE');\n vm.sentimentChart.options.chart.noData = $translate.instant('CLASSIFICATION.ERRORS.NO_DATA_AVAILABLE');\n vm.classificationNoSentimentChart.options.chart.noData = $translate.instant('CLASSIFICATION.ERRORS.NO_DATA_AVAILABLE');\n });\n\n \n //Methods\n vm.toggleDateChanged = toggleDateChanged;\n vm.toggleClearDateFilter = toggleClearDateFilter;\n vm.chartxs = chartxs;\n vm.chartbr = chartbr;\n vm.goToCrumb = goToCrumb;\n vm.colorMultiBarChart = colorMultiBarChart;\n vm.multiChartGetConfig = multiChartGetConfig;\n\n vm.filters = {\n sidenav: '',\n facets: [],\n startDate: null,\n endDate: null\n };\n vm.filtersDefaults = angular.copy(vm.filters);\n\n vm.showAll = true;\n\n vm.colors = ['blue-bg', 'blue-grey-bg', 'orange-bg', 'pink-bg', 'purple-bg'];\n $scope.colors = [\"#800026\", \"#bd0026\", \"#e31a1c\", \"#fc4e2a\", \"#fd8d3c\", \"#feb24c\", \"#fed976\"];\n vm.colors = [\n [\"#1f77b4\", \"#fff\"],\n [\"#aec7e8\", \"#000\"],\n [\"#ff7f0e\", \"#000\"],\n [\"#ffbb78\", \"#000\"],\n [\"#2ca02c\", \"#fff\"],\n [\"#98df8a\", \"#000\"],\n [\"#d62728\", \"#fff\"],\n [\"#ff9896\", \"#000\"],\n [\"#9467bd\", \"#000\"],\n [\"#c5b0d5\", \"#000\"],\n [\"#8c564b\", \"#fff\"],\n [\"#c49c94\", \"#000\"],\n [\"#e377c2\", \"#000\"],\n [\"#f7b6d2\", \"#000\"],\n [\"#7f7f7f\", \"#fff\"],\n [\"#c7c7c7\", \"#000\"],\n [\"#bcbd22\", \"#000\"],\n [\"#dbdb8d\", \"#000\"],\n [\"#17becf\", \"#000\"],\n [\"#9edae5\", \"#000\"]\n ]\n vm.classificationChart = {\n config: {\n refreshDataOnly: true,\n deepWatchData: 1\n },\n options: {\n chart: {\n type: 'pieChart',\n height: 400,\n margin: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n },\n pie: {\n dispatch: {\n elementClick: function (e) {\n var chart = vm.changedData.charts[vm.whichPie];\n if (chart.type != 600 && chart.type != 100)\n return;\n chart.disable = true;\n var request = {\n encodedReportId: vm.reportId,\n filterFieldName: e.data.fieldName,\n filterFieldValue: e.data.label,\n categoryId: e.data.categoryId,\n dateField: vm.filters.dateField,\n startDate: vm.filters.startDate,\n endDate: vm.filters.endDate\n }\n var myElement = angular.element(document.querySelector('#loader_' + vm.whichPie));\n myElement.removeClass('hidden');\n api.report.findDashboardCategory(request)\n .then(function (r) {\n e.data.subs = r;\n var clickedItem = vm.changedData.charts[vm.whichPie].items.filter(function (p) {\n return p.label == e.data.label;\n })[0];\n if (typeof (clickedItem.subs) !== 'undefined' && clickedItem.subs != null && clickedItem.subs.length > 0) {\n vm.changedData.charts[vm.whichPie].items = clickedItem.subs;\n vm.changedData.charts[vm.whichPie].back = true;\n vm.changedData.charts[vm.whichPie].breadcrumb.push({ name: e.data.label });\n chart.disable = false;\n } else {\n var myElements = angular.element(document.getElementsByName('loader'));\n myElements.addClass('hidden');\n chart.disable = false;\n }\n }, function (r) {\n chart.disable = false;\n });\n\n }, renderEnd: function (e) {\n var chart = vm.changedData.charts[vm.whichPie];\n console.log(e);\n var myElements = angular.element(document.getElementsByName('loader'));\n console.log(\"render ended\");\n chart.disable = false;\n myElements.addClass('hidden');\n }\n }\n },\n donut: true,\n clipEdge: true,\n cornerRadius: 0,\n labelType: 'key',\n showLegend: true,\n showLabels: false,\n padAngle: 0.02,\n x: function (d) {\n return d.label;\n },\n y: function (d) {\n return d.value;\n },\n tooltip: {\n gravity: 's',\n classes: 'gravity-s',\n valueFormatter: function (d) {\n return d3.format(',.0f')(d);\n }\n },\n noData: $translate.instant('CLASSIFICATION.ERRORS.NO_DATA_AVAILABLE')\n }\n },\n };\n vm.sentimentChart = {\n config: {\n refreshDataOnly: true,\n deepWatchData: true\n },\n options: {\n chart: {\n type: 'pieChart',\n color: ['#4CAF50', '#F44336', '#9E9E9E'],\n height: 400,\n margin: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n },\n donut: true,\n clipEdge: true,\n cornerRadius: 0,\n labelType: 'percent',\n showLegend: true,\n showLabels: true,\n padAngle: 0.02,\n x: function (d) {\n return d.label;\n },\n y: function (d) {\n return d.value;\n },\n tooltip: {\n gravity: 's',\n classes: 'gravity-s',\n valueFormatter: function (d) {\n return d3.format(',.0f')(d);\n }\n },\n noData: $translate.instant('SENTIMENT.ERRORS.NO_DATA_AVAILABLE')\n }\n }\n };\n /*vm.sentimentChart = {\n config: {\n refreshDataOnly: true,\n deepWatchData: true\n },\n options: {\n chart: {\n type: 'pieChart',\n color: ['#4CAF50', '#F44336', '#9E9E9E'],\n height: 400,\n margin: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n },\n donut: true,\n clipEdge: true,\n cornerRadius: 0,\n labelType: 'percent',\n showLegend: true,\n showLabels: true,\n padAngle: 0.02,\n x: function (d) {\n return d.label;\n },\n y: function (d) {\n return d.value;\n },\n tooltip: {\n gravity: 's',\n classes: 'gravity-s',\n valueFormatter: function (d) {\n return d3.format(',.0f')(d);\n }\n },\n noData: $translate.instant('SENTIMENT.ERRORS.NO_DATA_AVAILABLE')\n }\n }\n };*/\n /*vm.classificationSentimentChart = {\n config: {\n refreshDataOnly: true,\n deepWatchData: true\n },\n options: {\n chart: {\n type: 'multiBarChart',\n height: 500,\n margin: {\n bottom: 100,\n left: 50\n },\n showControls: true,\n controlLabels: {\n \"grouped\": \"Grup\",\n \"stacked\": \"Yığın\"\n },\n showValues: true,\n duration: 500,\n x: function (d) {\n return d.label;\n },\n y: function (d) {\n return d.value;\n },\n //stacked: true,\n xAxis: {\n showMaxMin: false,\n rotateLabels: 15\n },\n yAxis: {\n tickFormat: function (d) {\n return d3.format(',.0f')(d);\n }\n },\n tooltip: {\n gravity: 's',\n classes: 'gravity-s'\n },\n noData: $translate.instant('SENTIMENT.ERRORS.NO_DATA_AVAILABLE')\n }\n }\n };*/\n vm.classificationNoSentimentChart = {\n config: {\n refreshDataOnly: true,\n deepWatchData: true\n },\n options: {\n chart: {\n type: 'multiBarChart',\n height: 500,\n margin: {\n bottom: 100,\n left: 50\n },\n showControls: false,\n controlLabels: {\n \"grouped\": \"Grup\",\n \"stacked\": \"Yığın\"\n },\n showValues: true,\n duration: 500,\n x: function (d) {\n return d.label;\n },\n y: function (d) {\n return d.value;\n },\n //stacked: true,\n xAxis: {\n showMaxMin: false,\n rotateLabels: 15\n },\n yAxis: {\n tickFormat: function (d) {\n return d3.format(',.0f')(d);\n }\n },\n tooltip: {\n gravity: 's',\n classes: 'gravity-s'\n },\n noData: $translate.instant('SENTIMENT.ERRORS.NO_DATA_AVAILABLE')\n }\n }\n };\n function multiChartGetConfig(item) {\n if (item[0].color === \"\") {\n return vm.classificationNoSentimentChart.options;\n } else\n return vm.classificationSentimentChart.options;\n }\n function colorMultiBarChart() {\n vm.data.multiBarCharts.forEach(function (m) {\n var items = m.items;\n var i = 0;\n items.forEach(function (item) {\n if (item.color !== null)\n item.color = $scope.colors[i++];\n if (i === 4)\n i = 0;\n })\n })\n }\n function resetChart(index) {\n vm.changedData = JSON.parse(JSON.stringify(vm.data));\n }\n function goToCrumb(chartIndex, crumbIndex) {\n var newData = JSON.parse(JSON.stringify(vm.data));\n var chartCrumbs = vm.changedData.charts[chartIndex].breadcrumb;\n crumbIndex = crumbIndex + 1;\n if (crumbIndex == 0) {\n vm.changedData.charts[chartIndex].back = false;\n }\n var chartDatas = newData.charts[chartIndex].items;\n for (var depth = 0; depth < crumbIndex; depth++) {\n chartDatas = chartDatas.filter(function (p) {\n return p.label == chartCrumbs[depth].name;\n })[0].subs;\n }\n vm.changedData.charts[chartIndex].breadcrumb = vm.changedData.charts[chartIndex].breadcrumb.slice(0, crumbIndex);\n vm.changedData.charts[chartIndex].items = chartDatas;\n }\n function changeWhichPie(ix) {\n vm.whichPie = ix;\n }\n function getDashboard() {\n // You can do an API call here to send the form to your server\n vm.searching = true;\n var query = {\n text: vm.filters.search,\n reportId: vm.reportId,\n facets: vm.filters.facets,\n dateField: vm.filters.dateField,\n startDate: vm.filters.startDate,\n endDate: vm.filters.endDate\n };\n\n api.report.dashboard(query)\n .then(function (response) {\n\n //vm.data = response;\n response.charts.forEach(function (a) {\n a[\"back\"] = false;\n a[\"breadcrumb\"] = [];\n });\n vm.data = JSON.parse(JSON.stringify(response));\n vm.changedData = response;\n if (response.dateFields)\n vm.dateField = response.dateFields[0];\n if (vm.dateField)\n vm.dateEnable = true;\n else\n vm.dateEnable = false;\n vm.searching = false;\n //vm.colorMultiBarChart();\n },\n function (response) {\n $log.error(response);\n vm.searching = false;\n });\n }\n\n function toggleDateChanged(range) {\n vm.filters.dateField = vm.dateField.field;\n if (range.startDate === range.endDate) {\n vm.filters.startDate = moment(range.startDate, \"DD.MM.YYYY\").unix();\n vm.filters.endDate = moment(range.endDate, \"DD.MM.YYYY\").add(1, 'days').unix();\n } else {\n vm.filters.startDate = moment(range.startDate, \"DD.MM.YYYY\").unix();\n vm.filters.endDate = moment(range.endDate, \"DD.MM.YYYY\").unix();\n }\n getDashboard();\n }\n\n function toggleClearDateFilter() {\n vm.date = null;\n vm.filters.dateField = null;\n vm.filters.startDate = null;\n vm.filters.endDate = null;\n getDashboard();\n }\n\n function chartxs($index) {\n if (vm.data.charts.length == 1) return 100;\n var isLast = $index == (vm.data.charts.length - 1);\n if (isLast) {\n return is.even($index) ? 100 : 50;\n } else {\n return 50;\n }\n }\n\n function chartbr($index) {\n if (vm.data.charts.length == 1) return false;\n var isLast = $index == (vm.data.charts.length - 1);\n return !isLast;\n }\n\n vm.init = function () {\n getDashboard();\n };\n vm.init();\n }\n})();\n\njQuery.download = function (url, data, method) {\n if (url && data) {\n data = typeof data === 'string' ? data : jQuery.param(data);\n var inputs = '';\n jQuery.each(data.split('&'), function () {\n var pair = this.split('=');\n inputs += '';\n });\n jQuery('
' + inputs + '
')\n .appendTo('body').submit().remove();\n }\n};\n(function () {\n 'use strict';\n\n angular\n .module('app.report')\n .controller('ReportDataWebController', ReportDataWebController);\n\n /** @ngInject */\n function ReportDataWebController($rootScope, $scope, $state, $stateParams, $translate, $log, $mdToast, $interval, $timeout, api, $$report, user, $q, $mdMedia, $mdDialog, $$reportWebsources) {\n var vm = this;\n vm.websources = [];\n vm.user = user;\n vm.added = $$reportWebsources;\n vm.report = $$report;\n vm.dragging = false;\n\n vm.addWebsource = addWebsource;\n vm.removeWebsource = removeWebsource;\n vm.setCurrentPage = setCurrentPage;\n vm.pagination = {};\n vm.search=undefined;\n vm.pagination.allWebsources = {\n current: 0,\n last: 1\n };\n vm.itemCountForOnePage = 10;\n vm.lastDraggedSources = [];\n function getWebsources(page) {\n if(page == undefined){\n page = 0;\n }\n var permissions = vm.user.permissions.filter(function (k) {\n return k.workspaceId == vm.user.selectedWorkspace.id;\n })[0].permissions;\n if (permissions.includes('SOURCE/WEBSOURCE/VIEW')) {\n var list = [];\n for(var i =0;i= 0 && page < vm.pagination.allWebsources.last) {\n vm.pagination.allWebsources.current = page;\n vm.lastDraggedSources = [];\n getWebsources(page);\n }\n\n }\n\n vm.topicSortableCardOptions = {\n cancel: \".unsortable\",\n appendTo: 'body',\n connectWith: '.todo-items',\n distance: 7,\n forcePlaceholderSize: true,\n placeholder: 'todo-item',\n tolerance: 'pointer',\n sort: false,\n start: function (event, ui) {\n vm.dragging = true;\n var model = ui.item.sortable.model;\n angular.forEach(vm.added, function (item) {\n if (item.name == model.name) {\n item.sorting = true;\n }\n });\n $scope.$apply();\n },\n stop: function (event, ui) {\n vm.dragging = false;\n vm.lastDraggedSources = [];\n if(ui.item.sortable.received == true){\n var foundInAddedList = false;\n for( var i =0;i< vm.added.length; i++){\n if(vm.added[i].id == ui.item.sortable.model.id){\n foundInAddedList = true;\n break;\n }\n }\n if(!foundInAddedList){\n vm.lastDraggedSources.push(ui.item.sortable.model); \n }\n }\n getWebsources(vm.pagination.allWebsources.current);\n $log.info(ui.item.sortable.source.name + \" stop | \" + vm.dragging);\n }\n };\n\n\n function showConnectWebsourceToReportDialog($scope, $event, title, body) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'BasicDialogController as vm',\n templateUrl: 'app/main/apps/sources/services/basic-confirm-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body,\n state: $state\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function (answer) {\n deferred.resolve(answer);\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showSuccessDialog($scope, $event, title, body) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'BasicSuccessDialogController as vm',\n templateUrl: 'app/main/apps/pipelines/services/basic-success-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body\n }\n })\n .then(function (answer) {\n deferred.resolve();\n }, function (answer) {\n deferred.resolve();\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function addWebsource($event) {\n for (var i = vm.websources.length - 1; i >= 0; i--) {\n if (vm.websources[i].selected == 0) {\n vm.websources[i].selected = 1;\n vm.added.push(vm.websources[i]);\n vm.websources.splice(i, 1);\n };\n }\n getWebsources(vm.pagination.allWebsources.current);\n }\n\n function removeWebsource($event) {\n for (var i = vm.added.length - 1; i >= 0; i--) {\n if (vm.added[i].selected == 0) {\n vm.added[i].selected = 1;\n vm.lastDraggedSources.push(Object.assign({}, vm.added[i]));\n vm.websources.push(vm.added[i]);\n vm.added.splice(i, 1);\n }\n }\n getWebsources(vm.pagination.allWebsources.current);\n }\n\n vm.showInfo = function () {\n return vm.added.length == 0 && !vm.dragging;\n };\n\n vm.save = function ($event) {\n vm.saveProcessing = true;\n var deferred = $q.defer();\n var title = $translate.instant('TOPIC.CONFIRM.SAVE_TITLE');\n var body = $translate.instant('SOURCE.CONNECT_CONFIRM.SAVE_BODY_1');\n showConnectWebsourceToReportDialog($scope, $event, title, body)\n .then(function (answer) {\n if (answer == undefined) { vm.saveProcessing = false; return };\n var templateIds = [];\n vm.added.forEach(function (m) {\n templateIds.push(m.id);\n })\n api.source.bindTemplate(vm.user.selectedWorkspace.id, vm.report.id, templateIds)\n .then(function (response) {\n var successTitle = $translate.instant('SOURCE.CONNECT_CONFIRM.SAVE_RESULT_SUCCESS_TITLE');\n var successBody = $translate.instant('SOURCE.CONNECT_CONFIRM.SAVE_RESULT_SUCCESS_BODY_1');\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function () {\n deferred.resolve(response);\n $state.go('app.report.data')\n });\n\n },\n function (response) {\n vm.saveProcessing = false;\n $log.error(response);\n });\n });\n return deferred.promise;\n }\n\n function init() {\n getWebsources();\n }\n\n init();\n\n }\n\n})();\n\n(function () {\n 'use strict';\n \n angular\n .module('app.report')\n .controller('ReportDataUploadEditController', ReportDataUploadEditController);\n \n /** @ngInject */\n function ReportDataUploadEditController($rootScope, $scope, $state, $stateParams,\n $translate, $log, $mdToast, $document, $interval, $timeout,\n api, Upload, SampleFactory,\n $$report, ReportService, $q, $utils) {\n var vm = this;\n vm.report = $$report;\n vm.reportId = vm.report.id;\n vm.fileId = $stateParams.fileId;\n if(vm.fileId == null){\n $state.go('app.report.data', {\n id: vm.reportId\n }, {\n reload: true\n });\n }\n function deleteObject(object, fieldName){\n object[fieldName] = undefined;\n try{\n delete object[fieldName];\n }catch(e){}\n }\n vm.reportFields = $$report.reportFields;\n vm.fieldTypes = [300, 301, 302, 303, 310, 311, 312, 313, 400, 500, 600, 800, 900];\n vm.facetFieldTypes = [300, 301, 302, 303, 310, 311, 312, 313, 800];\n vm.numericFieldTypes = [301, 303, 311, 313];\n vm.dateFieldTypes = [400];\n vm.stringFieldTypes = [300,302, 310, 312, 500,600,800,900];\n vm.editableFields = [300,301,302,303,310,311,312,313,500,600,800];\n vm.reportModules = $$report.reportModules;\n vm.dataSummary = {};\n vm.fieldsSummary = {};\n vm.datePickerFormat = \"DD/MM/YYYY\"\n vm.dateValue = \"01/01/2020\";\n vm.loaded = false;\n vm.allConfirmed = false;\n vm.uploadMappings = {\n literalFields:[],\n fieldMappings:[],\n deletedFields:[]\n }\n vm.newField = {};\n vm.addLiteralField = addLiteralField;\n vm.removeLiteralField = removeLiteralField;\n vm.mapToField = mapToField;\n vm.resetDataSummaryField = resetDataSummaryField;\n vm.convertFieldType = convertFieldType;\n vm.openTemplateDialog = openTemplateDialog;\n vm.findNameOfLiteralFieldType = findNameOfLiteralFieldType;\n vm.upload = upload;\n vm.confirmAll = confirmAll;\n vm.createDatePicker = createDatePicker;\n init();\n\n function confirmAll(){\n vm.dataSummary.forEach(function(x){\n if(x.status == undefined || x.status == -1){\n x.status = 1;\n }\n });\n vm.allConfirmed = true;\n }\n \n function findNameOfLiteralFieldType(fieldType){\n for(var i = 0; i< vm.literalFieldTypes.length ;i++){\n var field = vm.literalFieldTypes[i];\n if(field.fieldType === fieldType){\n return field.fieldName;\n }\n }\n }\n\n function addLiteralField(field){\n var literalField = {\n 'fieldHeader':field.mappedName,\n 'fieldType':field.fieldType,\n 'literalValue':field.literalValue\n }\n if(literalField.fieldHeader==null){\n literalField.fieldHeader = field.mappedField.title;\n }\n if(field.fieldType == 400){\n if(field.dateValue!=null){\n var middayValue = moment(field.dateValue,vm.datePickerFormat).toDate();\n middayValue.setHours(12);\n literalField.literalValue = middayValue; \n }else{\n literalField.literalValue = moment(Date.parse(literalField.literalValue)).toDate();\n }\n }\n vm.uploadMappings.literalFields.push(literalField);\n field = {};\n }\n\n function removeLiteralField(field){\n vm.uploadMappings.literalFields = vm.uploadMappings.literalFields.filter(function( el ) {\n return !(el.fieldHeader === field.fieldHeader && el.fieldType === field.fieldType); \n });\n }\n\n function addDeletedField(field){\n vm.uploadMappings.deletedFields.push({'fieldHeader':field.fieldHeader, 'fieldType':field.fieldType});\n }\n\n function addFieldMapping(field){\n var fieldMapping = {\n 'fieldHeader':field.fieldHeader,\n 'fieldType':field.fieldType,\n 'prefix':field.prefix,\n 'suffix':field.suffix,\n 'mappedType':field.mappedType\n }\n if(field.originalFieldType!=null){\n fieldMapping.fieldType = field.originalFieldType;\n }\n if(field.mappedField !=null && field.mappedField.title !=null && field.fieldHeader != field.mappedField.title){\n fieldMapping['mappedName'] = field.mappedField.title;\n }\n if(field.values != null){\n var mappedValues = {};\n for(var i = 0; i 0){\n fieldMapping.mappedValues = mappedValues;\n }\n }\n if(fieldMapping.prefix == null && fieldMapping.suffix == null && fieldMapping.mappedName == null && fieldMapping.mappedValues == null ){\n return; // do not add empty mapping\n }\n vm.uploadMappings.fieldMappings.push(fieldMapping);\n }\n\n function mapToField(field, mappedObject) {\n if(field == null) return;\n //clear old mapped field and values\n if (typeof mappedObject === 'string') { //manual map only field header passed\n if (field.mappedField != null && field.mappedField.title === mappedObject) return;//do not change if map not changed\n resetFieldMapping(field);\n field.mappedField = { 'title': mappedObject, 'manualMap': true };\n var items = vm.fieldsSummary[field.fieldType];\n for (var i in items) {\n var item = items[i];\n if (item.title === field.mappedField.title) {\n field.mappedField = item;\n break;\n }\n }\n } else if (typeof mappedObject === 'object' && mappedObject != null) {//mapped to an existing field\n if (field.mappedField != null && field.mappedField.title === mappedObject.title) return;//do not change if map not changed\n resetFieldMapping(field);\n field.mappedField = mappedObject;\n } else if (mappedObject == null) {\n field.mappedField = mappedObject;\n }\n }\n\n function resetFieldMapping(field){\n deleteObject(field,'mappedField');\n deleteObject(field,'prefix');\n deleteObject(field,'suffix');\n if(field.values){\n field.values.forEach(function(element){\n deleteObject(element,'mappedValue');\n element.manualMap = false;\n //element.fromOptions = false;\n });\n }\n }\n\n function convertFieldType(field, aspect){\n resetFieldMapping(field);\n if(aspect === 'toNumeric'){\n field.originalFieldType=field.fieldType;//expected:300\n field.fieldType=301;\n field.mappedType=301; \n }else if(aspect === 'toNominal'){\n field.fieldType=field.originalFieldType;//expected:300\n deleteObject(field,'originalFieldType');\n deleteObject(field,'mappedType');\n }\n }\n\n function resetDataSummaryField(field){\n var type = field.fieldType;\n var index = vm.dataSummary.indexOf(field);\n if(field.originalFieldType!=null){\n type = field.originalFieldType;\n }\n var initialField = vm.initialDataSummary.find(function(x){return x.fieldHeader === field.fieldHeader && x.fieldType === type});\n if(initialField!=undefined){\n field = JSON.parse(JSON.stringify(initialField));\n }\n field.status = -1;\n vm.allConfirmed = false;\n vm.dataSummary[index] = field;\n }\n\n function openTemplateDialog($event){\n ReportService.selectUploadMappingsTemplate($scope, $state, $event, vm.reportId).then(function(selectedTemplate){\n if (selectedTemplate != null) {\n applyTemplate(selectedTemplate);\n }\n });\n }\n\n function applyTemplate(template){\n //resetFieldMappings\n vm.dataSummary = JSON.parse(JSON.stringify(vm.initialDataSummary));\n // add literal fields\n vm.uploadMappings.literalFields = []; \n for(var i = 0; i 0 && indicatorCount === 0){\n reportProblem($event, 'indicatorNotChosen');\n return;\n }else if(indicatorCount>1){\n reportProblem($event, \"multipleIndicators\");\n return;\n }\n var existingDateCount = vm.dataSummary.filter(function(field){return field.fieldType === 400;}).length;\n var literalDateCount = vm.uploadMappings.literalFields.filter(function(field){return field.fieldType === 400;}).length;\n if(literalDateCount>1 || (existingDateCount > 0 && literalDateCount>0) ){\n reportProblem($event, \"multipleDate\");\n return;\n }\n\n var keys = chosenEditableFields.map(function(f){return f.key;});\n if((new Set(keys)).size !== keys.length){\n var duplicateFieldName = findDuplicateFieldName(keys, chosenEditableFields);\n reportProblem($event, \"duplicateFields\", duplicateFieldName);\n return;\n }\n var mappedToNumericFields = vm.dataSummary.filter(function(field){return field.status === 1 && field.mappedType==301;});//only 300->301 mapping available.\n for (var i = 0; i < mappedToNumericFields.length; i++) {\n var mappedField = mappedToNumericFields[i];\n if(mappedField.mappedType == 301 && mappedField.values!=null){\n for(var j = 0; j0){\n vm.literalFieldTypes.push({'fieldName':$translate.instant(\"SHARED.INDICATOR\"),'fieldType':800});\n }\n }\n \n }\n })();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.report')\n .controller('ReportDataUploadController', ReportDataUploadController);\n\n /** @ngInject */\n function ReportDataUploadController($rootScope, $scope, $state, $stateParams,\n $translate, $log, $mdToast, $document, $interval, api, Upload, SampleFactory,\n $$report, ReportService, user, appSettings, $utils) {\n var vm = this;\n vm.report = $$report;\n vm.user = user;\n vm.reportModules = $$report.reportModules;\n vm.uploading = false;\n vm.reportId = $stateParams.id;\n vm.hasHeader = true;\n vm.reportCategoryTitles = [];\n vm.activeSources = appSettings.activeSources;\n vm.useQueue = appSettings.queueActive;\n vm.reportTextTitles = [];\n vm.reportFieldTitles = [];\n vm.reportCategories = [];\n vm.reportTexts = [];\n vm.reportFields = [];\n vm.reportSelectables = [];\n vm.closestTypes = {};\n vm.addFormatMessage = \"\";\n vm.dateParts = {date:'date',day:'day',month:'month',year:'year',time:'time'}\n vm.excelColumnsDictionary = _buildColumnsArray('A1:ZZ38');\n\n vm.isThereAlreadyFieldWithSameName = false;\n vm.fileUploaded = false;\n vm.uploadCurrentTab = 0;\n vm.processingMonitor = false;\n vm.enable = false;\n vm.processTraces = [];\n vm.msScrollOptions = {\n suppressScrollX: true\n };\n findDateFormats();\n findTimeFormats();\n $rootScope.$on('$translateChangeSuccess', function(event, current, previous) {\n vm.dropifyConfig = {\n messages: {\n 'default': $translate.instant('SHARED.MESSAGES.DROPIFY_DEFAULT'),\n 'replace': $translate.instant('SHARED.MESSAGES.DROPIFY_REPLACE'),\n 'remove': $translate.instant('SHARED.MESSAGES.DROPIFY_REMOVE'),\n 'error': $translate.instant('SHARED.MESSAGES.DROPIFY_ERROR')\n }\n };\n });\n vm.dropifyConfig = {\n messages: {\n 'default': $translate.instant('SHARED.MESSAGES.DROPIFY_DEFAULT'),\n 'replace': $translate.instant('SHARED.MESSAGES.DROPIFY_REPLACE'),\n 'remove': $translate.instant('SHARED.MESSAGES.DROPIFY_REMOVE'),\n 'error': $translate.instant('SHARED.MESSAGES.DROPIFY_ERROR')\n }\n };\n\n vm.types = [{\n \"name\": \"EXCEL\",\n \"icon\": \"icon-file-excel-box\",\n \"type\": \"file\",\n \"color\": \"#1D7044\",\n \"active\": true\n },\n {\n \"name\": \"WEB\",\n \"icon\": \"icon-web\",\n \"type\": \"web\",\n \"color\": \"#039be5\",\n \"active\": false\n },\n {\n \"name\": \"TEXT\",\n \"icon\": \"icon-file-document-box\",\n \"type\": \"file\",\n \"color\": \"#725174\",\n \"active\": true\n },\n {\n \"name\": \"TWITTER\",\n \"icon\": \"icon-twitter-box\",\n \"type\": \"twitter\",\n \"color\": \"#2AAAE0\",\n \"active\": true\n }\n ];\n\n //Data\n vm.file = null;\n vm.selectedTemplate = null;\n vm.previewData = {};\n vm.previewLoaded = vm.previewData && vm.previewData.length > 0;\n vm.processing = false;\n vm.similarityMeasured = false;\n vm.parameters = {\n row: 0,\n start: 0,\n highlight: false,\n defaultFacet: false,\n facet: ['servis_danismani_genel_degerlendirme_s']\n };\n //Methods\n vm.saveFile = saveFile;\n vm.previewWithoutQueue = previewWithoutQueue;\n vm.uploadDataWithQueue = uploadDataWithQueue;\n vm.uploadFileWithQueue = uploadFileWithQueue;\n vm.editFile = editFile;\n vm.validateOptions = validateOptions;\n vm.toggleHeader = toggleHeader;\n vm.removeColumn = removeColumn;\n vm.getReportSelectables = getReportSelectables;\n vm.isSimilar = isSimilar;\n vm.showPreview = showPreview;\n vm.addDateFormat = addDateFormat;\n vm.addTimeFormat = addTimeFormat;\n vm.isMultiValuedCategoryField = isMultiValuedCategoryField;\n vm.selectTemplate = selectTemplate;\n vm.saveTemplate = saveTemplate;\n\n //calls\n init();\n\n function init() {\n setWebSourceActive();\n vm.getReportSelectables();\n //getQueueStatus();\n findIndicators();\n $utils.googleAnalyticsSetPageview(\"/report/\" + vm.reportId + \"/data/source\");\n $utils.googleAnalyticsSetScreenView(\"Report Data Upload\");\n }\n\n function findIndicators(){\n vm.indicatorModules = vm.reportModules.filter(function (rm) {\n return rm.module.indicator;\n });\n }\n\n function showPreview(){\n if(vm.useQueue){\n vm.uploadFileWithQueue();\n }else{\n vm.previewWithoutQueue();\n }\n }\n\n vm.showSourceScreen = function (type) {\n vm.showSource = false;\n switch (type.name) {\n case \"EXCEL\":\n $state.go('app.report.data.source.excel');\n break;\n case \"TEXT\":\n $state.go('app.report.data.source.text');\n break;\n case \"WEB\":\n $state.go('app.report.data.source.web');\n break;\n default:\n }\n }\n\n function setWebSourceActive() {\n var permissions = vm.user.permissions.filter(function (k) {\n return k.workspaceId == vm.user.selectedWorkspace.id;\n })[0].permissions;\n if (vm.activeSources.includes(\"WEBSOURCE\") && permissions.includes('SOURCE/WEBSOURCE/VIEW')) {\n vm.types.filter(function (k) {\n return k.name == \"WEB\"\n })[0].active = true;\n }\n }\n\n function findDateFormats(){\n api.report.findDateFormats()\n .then(function(res){\n vm.dateFormats = res;\n },function (err){\n $log.error(err);\n vm.dateFormats = [];\n });\n }\n\n function findTimeFormats(){\n api.report.findTimeFormats()\n .then(function(res){\n vm.timeFormats = res;\n },function (err){\n $log.error(err);\n vm.timeFormats = [];\n });\n }\n\n function addDateFormat(newFormat){\n vm.addFormatMessage = \"\";\n vm.addDateFormatProcessing = true;\n if(vm.dateFormats.indexOf(newFormat) > -1){\n vm.addFormatMessage = $translate.instant(\"REPORT.FORMAT.MESSAGE.ALREADY_EXISTS\");\n vm.addDateFormatProcessing = false;\n return;\n }\n api.report.addDateFormat(newFormat)\n .then(function(res){\n vm.dateFormats.push(newFormat);\n vm.addFormatMessage = $translate.instant(\"REPORT.FORMAT.MESSAGE.SUCCESS\");\n vm.addDateFormatProcessing = false;\n }, function(err){\n if(err.status == 400){\n vm.addFormatMessage = $translate.instant(\"REPORT.FORMAT.MESSAGE.INVALID\");\n }\n vm.addDateFormatProcessing = false;\n })\n }\n\n function addTimeFormat(newFormat){\n vm.addFormatMessage = \"\";\n vm.addTimeFormatProcessing = true;\n if(vm.timeFormats.indexOf(newFormat) > -1){\n vm.addFormatMessage = $translate.instant(\"REPORT.FORMAT.MESSAGE.ALREADY_EXISTS\");\n vm.addTimeFormatProcessing = false;\n return;\n }\n api.report.addTimeFormat(newFormat)\n .then(function(res){\n vm.timeFormats.push(newFormat);\n vm.addFormatMessage = $translate.instant(\"REPORT.FORMAT.MESSAGE.SUCCESS\");\n vm.addTimeFormatProcessing = false;\n }, function(err){\n if(err.status == 400){\n vm.addFormatMessage = $translate.instant(\"REPORT.FORMAT.MESSAGE.INVALID\");\n }\n vm.addTimeFormatProcessing = false;\n })\n } \n\n function isMultiValuedCategoryField(column){\n for (var i = 0; i < vm.reportCategories.length; i++) {\n if (column.type && column.type.value && column.type.value.trim() == vm.reportCategories[i].fieldTitle.trim() && (vm.reportCategories[i].fieldType == 302 || vm.reportCategories[i].fieldType == 303) ) {\n return true; \n }\n }\n return false;\n }\n\n function selectTemplate($event){\n api.report.findUploadFilePreviewTemplatesByReport(vm.reportId)\n .then(function(templates){\n for(var i in templates){\n var options = generateOptions(vm.hasHeader, vm.previewData.delimiter, templates[i].columns);\n templates[i].columnOptions = options.columnOptions;\n }\n ReportService.selectPreviewTemplate($scope, $event, $translate, templates).then(function(selectedTemplate){\n vm.selectedTemplate = selectedTemplate;\n applyTemplate();\n });\n });\n }\n\n function saveTemplate($event){\n var templateColumns = vm.previewData.columns;\n var options = generateOptions(vm.hasHeader, vm.previewData.delimiter, vm.previewData.columns);\n var validation = validateOptions(options);\n if (validation.hasProblem){\n var header = $translate.instant(\"REPORT.DATA_UPLOAD.WARNING_HEADER\");\n ReportService.warning($scope, $event, header, validation.message);\n angular.forEach(vm.uploadSampleFileForm.$error.required, function (field) {\n field.$setDirty();\n });\n return;\n }\n var templateId = vm.fileId;\n var columnOptions = options.columnOptions;\n ReportService.savePreviewTemplate($scope, $event, $translate, vm.reportId, templateId, columnOptions, templateColumns, vm.selectedTemplate).then(\n function(){},\n function(err){console.error(err);\n });\n }\n\n function applyTemplate(){\n for(var i = 0; i 1)\n return false;\n else\n return true;\n });\n vm.reportSelectables.filter(function (element) {\n return element !== undefined;\n });\n vm.reportSelectables = vm.reportSelectables.map(function (n) {\n return n.fieldTitle\n });\n for(var i in vm.reportModules){\n if(vm.reportModules[i].moduleTypeId == 1){\n vm.reportSelectables.push(vm.reportModules[i].module.name+\" - \"+$translate.instant(\"SHARED.MAIN_CATEGORY\"));\n vm.reportSelectables.push(vm.reportModules[i].module.name+\" - \"+$translate.instant(\"SHARED.SUB_CATEGORY\"));\n vm.reportMainCategoryTitles.push(vm.reportModules[i].module.name+\" - \"+$translate.instant(\"SHARED.MAIN_CATEGORY\"));\n vm.reportSubCategoryTitles.push(vm.reportModules[i].module.name+\" - \"+$translate.instant(\"SHARED.SUB_CATEGORY\"));\n }\n }\n vm.reportSelectables.forEach(function (m) {\n vm.fields.push({\n name: m,\n value: m\n })\n })\n }, function (err) {\n console.log(err);\n });\n }\n\n vm.fields = [\n {\n name: $translate.instant(\"SHARED.NONE\"),\n value: null\n },\n {\n name: $translate.instant(\"SHARED.NOMINAL_ATTRIBUTE\"),\n value: \"1_category\"\n },\n {\n name: $translate.instant(\"SHARED.TEXT\"),\n value: \"2_text\"\n },\n {\n name: $translate.instant(\"SHARED.DATE\"),\n value: \"3_date\"\n },\n {\n name: $translate.instant(\"SHARED.INDICATOR\"),\n value: \"5_indicator\"\n },\n {\n name: $translate.instant(\"SHARED.ATTRIBUTE\"),\n value: \"4_field\"\n },\n {\n name: $translate.instant(\"SHARED.ORIGINAL_ID\"),\n value: \"7_original_id\"\n },\n {\n name: $translate.instant(\"SHARED.SENTIMENT_FIELD\"),\n value: \"6_predefined_sentiment\"\n },\n ]\n\n function getEditDistance(a, b) {\n try {\n if (a.length == 0) return b.length;\n if (b.length == 0) return a.length;\n a = a.toLowerCase();\n b = b.toLowerCase();\n var matrix = [];\n\n // increment along the first column of each row\n var i;\n for (i = 0; i <= b.length; i++) {\n matrix[i] = [i];\n }\n // increment each column in the first row\n var j;\n for (j = 0; j <= a.length; j++) {\n matrix[0][j] = j;\n }\n\n // Fill in the rest of the matrix\n for (i = 1; i <= b.length; i++) {\n for (j = 1; j <= a.length; j++) {\n if (b.charAt(i - 1) == a.charAt(j - 1)) {\n matrix[i][j] = matrix[i - 1][j - 1];\n } else {\n matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // substitution\n Math.min(matrix[i][j - 1] + 1, // insertion\n matrix[i - 1][j] + 1)); // deletion\n }\n }\n }\n return (matrix[b.length][a.length]) / (b.length);\n\n } catch (err) {\n return 1;\n }\n\n };\n\n function toggleHeader(value) {//todo ??\n if(vm.useQueue){\n previewQueue();\n }else{\n previewWithoutQueue();\n }\n\n }\n\n function previewQueue() {\n var rows = vm.previewRows;\n if(rows.length<1){\n return;\n }\n \n vm.previewData = [];\n vm.processing = true;\n vm.uploading = true;\n var data = {'columns':[],'data':[]};\n var i;\n if(vm.hasHeader){\n for(i=0; i< rows[0].length;i++){\n data.columns[i] = {'name':i.toString(),'title':rows[0][i]}\n }\n }else{\n for(i=0; i< rows[0].length;i++){\n data.columns.push({'name':i.toString()})\n }\n }\n for(i = vm.hasHeader?1:0; i 0)\n data.columns = adjustColumnWhitespaces(data);\n vm.previewData = data;\n for (var i = 0; i < vm.previewData.length; i++) {\n vm.previewData[i].numeric = false;\n }\n if (!vm.similarityMeasured && vm.hasHeader) {\n measureSimilarities(data);\n vm.similarityMeasured = true;\n }\n vm.previewLoaded = true;\n vm.processing = false;\n vm.uploading = false;\n vm.uploadCurrentTab = 1;\n\n }, function (reason) {\n $log.error('Failed: ' + reason);\n vm.uploadCurrentTab = 0;\n });\n };\n\n function removeColumn(event, column) {\n var index = null;\n var type = null;\n for (var i in vm.previewData.columns) {\n var item = vm.previewData.columns[i];\n if (item.name == column.name) {\n index = i;\n type = item.type.value;\n break;\n }\n }\n\n if (index)\n vm.previewData.columns.splice(index, 1);\n\n switch (type) {\n case 1:\n index = null;\n for (var i in vm.customCategories) {\n var item = vm.customCategories[i];\n if (item.name == column.name) {\n index = i;\n break;\n }\n }\n if (index)\n vm.customCategories.splice(index, 1);\n break;\n case 3:\n index = null;\n for (var i in vm.customTags) {\n var item = vm.customTags[i];\n if (item == column.name) {\n index = i;\n break;\n }\n }\n if (index)\n vm.customTags.splice(index, 1);\n break;\n }\n\n renderPreview();\n }\n\n function measureSimilarities(data) {\n var similarityObjects = vm.reportSelectables;\n vm.closestTypes = {};\n for (var c in data.columns) {\n vm.closestTypes[data.columns[c].title] = closestType(similarityObjects, data.columns[c].title);\n }\n\n for (var i = 0; i < vm.previewData.columns.length; i++) {\n for (var j = 0; j < vm.reportSelectables.length; j++) {\n if (isSimilar(vm.previewData.columns[i].title, vm.reportSelectables[j])) {\n vm.previewData.columns[i].type = {\n name: vm.reportSelectables[j],\n value: vm.reportSelectables[j]\n }\n }\n }\n }\n }\n\n function isSimilar(title, item) {\n if($translate.instant(item)){\n item = $translate.instant(item);\n }\n if (vm.hasHeader) {\n return vm.closestTypes[title] === item; // 0.2 >= getEditDistance(title1, title2);\n }\n \n return false;\n }\n\n function closestType(fieldTypes, header) {\n var distances = fieldTypes.map(function (x) {\n return getEditDistance(x, header);\n });\n var minDist = Math.min.apply(null, distances);\n if (minDist < 0.30) {\n return fieldTypes[distances.indexOf(minDist)];\n } else {\n return null;\n }\n }\n\n function saveFile($event) {\n var res = prepareAndValidateFile($event);\n var isFileValid = res[0];\n if(isFileValid){\n var options = res[1];\n if(vm.useQueue){\n uploadDataWithQueue(options,'ready');\n }else{\n uploadFileWithoutQueue(options);\n }\n $utils.googleAnalyticsSetAction(\"REPORT\", \"DATA_UPLOAD\", vm.reportId)\n }\n }\n function prepareAndValidateFile($event){\n var options = generateOptions(vm.hasHeader, vm.previewData.delimiter, vm.previewData.columns);\n var validation = validateOptions(options);\n if (validation.hasProblem) {\n var header = $translate.instant(\"REPORT.DATA_UPLOAD.WARNING_HEADER\");\n ReportService.warning($scope, $event, header, validation.message);\n angular.forEach(vm.uploadSampleFileForm.$error.required, function (field) {\n field.$setDirty();\n });\n return [false, options];\n }\n if (vm.isThereAlreadyFieldWithSameName) return [false, options];\n vm.uploadSampleFileForm.$setPristine();\n vm.uploadSampleFileForm.$setUntouched();\n vm.processing = true;\n vm.requestId = null;\n return [true, options];\n }\n\n function generateOptions(hasHeader, delimiter, columns){\n var options = {\n columnOptions: [],\n hasHeader: hasHeader,\n delimiter: delimiter\n };\n\n for (var i in columns) {\n var column = columns[i];\n if (column.type && column.type.value === '1_category') {\n var col = {\n columnIndex: i,\n originalTitle: column.title,\n header: column.title,\n columnFeature: \"nominal_attribute\",\n columnName: column.name,\n numeric: column.numeric,\n multiValued: column.multiValued,\n delimeter: column.delimeter\n }\n for (var i = 0; i < vm.reportCategories.length; i++) {\n if (col.header && col.header.trim() == vm.reportCategories[i].fieldTitle.trim()) {\n vm.isThereAlreadyFieldWithSameName = true;\n }\n }\n options.columnOptions.push(col);\n } else if (column.type && vm.reportCategoryTitles.includes(column.type.value)) {\n var col = {\n columnIndex: i,\n originalTitle: column.title,\n header: column.type.value,\n columnFeature: \"nominal_attribute\",\n columnName: column.name,\n numeric: column.numeric,\n multiValued: column.multiValued,\n delimeter: column.delimeter\n }\n vm.reportCategories.forEach(function (f) {\n if (column.type && f.fieldTitle == column.type.value) {\n if (ReportService.isTextNominal(f.fieldType)) {\n col.numeric = false;\n col.multiValued = false;\n } else if (ReportService.isNumericNominal(f.fieldType)) {\n col.numeric = true;\n col.multiValued = false;\n } else if (ReportService.isMultiValuedTextNominal(f.fieldType)) {\n col.numeric = false;\n col.multiValued = true;\n } else if (ReportService.isMultiValuedNumericNominal(f.fieldType)) {\n col.numeric = true;\n col.multiValued = true;\n }\n }\n })\n options.columnOptions.push(col);\n } else if (column.type && column.type.value === '2_text') {\n var col = {\n columnIndex: i,\n originalTitle: column.title,\n header: column.title,\n columnFeature: \"text\",\n columnName: column.name\n }\n options.columnOptions.push(col);\n } else if (column.type && vm.reportTextTitles.includes(column.type.value)) {\n var col = {\n columnIndex: i,\n originalTitle: column.title,\n header: column.type.value,\n columnFeature: \"text\",\n columnName: column.name\n }\n options.columnOptions.push(col);\n } else if (column.type && column.type.value === '3_date') {\n var col = {\n columnIndex: i,\n originalTitle: column.title,\n header: column.title,\n columnFeature: \"date\",\n columnName: column.name,\n part: column.part\n }\n if(vm.useQueue){\n if(column.part == vm.dateParts.date){\n col.format = column.dateFormat;\n }\n if(column.part == vm.dateParts.time){\n col.format = column.timeFormat;\n }\n }\n options.columnOptions.push(col);\n } else if (column.type && column.type.value === '4_field') {\n var col = {\n columnIndex: i,\n originalTitle: column.title,\n header: column.title,\n columnFeature: \"attribute\",\n columnName: column.name\n }\n options.columnOptions.push(col);\n } else if (column.type && vm.reportFieldTitles.includes(column.type.value)) {\n var col = {\n columnIndex: i,\n originalTitle: column.title,\n header: column.type.value,\n columnFeature: \"attribute\",\n columnName: column.name\n }\n options.columnOptions.push(col);\n } else if (column.type && column.type.value === '5_indicator') {\n var col = {\n columnIndex: i,\n originalTitle: column.title,\n header: column.title,\n columnFeature: \"indicator\",\n columnName: column.name\n }\n options.columnOptions.push(col);\n } else if (column.type && column.type.value === '6_predefined_sentiment'){\n var col = {\n columnIndex: i,\n originalTitle: column.title,\n header: column.title,\n columnFeature: \"predefined_sentiment\",\n columnName: column.name\n }\n options.columnOptions.push(col);\n } else if (column.type && column.type.value === '7_original_id'){\n var col = {\n columnIndex: i,\n originalTitle: column.title,\n header: column.title,\n columnFeature: \"original_id\",\n columnName: column.name\n }\n options.columnOptions.push(col);\n } else if (column.type && vm.reportMainCategoryTitles.includes(column.type.value)) {\n var col = {\n columnIndex: i,\n originalTitle: column.title,\n header: column.type.value.replace(/ - [^-]+$/gi,''),\n columnFeature: \"predefined_main_category\",\n columnName: column.name\n }\n options.columnOptions.push(col);\n } else if (column.type && vm.reportSubCategoryTitles.includes(column.type.value)) {\n var col = {\n columnIndex: i,\n originalTitle: column.title,\n header: column.type.value.replace(/ - [^-]+$/gi,''),\n columnFeature: \"predefined_sub_category\",\n columnName: column.name,\n }\n options.columnOptions.push(col);\n } \n }\n return options;\n }\n\n function uploadFileWithoutQueue(options){\n var file = vm.file;\n Upload.upload({\n url: api.report.url + '/' + vm.report.id + '/upload',\n data: {\n file: file,\n options: JSON.stringify(options, function (key, value) {\n if (key === \"$$hashKey\") {\n return undefined;\n }\n return value;\n })\n },\n timeout: 600000\n }).then(function (resp) {\n vm.requestId = resp.data.requestId;\n vm.processingMonitor = true;\n $log.log('Success ' + resp.config.data.file.name + 'uploaded. Response: ' + resp.data);\n vm.processing = false;\n vm.file = null;\n vm.previewData = {};\n vm.check(vm.requestId);\n }, function (resp) {\n var resultJson = resp.data.errors[0].message;\n if (resp.status === 500) {\n var toast = $mdToast.simple()\n .content(resultJson)\n .action('OK')\n .highlightAction(true)\n .hideDelay(0)\n .position('fit')\n $mdToast.show(toast);\n vm.check(vm.requestId);\n vm.processingMonitor = true;\n vm.processing = false;\n }\n }, function (evt) {\n var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);\n $log.log('progress: ' + progressPercentage + '% ' + evt.config.data.file.name);\n });\n }\n \n function uploadDataWithQueue(options, status){\n var dataOptions = JSON.stringify(options, function (key, value) {\n if (key === \"$$hashKey\") {\n return undefined;\n }\n return value;\n });\n var uploadFileDataParams = {'settings':dataOptions,'status':status};\n api.report.uploadFileDataQueue(vm.report.id,vm.fileId,uploadFileDataParams)\n .then(function(invalidDataCount){\n if(invalidDataCount>0){\n exportInvalidData(invalidDataCount,vm.report.id,vm.fileId)\n }\n if(status === 'ready'){\n $state.go('app.report.datasummary', {\n id: vm.reportId,\n }, {\n reload: true\n }); \n }else if(status === 'unready'){\n $state.go('app.report.data.source.excel.edit', {\n fileId: vm.fileId,\n });\n }\n vm.processingMonitor = true;\n vm.processing = false;\n },function(err){\n console.log(err);\n vm.processingMonitor = true;\n vm.processing = false;\n })\n }\n\n function uploadFileWithQueue() {\n if (!(vm.file.name.endsWith(\".xlsx\") || vm.file.name.endsWith(\".xls\"))) {\n return;\n }\n vm.processing = true;\n vm.uploading = true;\n Upload.upload({\n url: api.report.url + '/' + vm.report.id + '/upload/queue',\n data: {\n file: vm.file\n },\n timeout: 600000\n }).then(function (resp) {\n vm.requestId = resp.data.requestId;\n vm.processingMonitor = false;\n $log.log('Success ' + resp.config.data.file.name + 'uploaded. Response: ');\n $log.log(resp.data);\n vm.processing = false;\n vm.previewData = {};\n //vm.check(vm.requestId);\n vm.previewRows = resp.data.firstNRows;\n vm.fileId = resp.data.fileId;\n previewQueue();\n }, function (resp) {\n var resultJson = resp.data.errors[0].message;\n if (resp.status === 500) {\n //vm.check(vm.requestId);\n vm.processing = false;\n vm.uploading = false;\n }\n }, function (evt) {\n var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);\n $log.log('progress: ' + progressPercentage + '% ' + evt.config.data.file.name);\n });\n }\n\n function editFile(){\n var res = prepareAndValidateFile();\n var isFileValid = res[0];\n if(isFileValid){\n var options = res[1];\n uploadDataWithQueue(options,'unready');\n } // TODO correct this method\n }\n\n vm.processTraceStatus = 200;\n\n vm.getProcessTraces = function (requestId) {\n api.report.getProcesses(requestId)\n .then(function (r, status) {\n var finished = r.find(function (rr) {\n return rr.status == 201\n });\n if (finished) {\n vm.processTraceStatus = 201;\n vm.processingMonitor = false;\n vm.stopCheck();\n } else {\n var errorFound = r.find(function (rr) {\n return rr.status == 500\n });\n if (errorFound) {\n vm.processTraceStatus = 500;\n vm.stopCheck();\n vm.processTraces = r;\n } else {\n vm.processTraceStatus = 200;\n vm.processTraces = r;\n }\n }\n }, function (e, status) {\n vm.processTraceStatus = status;\n })\n }\n\n $scope.$on('$destroy', function () {\n // Make sure that the interval is destroyed too\n vm.stopCheck();\n });\n\n var stop;\n vm.check = function (requestId) {\n // Don't start a new fight if we are already fighting\n if (angular.isDefined(stop)) return;\n\n stop = $interval(function () {\n if (vm.processingMonitor) {\n vm.getProcessTraces(requestId);\n } else {\n vm.stopCheck();\n }\n }, 2000);\n };\n\n vm.stopCheck = function () {\n if (angular.isDefined(stop)) {\n $interval.cancel(stop);\n if (stop.$$state.status === 2) {\n if (vm.processTraceStatus === 201) {\n var lang = $translate.use();\n var successText = \"Başarılı\";\n if (lang == \"en\") {\n successText = \"Successful\";\n }\n var toast = $mdToast.simple()\n .content(successText)\n .action('OK')\n .highlightAction(true)\n .hideDelay(0)\n .position('fit');\n \n $mdToast.show(toast);\n vm.uploadCurrentTab = 0;\n setTimeout(function () {\n $scope.$apply(function () {\n $state.go('app.report.data', {\n id: vm.reportId\n }, {\n reload: true\n });\n });\n }, 2000);\n }\n }\n stop = undefined;\n }\n };\n\n function alphaToNum(alpha) {\n\n var i = 0,\n num = 0,\n len = alpha.length;\n\n for (; i < len; i++) {\n num = num * 26 + alpha.charCodeAt(i) - 0x40;\n }\n\n return num - 1;\n }\n\n function numToAlpha(num) {\n\n var alpha = '';\n\n for (; num >= 0; num = parseInt(num / 26, 10) - 1) {\n alpha = String.fromCharCode(num % 26 + 0x41) + alpha;\n }\n\n return alpha;\n }\n\n function adjustColumnWhitespaces(source) {\n var lastColumnName = source.columns[source.columns.length - 1].name;\n var realIndexOfName = vm.excelColumnsDictionary.indexOf(lastColumnName);\n var newColumns = [];\n var i;\n for (i = 0; i <= realIndexOfName; i++) {\n if (vm.hasHeader) {\n var found = source.columns.find(function (c) {\n return c.name === vm.excelColumnsDictionary[i]\n });\n if (found && found.title) {\n newColumns.push({\n \"name\": vm.excelColumnsDictionary[i],\n \"title\": found.title\n });\n } else\n newColumns.push({\n \"name\": vm.excelColumnsDictionary[i],\n \"title\": null\n });\n } else {\n newColumns.push({\n \"name\": vm.excelColumnsDictionary[i]\n });\n }\n }\n return newColumns;\n }\n\n function _buildColumnsArray(range) {\n\n var i,\n res = [],\n rangeNum = range.split(':').map(function (val) {\n return alphaToNum(val.replace(/[0-9]/g, ''));\n }),\n start = rangeNum[0],\n end = rangeNum[1] + 1;\n\n for (i = start; i < end; i++) {\n res.push(numToAlpha(i));\n }\n\n return res;\n }\n\n\n function validateOptionsv0(options) {\n if (options.contents.length <= 0) return false;\n\n if (options.contents.length > 0) {\n if (options.categories.length <= 0) {\n if (options.customCategories != null && options.customCategories.length <= 0) {\n return false;\n }\n }\n }\n\n return true;\n };\n\n function checkDuplicateFieldsWithSameName(columnOptions,columnFeature){\n var columnHeaders = columnOptions.filter(function(f){return f.columnFeature === columnFeature;}).map(function(f){return f.header;});\n if((new Set(columnHeaders)).size !== columnHeaders.length){\n vm.isThereAlreadyFieldWithSameName = true;\n }\n }\n\n function hasMultipleFieldsWithSameFeature(columnOptions, columnFeature){\n var columnHeaders = columnOptions.filter(function(f){return f.columnFeature === columnFeature;}).map(function(f){return f.header;});\n if(columnHeaders.length>1) return true;\n return false; \n }\n\n function hasMultipleFieldsWithSamePart(columnOptions, columnFeature){\n var columnParts = columnOptions.filter(function(f){return f.columnFeature === columnFeature;}).map(function(f){return f.part;});\n console.log('columnParts');\n console.log(columnParts);\n if(new Set(columnParts).size !== columnParts.length){\n return true;\n }\n return false;\n }\n\n function hasInvalidDatePartCombination(columnOptions){\n //buraya gelmeden singularty check yapldi. sadece kombnsynlri kontrl et VI\n /*\n allowed combinations\n day mn yr time, day mn yr, mn yr, yr, date, date time\n */ \n\n var dateParts = columnOptions.filter(function(f){return f.columnFeature === 'date';}).map(function(f){return f.part;});\n if(dateParts.length === 0){\n return false;\n }\n //includesa cevir inleri\n if(dateParts.includes(vm.dateParts.date) && !dateParts.includes(vm.dateParts.day) && !dateParts.includes(vm.dateParts.month) && !dateParts.includes(vm.dateParts.year)){\n return false;//[date], [date,time]\n }\n if(!dateParts.includes(vm.dateParts.date) && dateParts.includes(vm.dateParts.year)){\n if(dateParts.includes(vm.dateParts.day) && dateParts.includes(vm.dateParts.month)){\n return false; //[day, month, year], [day, month, year, time]\n }\n if(!dateParts.includes(vm.dateParts.day) && !dateParts.includes(vm.dateParts.time)){\n return false; // [year, month], [year]\n }\n }\n return true; //invalid combination\n }\n\n function validateOptions(options, status) {\n vm.isThereAlreadyFieldWithSameName = false;\n if (options.columnOptions.length <= 0) return {\n hasProblem: true,\n message: getMessage(1)\n };\n checkDuplicateFieldsWithSameName(options.columnOptions,\"text\");\n checkDuplicateFieldsWithSameName(options.columnOptions,\"attribute\");\n checkDuplicateFieldsWithSameName(options.columnOptions,\"nominal_attribute\");\n if(status == 'ready'){ // check on edit page if unready\n if (vm.indicatorModules.length > 0) {\n var indicatorColumns = options.columnOptions.filter(function (c) {\n if (c.columnFeature === \"indicator\") return true;\n });\n if (!indicatorColumns || indicatorColumns.length < 1)\n return {\n hasProblem: true,\n message: getMessage(2)\n }\n } \n }\n if (vm.isThereAlreadyFieldWithSameName) {\n return {\n hasProblem: true,\n message: getMessage(3)\n }\n }\n\n for (var i=0; i < options.columnOptions.length; i++) {\n for (var j = 0; j < options.columnOptions.length; j++) {\n if (i != j && options.columnOptions[i].header == options.columnOptions[j].header && options.columnOptions[i].columnFeature == \"nominal_attribute\") {\n return {\n hasProblem: true,\n message: getMessage(4)\n }\n \n }\n }\n }\n\n if(hasMultipleFieldsWithSameFeature(options.columnOptions,\"indicator\")){\n return {\n hasProblem: true,\n message: getMessage(5)\n };\n }\n if(vm.useQueue && hasMultipleFieldsWithSamePart(options.columnOptions,\"date\")){\n return {\n hasProblem: true,\n message: getMessage(10)\n };\n }\n if(vm.useQueue && hasInvalidDatePartCombination(options.columnOptions)){\n return{\n hasProblem: true,\n message: getMessage(9)\n }\n }\n if(!vm.useQueue && hasMultipleFieldsWithSameFeature(options.columnOptions,\"date\")){\n return{\n hasProblem: true,\n message: getMessage(6)\n }\n }\n if(hasMultipleFieldsWithSameFeature(options.columnOptions,\"predefined_sentiment\")){\n return {\n hasProblem: true,\n message: getMessage(7)\n };\n }\n if(hasMultipleFieldsWithSameFeature(options.columnOptions,\"original_id\")){\n return {\n hasProblem: true,\n message: getMessage(8)\n };\n }\n\n\n return {\n hasProblem: false,\n message: null\n };\n }\n\n function getMessage(code) {\n var lang = $translate.use();\n if (lang == \"tr\") {\n if (code == 1) {\n return \"En az bir kolon seçilmelidir.\"\n } else if (code == 2) {\n return \"Rapora ait belirteçli sınıflandırıcı var, bu sebeple birleştir kolonu seçilmelidir\"\n } else if (code == 3) {\n return \"Bu rapor zaten aynı isimde bir alana sahip.\"\n } else if (code == 4) {\n return \"Aynı isimde iki adet alan seçilemez.\"\n } else if(code == 5){\n return \"Birden fazla belirteç kolonu seçilemez.\"\n } else if(code == 6){\n return \"Birden fazla tarih kolonu seçilemez.\"\n } else if(code == 7){\n return \"Birden fazla duygu kolonu seçilemez.\"\n } else if(code == 8){\n return \"Birden fazla orijinal id kolonu seçilemez.\"\n } else if(code == 9){\n return \"Seçili tarih alanları birleşimi yüklemeye uygun değildir.\"\n } else if(code == 10){\n return \"Aynı parça için birden fazla tarih kolonu seçilemez.\"\n }\n } else if (lang == \"en\") {\n if (code == 1) {\n return \"At least one column must be selected.\"\n } else if (code == 2) {\n return \"Report has created with indicator. Please select indicator’s column.\";\n } else if (code == 3) {\n return \"This report already has a field with the same name.\"\n } else if (code == 4) {\n return \"You cannot select two fields with the same name.\"\n } else if(code == 5){\n return \"You cannot select multiple indicator fields.\"\n } else if(code == 6){\n return \"You cannot select multiple date fields.\"\n } else if(code == 7){\n return \"You cannot select multiple sentiment fields.\"\n } else if(code == 8){\n return \"You cannot select multiple original id fields.\"\n } else if(code == 9){\n return \"The selected date fields combinaton is not suitable for loading.\"\n } else if(code == 10){\n return \"You cannot select multiple date fields with the same part.\"\n }\n }\n }\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.report')\n .controller('DataSummaryController', DataSummaryController);\n\n /** @ngInject */\n function DataSummaryController($stateParams, $log, $translate, api, $$report, $mdToast, ReportService, $q, $scope, $mdMedia, $mdDialog, $state, user, appSettings, $utils) {\n var vm = this;\n moment.locale('tr');\n\n //variables\n vm.report = $$report;\n vm.user = user;\n vm.reportId = $stateParams.id;\n vm.reportWebSources = [];\n vm.fileUploadInfo = [];\n vm.activeSources = appSettings.activeSources;\n\n vm.exportFileData = exportFileData;\n vm.findFileUploadInfo = findFileUploadInfo;\n vm.showFileInfo = showFileInfo;\n \n /// pagination for data summary\n vm.pagination = {\n 'current':1,\n 'last':1\n };\n vm.pagination.websource = {\n 'current': 0,\n 'last': 1\n };\n vm.pageSize = 10;\n vm.setCurrentPage = function(pageNum){\n vm.filePage = vm.fileUploadInfo.slice(vm.pageSize*(pageNum-1),vm.pageSize*pageNum+1);\n vm.pagination.current = pageNum;\n }\n vm.setWebsourceCurrentPage = function (pageNum) {\n getReportWebSources(pageNum)\n }\n /// pagination for data summary end\n\n\n\n function findFileUploadInfo(){\n api.report.uploadFileInfos(vm.reportId)\n .then(function(infos){\n for(var i = 0;i' + inputs + '')\n .appendTo('body').submit().remove();\n }\n }\n\n function getReportWebSources(pageNum) {\n var permissions = vm.user.permissions.filter(function (k) {\n return k.workspaceId == vm.user.selectedWorkspace.id;\n })[0].permissions;\n vm.webSourceViewPermission = permissions.includes('SOURCE/WEBSOURCE/VIEW');\n if (vm.activeSources.includes(\"WEBSOURCE\") && permissions.includes('SOURCE/WEBSOURCE/VIEW')) {\n api.source.getReportTemplates(vm.report.id, pageNum)\n .then(function (response) {\n vm.reportWebSources = response.content;\n vm.pagination.websource.current = response.number; \n vm.pagination.websource.last = response.totalPages;\n },\n function (response) {\n $log.error(response);\n });\n }\n }\n\n vm.openSource = function (item) {\n $state.go('app.sources.web.edit', {\n websourceid: item.id\n });\n };\n\n vm.removeWebSource = function (websource, $event) {\n var deferred = $q.defer();\n showConnectWebsourceToReportDialog($scope, $event, $translate.instant('TOPIC.CONFIRM.SAVE_TITLE'), $translate.instant('SOURCE.CONNECT_CONFIRM.SAVE_BODY'))\n .then(function (answer) {\n if (answer == undefined) return;\n websource.reportCode = null;\n api.source.unbindTemplate(vm.user.selectedWorkspace.id, vm.report.id, websource.id)\n .then(function (response) {\n vm.reportWebSources = vm.reportWebSources.filter(function (m) { return m.id != websource.id; })\n vm.setWebsourceCurrentPage(vm.pagination.websource.current)\n showSuccessDialog($scope, $event, $translate.instant('SOURCE.CONNECT_CONFIRM.SAVE_RESULT_SUCCESS_TITLE'), $translate.instant('SOURCE.CONNECT_CONFIRM.SAVE_RESULT_SUCCESS_BODY'))\n .then(function () {\n deferred.resolve(response);\n });\n },\n function (response) {\n $log.error(response);\n });\n\n });\n return deferred.promise;\n }\n\n function showConnectWebsourceToReportDialog($scope, $event, title, body) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'BasicDialogController as vm',\n templateUrl: 'app/main/apps/sources/services/basic-confirm-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body,\n state: $state\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function (answer) {\n deferred.resolve(answer);\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showSuccessDialog($scope, $event, title, body) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'BasicSuccessDialogController as vm',\n templateUrl: 'app/main/apps/pipelines/services/basic-success-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body\n }\n })\n .then(function (answer) {\n deferred.resolve();\n }, function (answer) {\n deferred.resolve();\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showFileInfo($event, file){\n api.report.findFileMappings(vm.reportId,file.id)\n .then(function(uploadMappings){\n ReportService.showUploadMappings($scope, $translate, $event, uploadMappings);\n },function(err){\n console.log(err);\n }); \n }\n\n function init() {\n findFileUploadInfo();\n setInterval(findFileUploadInfo, 20*1000);//runs once in 20 secs.\n getReportWebSources();\n $utils.googleAnalyticsSetPageview(\"/report/\" + vm.reportId + \"/datasummary\");\n $utils.googleAnalyticsSetScreenView(\"Data Summary\");\n }\n init();\n\n }\n})();\n\n\n\n\n(function () {\n 'use strict';\n\n angular\n .module('app.report')\n .controller('ReportDataOverviewController', ReportDataOverviewController);\n\n /** @ngInject */\n function ReportDataOverviewController($rootScope, $scope, $element, $state, $translate, $window, $timeout,\n $stateParams, $log, api, ReportService, ReportDocumentService, ReportQueryParserService, ReportDocumentAnnotationService, ReportAssignmentService, ReportNoteService, $$report, $mdToast, NGAnnotation, $location, $mdSidenav, base64, user, toastService, ReportHistoryService, $settings, appSettings, $compile, $q, $utils) {\n\n var vm = this;\n vm.translate = $translate;\n vm.reportSettings = $$report.reportSettings;\n vm.hideTags = !vm.reportSettings.commonSettings.showTags;\n vm.hideCategoryTags = !vm.reportSettings.commonSettings.showCategoryTags;\n vm.showDocumentSentimentDetailChart = vm.reportSettings.commonSettings.showDocumentSentimentDetailChart;\n vm.documentNickname = $translate.use() == \"tr\" ? vm.reportSettings.commonSettings.documentNicknameTr : vm.reportSettings.commonSettings.documentNicknameEn;\n if (!$stateParams.query && !$location.search().query && ReportService.getQuery($$report.id) != null) {\n $location.search('query', ReportService.getQuery($$report.id).query);\n }\n\n $rootScope.$on('$translateChangeSuccess', function(event, current, previous) {\n vm.sentimentChart.options.chart.noData = $translate.instant('CLASSIFICATION.ERRORS.NO_DATA_AVAILABLE');\n });\n\n vm.languageDatePicker = $translate.use() === \"tr\" ? 1 : 2;\n vm.isDatePickerCreatorStarted = false;\n vm.language = $translate.use();\n setInterval(function () { vm.language = $translate.use(); }, 100);\n $scope.$watch('vm.language', function () {\n vm.documentNickname = $translate.use() == \"tr\" ? vm.reportSettings.commonSettings.documentNicknameTr : vm.reportSettings.commonSettings.documentNicknameEn;\n vm.translations = {\n SELECT_ASSIGN_USER_PLACEHOLDER: $translate.instant('REPORT.EDIT_DOCUMENT.SELECT_ASSIGN_USER_PLACEHOLDER', { x: vm.documentNickname }),\n UNASSIGN_DOCUMENT: $translate.instant('REPORT.EDIT_DOCUMENT.UNASSIGN_DOCUMENT', { x: vm.documentNickname })\n }\n if ($$report.hasTrainedModule) {\n if ($translate.use() == \"tr\") {\n vm.languageDatePicker = 1;\n setTimeout(function () { createDatePicker(); }, 200);\n } else if ($translate.use() == \"en\") {\n vm.languageDatePicker = 2;\n setTimeout(function () { createDatePicker(); }, 200);\n }\n }\n /*api.report.checkTrain(vm.reportId)\n .then(function (response) {\n if (response.valid) {\n if ($translate.use() == \"tr\") {\n vm.languageDatePicker = 1;\n setTimeout(function () { createDatePickers(); }, 200);\n } else if ($translate.use() == \"en\") {\n vm.languageDatePicker = 2;\n setTimeout(function () { createDatePickers(); }, 200);\n }\n }\n }, function (err) {\n console.log(err);\n });*/\n });\n\n vm.translations = {\n SELECT_ASSIGN_USER_PLACEHOLDER: $translate.instant('REPORT.EDIT_DOCUMENT.SELECT_ASSIGN_USER_PLACEHOLDER', { x: vm.documentNickname }),\n UNASSIGN_DOCUMENT: $translate.instant('REPORT.EDIT_DOCUMENT.UNASSIGN_DOCUMENT', { x: vm.documentNickname })\n }\n\n vm.searching = true;\n vm.sideNavEnabled = true;\n //variables general\n vm.report = $$report;\n vm.reportModules = $$report.reportModules;\n vm.reportModuleIds = vm.reportModules.map(function (k) {\n return k.moduleId;\n });\n vm.reportFields = $$report.reportFields;\n vm.activeSources = appSettings.activeSources;\n vm.isFlatModeActive = false;\n vm.numericReportFields = [];\n vm.reportId = $stateParams.id;\n vm.dashboardModuleId = $stateParams.dashboardModuleId;\n vm.goBackDocumentQuery = null;\n vm.goToParentDocumentClicked = false;\n vm.singleClassificationModule = null;\n vm.categories = $$report.moduleCategories;\n moment.locale('tr');\n vm.user = user;\n user.moduleWorkspace = $$report.workspaceId;\n $rootScope.selectedWorkspaceId = $$report.workspaceId;\n vm.userSettings = $settings.reportSettingsList ? $settings.reportSettingsList.filter(function (r) { return r.reportId == vm.report.id; })[0] : null;\n vm.showLogs = false;\n vm.highlightingIsOn = false;\n vm.afterDatePicker = {\n startDate: null,\n endDate: null\n };\n\n vm.data = {\n facets: []\n };\n vm.pagination = {\n number: 1,\n totalNumber: 1,\n current: 1,\n last: 1,\n count: 1,\n readyCount: 0\n };\n vm.rightBottomSettingsButton = {\n isOpen: false,\n selectedMode: 'md-scale'\n };\n vm.ctrlKeyPressing = false;\n vm.groupCtrlCount = 6000; //Math.floor(Math.random() * 10000) + 1;\n vm.orBundle = [];\n vm.filterChips = ReportService.getFilterChips(vm.reportId, vm.reportSettings.commonSettings.filterChips);\n vm.allBookmarks = $$report.bookmarks;\n vm.bookmarks = vm.allBookmarks.filter(function (k) { return k.userName != null });\n vm.generalBookmarks = vm.allBookmarks.filter(function (k) { return k.userName == null });\n vm.extraFilters = false;\n vm.rangeFilterStartEndValues = [];\n vm.appylyFilterFlexValue = 10;\n vm.selectedRangeFilter = \"content_len_i\";\n vm.selectedRangeFilterCategory = vm.categories[0];\n vm.searchCategoryName = \"\";\n\n //variables sidevnav\n vm.sidenavQuery = null;\n vm.sidenavQueryFunc = sidenavQueryFunc;\n vm.openSaveDefaultReportFiltersDialog = openSaveDefaultReportFiltersDialog;\n vm.bookmarkSidenav = buildToggler('right');\n vm.filterSidenav = buildToggler('main-sidenav');\n\n\n //variables search upside filters\n vm.datePicker = {};\n vm.pickerModel = moment();\n vm.dateFormat = dateFormat;\n vm.feedbackMode = false;\n vm.similarityMode = true;\n vm.feedbackTypeOpen = false;\n vm.assignmentTypeOpen = false;\n vm.assignTo = false;\n vm.assignBy = false;\n vm.noAssign = false;\n vm.drafted = false;\n vm.noConfirmed = false;\n vm.confirmed = false;\n vm.pending = false;\n vm.patternFilters = ReportService.getPatternFilters(vm.reportId);\n vm.moreAndMoreCount = 1;\n vm.userHaveReadyPermission = false;\n\n //variables general filter\n vm.paramSearchByDate = $stateParams.searchByDate == undefined ? 1 : $stateParams.searchByDate;\n vm.parameters = {\n query: null,\n date: null,\n startDate: null,\n endDate: null,\n searchByDate: vm.paramSearchByDate,\n sort: \"createdate desc\",\n row: 10,\n start: 0,\n filter: [],\n category: [],\n facet: [],\n feedback: null,\n assignment: null,\n highlight: false,\n defaultFacet: true,\n patternFilter: []\n };\n\n //variables sorting\n vm.sortableFields = [];\n vm.sortOrders = ['asc', 'desc'];\n vm.sortByFieldName = \"createdate\"; //default search parameter\n vm.sortOrder = vm.sortOrders[1]; //default search parameter\n\n //methods search\n vm.search = search;\n vm.searchFromStart = searchFromStart;\n vm.setCurrentPage = setCurrentPage;\n vm.toggleSort = toggleSort;\n vm.highlightCategoryContent = highlightCategoryContent;\n vm.unHighlightCategoryContent = unHighlightCategoryContent;\n vm.toggleFeedbackMode = toggleFeedbackMode;\n vm.toggleFlatMode = toggleFlatMode;\n vm.clickNoConfirmedMode = clickNoConfirmedMode;\n vm.clickDraftedMode = clickDraftedMode;\n vm.clickConfirmedMode = clickConfirmedMode;\n vm.clickTrashedMode = clickTrashedMode;\n vm.clickPendingMode = clickPendingMode;\n vm.clickAssignToMode = clickAssignToMode;\n vm.clickAssignByMode = clickAssignByMode;\n vm.clickNoAssignMode = clickNoAssignMode;\n vm.toggleFacetFilter = toggleFacetFilter;\n vm.removeFacetFilter = removeFacetFilter;\n vm.resetFilters = resetFilters;\n vm.exportReport = exportReport;\n vm.reevaluateReport = reevaluateReport;\n vm.removeDocuments = removeDocuments;\n vm.deleteReport = deleteReport;\n vm.uploadReportFeedback = uploadReportFeedback;\n vm.setPatternFilter = setPatternFilter;\n vm.removePatternFilter = removePatternFilter;\n vm.filterValueSearch = filterValueSearch;\n\n //methods bookmarks\n vm.saveBookmark = saveBookmark;\n vm.deleteBookmark = deleteBookmark;\n vm.goToBookmark = goToBookmark;\n\n //methods date\n vm.changeDate = changeDate;\n vm.clearDate = clearDate;\n vm.isDateField = isDateField;\n vm.isNotDateField = isNotDateField;\n\n //methods web content\n vm.titleIsNotContent = titleIsNotContent;\n vm.showDocumentDetail = showDocumentDetail;\n vm.showField = showReportField;\n\n //methods facet\n vm.filterSidenavFacet = filterSidenavFacet;\n\n //methods feedback document\n vm.readyDocument = readyDocument;\n vm.unReadyDocument = unReadyDocument;\n vm.unTrashDocument = unTrashDocument;\n vm.showAssignContent = showAssignContent;\n vm.unAssignDocument = unAssignDocument;\n vm.showDocumentNote = showDocumentNote;\n vm.showDocumentAnnotation = showDocumentAnnotation;\n vm.processing = {};\n\n function showReportField(field) {\n var filteredReportField = vm.reportFields.filter(function (reportField) {\n return reportField.fieldName == field.key;\n });\n if (filteredReportField.length > 0)\n return !filteredReportField[0].hideAsTag;\n else\n return false;\n }\n\n function uploadReportFeedback($event) {\n ReportService.uploadFeedbackPrompt($scope, $event, vm.report.id);\n }\n\n function reevaluateReport($event) {\n ReportService.reevaluatePrompt($scope, $event, vm.report.id, user, vm.documentNickname);\n }\n\n angular.element($window).bind('keydown', function (e) {\n if (e.keyCode == 16) {\n vm.ctrlKeyPressing = true;\n vm.groupCtrlCount = vm.groupCtrlCount + 1;\n }\n });\n\n angular.element($window).bind('keyup', function (e) {\n if (e.keyCode == 16) {\n vm.ctrlKeyPressing = false;\n //vm.groupCtrlCount = Math.floor(Math.random() * 10000) + 1;\n //vm.searchFromStart();\n }\n });\n\n function removeDocuments($event) {\n ReportService.deleteReportData($scope, $state, $event, vm.report, vm.parameters, vm.data.count);\n }\n\n function deleteReport($event) {\n if (vm.isFlatModeActive)\n ReportService.warning($scope, $event, $translate.instant(\"REPORT.ERRORS.ACTIVE_WEB_SOURCE_HEADER\"), $translate.instant(\"REPORT.ERRORS.ACTIVE_WEB_SOURCE_BODY\"));\n else\n ReportService.deleteReport($scope, $state, $event, vm.report);\n }\n\n function exportReport(type,$event) {\n ReportService.exportPrompt($scope, $event, vm.report.id, user, vm.parameters, type, vm.data.count);\n }\n\n function replicateReport($event) {\n ReportService.replicatePrompt($scope, $event, vm.report.id, user, vm.documentNickname);\n }\n\n function downloadJquery(url, data, method) {\n if (url && data) {\n data = typeof data === 'string' ? data : jQuery.param(data);\n var inputs = '';\n jQuery.each(data.split('&'), function () {\n var pair = this.split('=');\n if (pair[0] == \"category%5B%5D\" || pair[0] == \"filter%5B%5D\") {\n inputs += '';\n } else {\n inputs += '';\n }\n });\n jQuery('
' + inputs + '
')\n .appendTo('body').submit().remove();\n }\n }\n\n function filterValueSearch(query, data) {\n var results = query ? data.filter(createFilterFor(query)) : data;\n return results;\n }\n\n function createFilterFor(query) {\n var lowercaseQuery = angular.lowercase(query);\n return function filterFn(item) {\n return (angular.lowercase(item.name).indexOf(lowercaseQuery) != -1);\n };\n }\n\n vm.filteredFacets = {};\n\n function setFilteredFacets() {\n vm.filteredFacets = {};\n for (var i = 0; i < vm.filterChips.length; i++) {\n if (vm.filteredFacets[vm.filterChips[i].titleKey] != null) {\n vm.filteredFacets[vm.filterChips[i].titleKey].push(vm.filterChips[i]);\n } else {\n var childs = [];\n childs.push(vm.filterChips[i]);\n vm.filteredFacets[vm.filterChips[i].titleKey] = childs;\n }\n }\n }\n\n vm.filteredFacets = {};\n\n function toggleFacetFilter(child, item, $event) {\n if (!vm.sideNavEnabled) return;\n /*\n if (JSON.stringify(vm.filterChips).length + JSON.stringify(ReportQueryParserService.setNormalFacetFilters(vm.filterChips)).length > 1700) {\n toastService.serverError($translate.instant('REPORT.ERRORS.FILTER_LIMIT'))\n return;\n }*/\n if (ReportService.isThisFieldType(300, item.type) || item.type == 700 || item.type == 800 || item.type == 200) {\n if (!vm.ctrlKeyPressing) {\n //var keyValue = generateKeyValuePairFilter(child.fieldName, child.value);\n var filterChip = {\n key: item.title,\n value: child.value,\n type: item.type,\n group: -1,\n operand: \"AND\",\n titleKey: item.title\n }\n vm.filterChips.push(filterChip);\n var foundedFilters = vm.filterChips.filter(function(chip){\n return chip.key == item.title;\n });\n if(foundedFilters && foundedFilters.length > 1){\n //var group = Math.floor(Math.random() * 10000) + 1;\n vm.groupCtrlCount = vm.groupCtrlCount + 1;\n foundedFilters.forEach(function(chip){\n chip.group = vm.groupCtrlCount; //group;\n chip.operand = \"OR\";\n });\n }\n //search();\n\n // searchDateRanges();\n }\n if (vm.ctrlKeyPressing) {\n var filterCtrlChip = {\n key: item.title,\n value: child.value,\n type: item.type,\n group: vm.groupCtrlCount,\n operand: \"OR\",\n titleKey: item.title\n }\n vm.filterChips.push(filterCtrlChip);\n }\n item.facetList = item.facetList.filter(function(c){ return c !== child;});\n }\n\n if (item.type >= 100 && item.type < 200) {\n if (!vm.ctrlKeyPressing) {\n vm.sideNavEnabled = false;\n var level = null;\n if (item.key === vm.dashboardModuleId) {\n level = findChartLevel();\n }\n if(child.parentString){\n var foundedSameLevelFilter = vm.filterChips.filter(function(chip) {return chip.key == item.key && chip.parentString && chip.parentString.split(\"->\").length == child.parentString.split(\"->\").length;})[0];\n if(foundedSameLevelFilter)\n level = level - 1;\n }else{\n var foundedSameLevelFilter = vm.filterChips.filter(function(chip) {return chip.key == item.key && typeof chip.parentString === 'undefined' && typeof child.parentString === 'undefined';})[0];\n if(foundedSameLevelFilter)\n level = level - 1;\n }\n\n var catFilterChip = {\n key: item.key,\n value: child.value,\n type: 100,\n group: -1,\n operand: \"AND\",\n parentString: child.parentString,\n titleKey: item.title,\n level: level,\n aspectSentiment: child.sentimentFilter ? child.sentimentFilter : \"\"\n }\n vm.filterChips.push(catFilterChip);\n vm.searchFromStart();\n } else {\n var catCtrlFilterChip = {\n key: item.key,\n value: child.value,\n type: 100,\n group: vm.groupCtrlCount,\n operand: \"OR\",\n parentString: child.parentString,\n titleKey: item.title,\n level: level,\n aspectSentiment: child.sentimentFilter ? child.sentimentFilter : \"\"\n }\n vm.filterChips.push(catCtrlFilterChip);\n }\n item.facetList = item.facetList.filter(function(c){ return c !== child;});\n }\n setFilteredFacets();\n }\n\n vm.getFilteredFacetTitle = function (title) {\n if (!vm.afterResponse) return title;\n var reportField = vm.reportFields.filter(function (a) {\n return a.fieldTitle == title;\n })[0]\n if (reportField) {\n var alias = vm.afterResponse.localVariables.filter(function (k) {\n return k.fieldName == reportField.fieldName;\n })\n if (alias[0] != null && alias[0].alias != null) {\n if ($translate.use() == \"tr\" && alias[0].alias.tr != null) return alias[0].alias.tr;\n else if ($translate.use() == \"en\" && alias[0].alias.en != null) return alias[0].alias.en;\n else return title;\n }\n }\n return title;\n }\n\n vm.getFacetValueAlias = function (title, value) {\n if (title==\"Id\") {\n var values = value.split(\"_\");\n if (values.length > 0) {\n return values[values.length-1];\n }\n }\n if (vm.afterResponse == null) return value;\n var reportField = vm.reportFields.filter(function (a) {\n return a.fieldTitle == title;\n })[0]\n if (reportField) {\n var localVariable = vm.afterResponse.localVariables.filter(function (k) {\n return k.fieldName == reportField.fieldName;\n })\n\n if (localVariable[0] != null && localVariable[0].valueAliases != null) {\n var valueLocalVariable = localVariable[0].valueAliases.filter(function (k) { return k.itemValue == value.toString(); })\n\n if (valueLocalVariable[0] != null) {\n if ($translate.use() == \"tr\" && valueLocalVariable[0].tr != null) return valueLocalVariable[0].tr;\n else if ($translate.use() == \"en\" && valueLocalVariable[0].en != null) return valueLocalVariable[0].en;\n else return value;\n }\n }\n }\n return value;\n }\n\n vm.getCategoryAlias = function (child) {\n var cat = child.category;\n if (!cat) return child.value;\n var title = cat.name;\n if (cat.localVariables) {\n var localVariable = cat.localVariables.filter(function (k) { return $translate.use() == k.language; })[0];\n if (localVariable) title = localVariable.value;\n }\n return title;\n }\n\n vm.getCategoryChipAlias = function (chip) {\n var title = chip.value;\n var category = getChipCat(chip);\n if (category && category.localVariables) {\n var localVariable = category.localVariables.filter(function (k) { return $translate.use() == k.language; })[0];\n if (localVariable) title = localVariable.value;\n }\n return title;\n }\n\n function getChipCat(chip) {\n var category;\n var categories = vm.categories.filter(function (k) { return k.name == chip.value; });\n if (chip.parentString) {\n category = categories.filter(function (k) { return k.parentModuleCategory != null && k.parentModuleCategory.name == chip.titleKey; })[0];\n } else {\n category = categories.filter(function (k) { return k.parentModuleCategory == null })[0]\n }\n return category;\n }\n\n vm.getAttributeAlias = function (tag) {\n if (tag.alias) {\n if ($translate.use() == \"tr\" && tag.alias.tr) return tag.alias.tr;\n if ($translate.use() == \"en\" && tag.alias.en) return tag.alias.en;\n }\n return vm.getFilteredFacetTitle(tag.title);\n }\n\n vm.addRangeFilter = function () {\n var titleKey = \"\"\n var key = \"\";\n if (vm.selectedRangeFilter == \"content_len_i\") {\n titleKey = $translate.instant('SHARED.ORDER.CONTENT_LENGTH')\n } else if (vm.selectedRangeFilter == \"category_count_i\") {\n titleKey = $translate.instant('SHARED.ORDER.CATEGORY_COUNT')\n } else if (vm.selectedRangeFilter == \"categoryRatio\") {\n if (vm.selectedRangeFilterCategory == null) return;\n key = \"category_c\" + vm.selectedRangeFilterCategory.id + \"_ratio_ds\";\n titleKey = vm.selectedRangeFilterCategory.name;\n } else {\n var reportField = vm.reportFields.filter(function (k) {\n return k.fieldName == vm.selectedRangeFilter;\n })[0]\n if (reportField) {\n vm.filterChips = vm.filterChips.filter(function (k) {\n return k.key != reportField.fieldTitle;\n })\n titleKey = reportField.fieldTitle;\n } else {\n titleKey = \"Query\"\n }\n }\n vm.rangeFilterStartEndValues[0] = vm.rangeFilterStartEndValues[0] != \"*\" ? parseInt(vm.rangeFilterStartEndValues[0]) : vm.rangeFilterStartEndValues[0];\n vm.rangeFilterStartEndValues[1] = vm.rangeFilterStartEndValues[1] != \"*\" ? parseInt(vm.rangeFilterStartEndValues[1]) : vm.rangeFilterStartEndValues[1];\n if (vm.rangeFilterStartEndValues[0] <= vm.rangeFilterStartEndValues[1] || vm.rangeFilterStartEndValues[0] == \"*\" || vm.rangeFilterStartEndValues[1] == \"*\") {\n var value = \"[\" + vm.rangeFilterStartEndValues[0] + \" TO \" + vm.rangeFilterStartEndValues[1] + \"]\";\n if (vm.selectedRangeFilter == \"categoryRatio\") {\n var startValue = vm.rangeFilterStartEndValues[0] != \"*\" ? vm.rangeFilterStartEndValues[0] / 100 : vm.rangeFilterStartEndValues[0];\n var endValue = vm.rangeFilterStartEndValues[1] != \"*\" ? vm.rangeFilterStartEndValues[1] / 100 : vm.rangeFilterStartEndValues[1];\n value = \"[\" + startValue + \" TO \" + endValue + \"]\";\n }\n var filterQueryChip = {\n key: vm.selectedRangeFilter == \"categoryRatio\" ? key : vm.selectedRangeFilter,\n value: value,\n type: 301,\n group: -1,\n operand: \"AND\",\n titleKey: titleKey\n }\n vm.filterChips = vm.filterChips.filter(function (k) {\n if (vm.selectedRangeFilter == \"categoryRatio\") return k.key != key;\n return k.key != vm.selectedRangeFilter;\n })\n vm.filterChips.push(filterQueryChip);\n }\n setFilteredFacets();\n }\n\n vm.facetMoreAndMore = function (item) {\n if (item.allFacets) {\n vm.moreAndMoreCount += 1;\n item.size = item.size + 10;\n if (item.facetList.length < item.size) item.showMoreAndMore = false;\n return;\n }\n\n vm.moreAndMoreLoading = true;\n vm.moreAndMoreCount += 1;\n item.size = item.size + 10;\n\n api.report.moreAndMoreSearch(vm.reportId, item.key, item.size - 10, vm.parameters)\n .then(function (response) {\n if (response.length < 10) item.showMoreAndMore = false;\n item.facetList = item.facetList.concat(response);\n vm.moreAndMoreLoading = false;\n }, function (err) {\n $log.error(err);\n })\n }\n\n function removeFacetFilter(item) {\n vm.filterChips = vm.filterChips.filter(function (f) {\n return f != item;\n });\n if (vm.filteredFacets[item.titleKey].length > 1) {\n for (var i = 0; i < vm.filteredFacets[item.titleKey].length; i++) {\n if (vm.filteredFacets[item.titleKey][i].value == item.value) {\n vm.filteredFacets[item.titleKey].splice(i, 1);\n }\n }\n } else {\n delete vm.filteredFacets[item.titleKey];\n }\n if(item.type == 600){\n vm.parameters.query = null;\n }\n if (item.level && item.level > 0) {\n var removingFilters = vm.filterChips.filter(function (f) {\n return f.level > item.level;\n });\n if (removingFilters && removingFilters.length > 0) {\n removingFilters.forEach(function (r) {\n vm.filterChips = vm.filterChips.filter(function (f) {\n return f != r;\n });\n })\n }\n }\n vm.searchFromStart();\n }\n\n function resetFilters() {\n vm.filteredFacets = {};\n vm.filterChips = [];\n vm.patternFilters = {};\n vm.parameters.query = null;\n vm.extraFilters = false;\n vm.contentLengthFilter = [];\n vm.categoryCountFilter = [];\n vm.appylyFilterFlexValue = 10;\n vm.searchFromStart();\n }\n\n function setPatternFilter(key, name) {\n if (vm.patternFilters[key] == '')\n delete vm.patternFilters[key];\n else {\n vm.patternFilters.chips = vm.patternFilters.chips || [];\n var chip = vm.patternFilters.chips.filter(function (item) { return item.key === key; })[0];\n console.log(chip);\n if (chip)\n chip.value = vm.patternFilters[key];\n else\n vm.patternFilters.chips.push({ key: key, name: name, value: vm.patternFilters[key] });\n }\n }\n\n function removePatternFilter(key, name) {\n if (vm.patternFilters[key])\n delete vm.patternFilters[key];\n vm.patternFilters.chips = vm.patternFilters.chips.filter(function (item) {\n return item.key !== key;\n });\n if (vm.patternFilters.postKeys.indexOf(key) != -1)\n vm.searchFromStart();\n }\n\n vm.filterNominalAttribute = function (tag) {\n vm.openTagUrl(tag);\n vm.filterChips.push({\n group: -1,\n key: tag.key,\n operand: \"AND\",\n titleKey: tag.title,\n type: tag.type,\n value: tag.value\n })\n vm.searchFromStart();\n }\n\n function toggleFeedbackMode() {\n if (vm.feedbackMode) {\n vm.parameters.feedback = \"normal\";\n vm.noConfirmed = true;\n vm.parameters.assignment = null;\n vm.drafted = false;\n vm.confirmed = false;\n vm.pending = false;\n vm.noConfirmed = true;\n vm.trashed = false;\n vm.assignTo = false;\n vm.assignBy = false;\n vm.noAssign = true;\n } else {\n vm.parameters.feedback = null;\n vm.parameters.assignment = null;\n }\n search();\n }\n\n function toggleFlatMode() {\n vm.parameters.showSimilar = !vm.similarityMode;\n search();\n }\n\n function clickNoConfirmedMode() {\n vm.parameters.feedback = \"normal\";\n vm.drafted = false;\n vm.confirmed = false;\n vm.pending = false;\n vm.noConfirmed = true;\n vm.trashed = false;\n vm.pagination.number = 1;\n vm.pagination.current = 1;\n searchData();\n }\n\n function clickDraftedMode() {\n vm.parameters.feedback = \"drafted\";\n vm.drafted = true;\n vm.confirmed = false;\n vm.pending = false;\n vm.noConfirmed = false;\n vm.trashed = false;\n vm.pagination.number = 1;\n vm.pagination.current = 1;\n searchData();\n }\n\n function clickConfirmedMode() {\n vm.parameters.feedback = \"ready\";\n vm.drafted = false;\n vm.confirmed = true;\n vm.pending = false;\n vm.noConfirmed = false;\n vm.trashed = false;\n vm.pagination.number = 1;\n vm.pagination.current = 1;\n searchData();\n }\n\n function clickTrashedMode() {\n vm.parameters.feedback = \"trashed\";\n vm.drafted = false;\n vm.confirmed = false;\n vm.pending = false;\n vm.noConfirmed = false;\n vm.trashed = true;\n vm.pagination.number = 1;\n vm.pagination.current = 1;\n searchData();\n }\n\n function clickPendingMode() {\n vm.parameters.feedback = \"pending\";\n vm.drafted = false;\n vm.confirmed = false;\n vm.pending = true;\n vm.noConfirmed = false;\n vm.trashed = false;\n vm.pagination.number = 1;\n vm.pagination.current = 1;\n searchData();\n }\n\n function clickAssignToMode() {\n vm.assignTo = true;\n vm.assignBy = false;\n vm.noAssign = false;\n vm.drafted = false;\n vm.noConfirmed = false;\n vm.confirmed = false;\n vm.pending = false;\n vm.parameters.feedback = null;\n vm.parameters.assignment = \"to\";\n vm.pagination.number = 1;\n vm.pagination.current = 1;\n searchData();\n }\n\n function clickAssignByMode() {\n vm.assignTo = false;\n vm.assignBy = true;\n vm.noAssign = false;\n vm.drafted = false;\n vm.noConfirmed = false;\n vm.confirmed = false;\n vm.pending = false;\n vm.parameters.feedback = null;\n vm.parameters.assignment = \"by\";\n vm.pagination.number = 1;\n vm.pagination.current = 1;\n searchData();\n }\n\n function clickNoAssignMode() {\n vm.assignTo = false;\n vm.assignBy = false;\n vm.noAssign = true;\n vm.noConfirmed = true;\n vm.drafted = false;\n vm.confirmed = false;\n vm.pending = false;\n vm.parameters.feedback = \"normal\";\n vm.parameters.assignment = null;\n vm.pagination.number = 1;\n vm.pagination.current = 1;\n searchData();\n }\n\n function setFeedbackModeFromQuery() {\n //if (!vm.parameters.feedback) return;\n var feedbackType = vm.parameters.feedback;\n if (feedbackType == \"normal\") {\n vm.drafted = false;\n vm.confirmed = false;\n vm.pending = false;\n vm.noConfirmed = true;\n vm.trashed = false;\n } else if (feedbackType == \"drafted\") {\n vm.drafted = true;\n vm.confirmed = false;\n vm.pending = false;\n vm.noConfirmed = false;\n vm.trashed = false;\n } else if (feedbackType == \"ready\") {\n vm.drafted = false;\n vm.confirmed = true;\n vm.pending = false;\n vm.noConfirmed = false;\n vm.trashed = false;\n } else if (feedbackType == \"trashed\") {\n vm.drafted = false;\n vm.confirmed = false;\n vm.pending = false;\n vm.noConfirmed = false;\n vm.trashed = true;\n } else if (feedbackType == \"pending\") {\n vm.drafted = false;\n vm.confirmed = false;\n vm.pending = true;\n vm.noConfirmed = false;\n vm.trashed = false;\n }\n vm.pagination.number = 1;\n vm.pagination.current = 1;\n\n if (!vm.parameters.assignment) return;\n var assignmentType = vm.parameters.assignment;\n if (assignmentType == \"by\") {\n vm.assignTo = false;\n vm.assignBy = true;\n vm.noAssign = false;\n vm.drafted = true;\n vm.noConfirmed = false;\n vm.confirmed = false;\n vm.pending = false;\n } else if (assignmentType == \"to\") {\n vm.assignTo = true;\n vm.assignBy = false;\n vm.noAssign = false;\n vm.drafted = true;\n vm.noConfirmed = false;\n vm.confirmed = false;\n vm.pending = false;\n }\n }\n\n vm.thumbUp = function (doc) {\n doc.thumbsUp = true;\n api.report.document.confirmClassification(vm.report.id, doc.id)\n .then(function (r) {\n doc.thumbsUp = true;\n }, function (r) {\n console.log(r);\n doc.thumbsUp = null;\n });\n }\n\n vm.thumbDown = function (doc) {\n doc.thumbsUp = false;\n api.report.document.unconfirmClassification(vm.report.id, doc.id)\n .then(function (r) {\n doc.thumbsUp = false;\n }, function (r) {\n console.log(r);\n doc.thumbsUp = null;\n });\n }\n\n function showDocumentDetail($event, doc) {\n if (doc.url)\n ReportDocumentService.showReportWebContentDocument($scope, $event, doc, vm.singleClassificationModule, vm.categories, vm.report)\n .then(function (answer) {\n setBasicAnnotationParams(vm.data.documents);\n focusMdContent();\n });\n $event.stopPropagation();\n }\n\n function showDocumentAnnotation($event, doc) {\n if (vm.feedbackMode) {\n var req = {\n documentId: doc.id\n };\n api.report.document.flag(vm.report.id, doc.id)\n .then(function (r) {\n var modules = vm.reportModules;\n ReportDocumentAnnotationService.showReportDocumentAnnotation($scope, $event, doc, vm.noConfirmed, vm.pagination, NGAnnotation, api, modules, vm.categories, vm.report, vm.user);\n }, function (r) {\n var lang = $translate.use();\n var text = \"Döküman Başkası Tarafından Kullanılıyor.\";\n if (lang == \"en\") {\n text = \"Document is being used by another user.\";\n }\n $mdToast.show($mdToast.simple().textContent(text));\n });\n\n }\n }\n\n function readyDocument(doc, readyPermission) {\n api.report.document.ready(vm.report.id, doc.id)\n .then(function () {\n $utils.googleAnalyticsSetAction(\"REPORT_DOCUMENT\", \"Ready\", doc.id)\n if (readyPermission) {\n doc[\"isReady\"] = true;\n doc[\"readyBy\"] = vm.user.userName;\n doc[\"readyDate\"] = new Date();\n } else {\n doc[\"isReady\"] = false;\n doc[\"readyBy\"] = null;\n doc[\"readyDate\"] = null;\n doc[\"isPending\"] = true;\n doc[\"pendingBy\"] = vm.user.userName;\n doc[\"pendingDate\"] = new Date();\n }\n doc[\"isIgnored\"] = null;\n doc[\"ignoredBy\"] = null;\n doc[\"ignoredDate\"] = null;\n }, function (err) {\n $log.error(err);\n })\n }\n\n function unReadyDocument(doc) {\n api.report.document.unready(vm.report.id, doc.id)\n .then(function () {\n $utils.googleAnalyticsSetAction(\"REPORT_DOCUMENT\", \"Un Ready\", doc.id)\n doc[\"isReady\"] = false;\n doc[\"readyBy\"] = null;\n doc[\"readyDate\"] = null;\n }, function (err) {\n $log.error(err);\n })\n }\n\n function unTrashDocument(doc) {\n api.report.document.untrash(vm.report.id, doc.id)\n .then(function () {\n $utils.googleAnalyticsSetAction(\"REPORT_DOCUMENT\", \"UnTrash\", doc.id)\n doc[\"isIgnored\"] = null;\n doc[\"ignoredBy\"] = null;\n doc[\"ignoredDate\"] = null;\n }, function (err) {\n $log.error(err);\n })\n }\n\n function unAssignDocument(doc) {\n api.report.document.unassign(vm.report.id, doc.id)\n .then(function () {\n $utils.googleAnalyticsSetAction(\"REPORT_DOCUMENT\", \"Unassign\", doc.id)\n doc[\"assignments\"] = [];\n }, function (err) {\n $log.error(err);\n })\n }\n\n function showAssignContent($event, item) {\n if (vm.feedbackMode) {\n api.report.document.flag(vm.report.id, item.id)\n .then(function (r) {\n ReportAssignmentService.assignDocument($scope, $event, item, vm.report, vm.user, vm.documentNickname)\n .then(function (r) {});\n }, function (r) {\n var lang = $translate.use();\n var text = \"Döküman Başkası Tarafından Kullanılıyor.\";\n if (lang == \"en\") {\n text = \"Document is being used by another user.\";\n }\n $mdToast.show($mdToast.simple().textContent(text));\n });\n }\n }\n\n function showDocumentNote($event, document) {\n ReportNoteService.showDocumentNote($scope, $event, document, vm.report, vm.reportSettings);\n }\n\n\n function changeDate() {\n //vm.parameters.startDate = vm.datePicker.dateStart.toISOString().split('.')[0] + \"Z\";\n //vm.parameters.endDate = vm.datePicker.dateEnd.toISOString().split('.')[0] + \"Z\";\n\n vm.parameters.startDate = vm.afterDatePicker.startDate.toISOString().split('.')[0] + \"Z\";\n vm.parameters.endDate = vm.afterDatePicker.endDate.toISOString().split('.')[0] + \"Z\";\n\n if (vm.parameters.startDate === vm.parameters.endDate) {\n vm.parameters.endDate = moment(vm.parameters.endDate).add(1, 'days').toDate().toISOString().split('.')[0] + \"Z\";\n }\n\n vm.parameters.start = 0;\n vm.sortByFieldName = vm.parameters.searchByDate == 3 ? \"createdate\" : vm.parameters.searchByDate == 2 ? \"updatedate_dt\" : \"date_dt\";\n vm.saveLastSortableField()\n //$location.search(\"startDate\", vm.parameters.startDate.toISOString().split('.')[0]+\"Z\");\n //$location.search(\"endDate\", vm.parameters.endDate.toISOString().split('.')[0]+\"Z\");\n //vm.searchFromStart();\n refreshDatePickersFormat();\n }\n\n function clearDate() {\n //$location.search(\"startDate\", null);\n //$location.search(\"endDate\", null);\n vm.afterDatePicker = {\n startDate: null,\n endDate: null\n };\n vm.parameters.startDate = null;\n vm.parameters.endDate = null;\n\n if (vm.report.dates && vm.report.dates.startDate && vm.report.dates.endDate) {\n if ($('#afterreportrange').is(':visible')) {\n $('input[id=\"afterreportrange\"]').data('daterangepicker').setEndDate(moment().toDate());\n $('input[id=\"afterreportrange\"]').data('daterangepicker').setStartDate(moment().toDate());\n }\n if ($('#afterreportrange2').is(':visible')) {\n $('input[id=\"afterreportrange2\"]').data('daterangepicker').setEndDate(moment().toDate());\n $('input[id=\"afterreportrange2\"]').data('daterangepicker').setStartDate(moment().toDate());\n }\n }\n\n if ($translate.use() == \"tr\") {\n $('#afterreportrange').val('Tarih');\n $('#afterreportrange2').val('Tarih');\n } else {\n $('#afterreportrange').val('Date');\n $('#afterreportrange2').val('Date');\n }\n\n vm.datePicker = {};\n vm.parameters.start = 0;\n vm.searchFromStart();\n }\n\n function isDateField(field) {\n return field && field.key ? field.key.endsWith('_dt') : false;\n }\n\n function isNotDateField(field) {\n return !isDateField(field);\n }\n\n function titleIsNotContent(field) {\n return field && field.title ? field.title.toLowerCase() != \"content\" : false;\n }\n\n vm.goToParentDocument = function goToParentDocument(item) {\n vm.parameters.filterChips = vm.filterChips.length > 0 ? vm.filterChips : [];\n vm.goBackDocumentQuery = JSON.stringify(vm.parameters);\n vm.filteredFacets = {};\n vm.filterChips = [];\n vm.patternFilters = {};\n //var group = Math.floor(Math.random() * 10000) + 1;\n vm.groupCtrlCount = vm.groupCtrlCount + 1;\n for (var i = 0; i < item.parentIds.length; i++) {\n vm.filterChips.push({\n key: \"id\",\n value: item.parentIds[i],\n type: 300,\n group: item.parentIds.length > 1 ? vm.groupCtrlCount : -1,\n operand: item.parentIds.length > 1 ? \"OR\" : \"AND\",\n titleKey: \"Id\"\n })\n }\n //vm.parameters.query = \"id:\" + \"\\\"\" + item.parentId + \"\\\"\";\n vm.parameters.startDate = null;\n vm.parameters.endDate = null;\n vm.extraFilters = false;\n vm.contentLengthFilter = [];\n vm.categoryCountFilter = [];\n vm.appylyFilterFlexValue = 10;\n vm.goToParentDocumentClicked = true;\n clearDate();\n setTimeout(function () { vm.parameters.query = \"\" }, 1);\n }\n\n vm.filteredFacets = {};\n\n function searchFromStart(){\n vm.pagination.number = 1;\n vm.pagination.current = 1;\n vm.parameters.start = 0;\n searchData();\n }\n function search() {\n vm.pagination.number = 1;\n vm.pagination.current = 1;\n searchData();\n }\n\n function setCategoryFacetFilters() {\n var filters = ReportQueryParserService.setCategoryFacetFilters(vm.filterChips);\n if (filters && filters.length > 0) {\n vm.parameters.category = filters;\n } else {\n vm.parameters.category = null;\n }\n }\n\n function getIsFlatModeActive() {\n if (vm.activeSources.includes('WEBSOURCE')) {\n api.source.getReportTemplates(vm.report.id,0,1)\n .then(function (response) {\n if (response.content.length > 0) {\n vm.isFlatModeActive = true;\n }\n },\n function (response) {\n $log.error(response);\n });\n }\n }\n\n vm.openTagUrl = function (tag) {\n var reportField = vm.reportFields.filter(function (m) {\n return m.fieldName == tag.key;\n })[0];\n if (reportField && reportField.url) {\n window.open(reportField.url.replace('{$value}',tag.value), '_blank');\n }\n }\n\n function setCategoryFacet() {\n var normalCategoryFilters = vm.filterChips.filter(function (c) {\n return c.type == 100;\n });\n if (normalCategoryFilters && normalCategoryFilters.length > 0) {\n normalCategoryFilters.forEach(function (cat) {\n var facetValue = \"\\\"moduleid:\" + cat.key + \"\\\":\\\"\" + cat.value + \"\\\"\";\n if (vm.parameters[\"facet\"].indexOf(facetValue) == -1)\n vm.parameters[\"facet\"].push(facetValue);\n //\"moduleid:Wx6x\":\"Uçuş Süreci->Kabin Ekibi\"\n //if (vm.parameters[\"facet\"].indexOf(value) == -1)\n // vm.parameters[\"facet\"].push(value);\n });\n }\n }\n\n function setNormalFacetFilters() {\n var filters = ReportQueryParserService.setNormalFacetFilters(vm.filterChips);\n if (filters && filters.length > 0) {\n vm.parameters.filter = filters;\n } else {\n vm.parameters.filter = null;\n }\n }\n\n function setPatternFilters() {\n vm.parameters.patternFilter = [];\n vm.patternFilters.postKeys = [];\n var excludedKeys = ['postKeys', 'chips'];\n for (var key in vm.patternFilters) {\n if (excludedKeys.indexOf(key) == -1 && vm.patternFilters[key] && vm.patternFilters[key] != '') {\n var patternValue = \"\\\"\" + key + \"\\\":\\\"\" + vm.patternFilters[key] + \"\\\"\";\n vm.parameters.patternFilter.push(patternValue);\n vm.patternFilters.postKeys.push(key);\n }\n }\n }\n\n function storeFilters() {\n ReportService.setPatternFilters(vm.reportId, vm.patternFilters);\n ReportService.setFilterChips(vm.reportId, vm.filterChips);\n }\n function focusMdContent() {\n const mdContent = document.getElementById('scrollkeydownfunction');\n if (mdContent) {\n mdContent.setAttribute('tabindex', '0');\n mdContent.focus();\n }\n }\n function searchData() {\n var start = Date.now();\n vm.searching = true;\n if (!vm.goToParentDocumentClicked) {\n vm.goBackDocumentQuery = null;\n }\n vm.goToParentDocumentClicked = false;\n //if (vm.filterChips && vm.filterChips.length > 0) {\n //vm.parameters.filterChips = vm.filterChips;\n //} else {\n vm.parameters.filterChips = [];\n //}\n vm.filterChips = vm.filterChips.filter(function (item){\n return item.type != 600;\n });\n vm.parameters.query = $utils.fixQueryQuotes(vm.parameters.query);\n if(vm.parameters.query && vm.parameters.query.length > 0){\n var filterQueryChip = {\n key: \"content\",\n value: vm.parameters.query,\n type: 600,\n group: -1,\n operand: \"AND\",\n titleKey: \"Query\"\n }\n vm.filterChips.push(filterQueryChip);\n }\n setNormalFacetFilters();\n setCategoryFacetFilters();\n setFacetFieldsQuery();\n setPatternFilters();\n storeFilters();\n vm.parameters.facet = [];\n vm.parameters.defaultFacet = true;\n vm.parameters.facetSearch = null;\n vm.parameters.gap = null;\n vm.parameters.facetQueries = [];\n\n\n encodeFilters(vm.parameters);\n vm.parameters.row = 10;\n vm.parameters.highlight = true;\n //setCategoryFacet();\n //setFilters();\n setFacetParams(vm.parameters.facet)\n setFilteredFacets();\n if (vm.showLogs) {\n console.log(vm.parameters)\n }\n if (vm.report.periodSearchActive) {\n vm.parameters.period = \"PREVIOUS\";\n } else {\n vm.parameters.period = null;\n }\n\n api.report.search(vm.report.id, vm.parameters)\n .then(function (response) {\n $utils.googleAnalyticsSetTiming(\"Detail Page Search Response\", vm.reportId, Date.now() - start);\n response = setDocumentsThatDontHaveContents(response);\n vm.data.facets = response.facets;\n vm.afterResponse = response;\n setupFacets();\n groupNerFacets();\n if (vm.showLogs) console.log(response);\n vm.data.documents = response.reportDocumentList;\n setArrayNominalAttributes(vm.data.documents)\n setArrayAttributes(vm.data.documents)\n setContentHighlight(vm.data.documents);\n parseDocuments(vm.data.documents);\n parseDocumentsD(vm.data.documents);\n setBasicAnnotationParams(vm.data.documents);\n vm.data.count = response.count;\n vm.pagination.current = vm.parameters.start > 0 ? (vm.parameters.start / 10) + 1 : 1;\n vm.pagination.number = vm.pagination.current;\n vm.pagination.count = response.count;\n vm.pagination.last = calculatePageCounts(response.count);\n vm.pagination.totalNumber = Math.ceil(vm.pagination.count / 10);\n vm.searching = false;\n vm.sideNavEnabled = true;\n vm.dataCopy = JSON.parse(JSON.stringify(vm.data));\n eliminateFacetFilteredValues();\n measureTimings(start)\n }, function (error) {\n $log.error(error);\n vm.searching = true;\n vm.sideNavEnabled = true;\n })\n }\n\n function setContentHighlight(documents){\n for(var i =0;i\");\n }\n strArray.push(\"\");\n }else if(i== highlights[j].end){\n if(i < 147){\n limitArray.push(\"\");\n }\n strArray.push(\"\");\n }\n }\n strArray.push(baseText.charAt(i));\n if(i < 147){\n limitArray.push(baseText.charAt(i));\n }\n }\n return {\n text: strArray.join(\"\"),\n limitedText: limitArray.join(\"\")\n };\n }\n\n function groupNerFacets() {\n var nerFacets = vm.data.facets.filter(function (k) { return k.key.startsWith('ner_') })\n vm.data.facets = vm.data.facets.filter(function (k) { return !k.key.startsWith('ner_') })\n if (nerFacets.length > 0) {\n var order = nerFacets[0].order;\n nerFacets.forEach(function (k) {\n if (k.order && Number(k.order) < Number(order)) {\n order = k.order;\n }\n })\n nerFacets.sort(function (a, b) {\n return a.order - b.order\n });\n vm.data.facets.push({\n \"key\": \"ner_\",\n \"title\": $translate.instant('SHARED.NAMEDENTITY'),\n \"facets\": nerFacets,\n \"group\": true,\n \"facetList\": [\"a\"],\n \"type\": 250,\n \"order\":order\n })\n sortFacets();\n }\n }\n\n function sortFacets() {\n vm.isOrderActive = vm.data.facets.filter(function (f) {\n return Number(f.order) > 1;\n }).length > 0;\n if (!vm.isOrderActive) {\n vm.data.facets.sort(function (a, b) {\n return a.type - b.type\n });\n } else {\n vm.data.facets.sort(function (a, b) {\n return Number(a.order) - Number(b.order)\n });\n }\n }\n\n function measureTimings(start) {\n if ($('#detailpage').is(':visible')) { //if the container is visible on the page\n $utils.googleAnalyticsSetTiming('Detail Page Page Load', vm.reportId, Date.now() - start)\n focusMdContent();\n } else {\n setTimeout(function () { measureTimings(start) }, 200); //wait 50 ms, then try again\n focusMdContent();\n }\n }\n\n function setArrayAttributes(data) {\n for (var i = 0; i < data.length; i++) {\n if (data[i].attributes != null) {\n var singularizedAttributes = [];\n for (var j = 0; j < data[i].attributes.length; j++) {\n var attributeTemp = JSON.parse(JSON.stringify(data[i].attributes[j]));\n var field = vm.reportFields.filter(function (k) { return k.fieldName == attributeTemp.key })[0]\n if (field && field.color) {\n attributeTemp.backgroundColor = field.color;\n } else {\n attributeTemp.backgroundColor = \"#eae8e8\";\n }\n attributeTemp.color = vm.getTextColor(attributeTemp.backgroundColor);\n var valueObj = attributeTemp.value;\n if (Array.isArray(valueObj)) {\n for(var k = 0; k< valueObj.length; k++){\n var attributeSingleValueCopy = JSON.parse(JSON.stringify(attributeTemp));\n attributeSingleValueCopy.value = valueObj[k];\n singularizedAttributes.push(attributeSingleValueCopy);\n }\n }else{\n singularizedAttributes.push(attributeTemp);\n }\n }\n data[i].attributes = singularizedAttributes;\n }\n if (data[i].children) {\n setArrayAttributes(data[i].children);\n }\n }\n }\n\n\n function setArrayNominalAttributes(data) {\n for (var i = 0; i < data.length; i++) {\n if (data[i].nominalAttributes != null) {\n var singularizedNominalAttributes = [];\n for (var j = 0; j < data[i].nominalAttributes.length; j++) {\n var nominalAttributeTemp = JSON.parse(JSON.stringify(data[i].nominalAttributes[j]));\n var field = vm.reportFields.filter(function (k) { return k.fieldName == nominalAttributeTemp.key })[0]\n if (field && field.color) {\n nominalAttributeTemp.backgroundColor = field.color;\n } else {\n nominalAttributeTemp.backgroundColor = \"#eae8e8\";\n }\n nominalAttributeTemp.color = vm.getTextColor(nominalAttributeTemp.backgroundColor);\n var valueObj = nominalAttributeTemp.value;\n if (Array.isArray(valueObj)) {\n for(var k = 0; k< valueObj.length; k++){\n var nominalAttributeSingleValueCopy = JSON.parse(JSON.stringify(nominalAttributeTemp));\n nominalAttributeSingleValueCopy.value = valueObj[k];\n singularizedNominalAttributes.push(nominalAttributeSingleValueCopy);\n }\n }else{\n singularizedNominalAttributes.push(nominalAttributeTemp);\n }\n }\n data[i].nominalAttributes = singularizedNominalAttributes;\n }\n if (data[i].children) {\n setArrayNominalAttributes(data[i].children);\n }\n }\n }\n\n vm.getColor = function(fieldName) {\n var field = vm.reportFields.filter(function (k) { return k.fieldName == fieldName })[0];\n return field && field.color ? field.color : \"#eae8e8\";\n }\n\n vm.getTextColor = function(bgColor) {\n if (!bgColor) { return ''; }\n return (parseInt(bgColor.replace('#', ''), 16) > 0xffffff / 2) ? '#000' : '#fff';\n }\n\n function setFacetParams(facets) {\n if (!facets) return;\n var facetList = [];\n for (var i = 0; i < facets.length; i++) {\n facetList.push({\n name: facets[i]\n })\n }\n vm.parameters.facet = facetList;\n }\n\n function setBasicAnnotationParams(data) {\n if (!vm.singleClassificationModule) return;\n var categories = vm.categories.filter(function (k) { return k.moduleId == vm.singleClassificationModule.moduleId})\n for (var i = 0; i < data.length; i++) {\n data[i].mainCategories = categories.filter(function (k) { return k.parent == null; });\n var documentCategories = data[i].categories ? data[i].categories.filter(function (k) { return k.moduleId == vm.singleClassificationModule.moduleId })[0] : null;\n data[i].dashboardCategories = documentCategories;\n if (documentCategories) {\n data[i].mainCategory = documentCategories.categories[0] ? categories.filter(function (k) { return k.id == documentCategories.categories[0].id; })[0] : null;\n data[i].sub1Categories = data[i].mainCategory ? categories.filter(function (k) { return k.parent == data[i].mainCategory.id; }) : [];\n data[i].sub1Category = documentCategories.categories[1] ? categories.filter(function (k) { return k.id == documentCategories.categories[1].id; })[0] : null;\n data[i].sub2Categories = data[i].sub1Category ? categories.filter(function (k) { return k.parent == data[i].sub1Category.id; }) : [];\n data[i].sub2Category = documentCategories.categories[2] ? categories.filter(function (k) { return k.id == documentCategories.categories[2].id; })[0] : null;\n } else {\n data[i].searchMainCategory = null;\n data[i].mainCategory = null;\n data[i].sub1Categories = [];\n data[i].sub1Category = null;\n data[i].sub2Categories = [];\n data[i].sub2Category = null;\n }\n }\n }\n\n vm.selectBasicMainCategory = function (item) {\n ReportDocumentService.selectBasicMainCategory(item, vm.categories);\n }\n\n vm.selectBasicSub1Category = function (item) {\n ReportDocumentService.selectBasicSub1Category(item, vm.categories);\n }\n\n vm.addBasicCategory = function (item) {\n vm.processing[item.id] = true;\n ReportDocumentService.addBasicCategory(item, vm.singleClassificationModule, vm.report)\n .then(function (response) {\n if (response) {\n item.dashboardCategories = item.categories.filter(function (k) { return k.moduleId == vm.singleClassificationModule.moduleId })[0];\n generateSentimentChart(item);\n }\n vm.processing[item.id] = false;\n })\n }\n\n vm.mainCategorySearch = function(query, item) {\n var results = query ? item.mainCategories.filter(createFilterFor(query)) : item.mainCategories;\n return results;\n }\n\n vm.sub1CategorySearch = function(query, item) {\n var results = query ? item.sub1Categories.filter(createFilterFor(query)) : item.sub1Categories;\n return results;\n }\n\n vm.sub2CategorySearch = function(query, item) {\n var results = query ? item.sub2Categories.filter(createFilterFor(query)) : item.sub2Categories;\n return results;\n }\n\n function setDocumentsThatDontHaveContents(response) {\n for (var i = 0; i < response.reportDocumentList.length; i++) {\n if (response.reportDocumentList[i][\"contents\"] == null || response.reportDocumentList[i][\"contents\"].length == 0) {\n response.reportDocumentList[i][\"contents\"] = [];\n if (response.reportDocumentList[i][\"content\"]) {\n response.reportDocumentList[i][\"contents\"].push({\n endIndex: response.reportDocumentList[i][\"content\"].endIndex,\n fieldName: response.reportDocumentList[i][\"content\"].fieldName,\n highlight: response.reportDocumentList[i][\"content\"].highlight ? response.reportDocumentList[i][\"content\"].highlight : response.reportDocumentList[i][\"content\"].text,\n isActive: response.reportDocumentList[i][\"content\"].isActive,\n startIndex: response.reportDocumentList[i][\"content\"].startIndex,\n text: response.reportDocumentList[i][\"content\"].text,\n title: $translate.instant('REPORT.CONTENT')\n });\n } else {\n response.reportDocumentList[i][\"contents\"].push({\n endIndex: 0,\n fieldName: '',\n highlight: '',\n isActive: 1,\n startIndex: 0,\n text: '',\n title: $translate.instant('REPORT.CONTENT')\n });\n }\n }\n }\n return response;\n }\n\n function eliminateFacetFilteredValues() {\n if (vm.parameters.filterChips && vm.parameters.filterChips.length > 0) {\n vm.parameters.filterChips.forEach(function (filteredValue) {\n var facet = vm.data.facets.filter(function (facet) { return facet.title === filteredValue.titleKey; })[0];\n if (facet && facet.facetList) {\n facet.facetList = facet.facetList.filter(function (item) { return item.value !== filteredValue.value; });\n }\n })\n }\n }\n\n function sidenavQueryFunc(){\n if (vm.sidenavQuery == \"\") {\n vm.data = JSON.parse(JSON.stringify(vm.dataCopy));\n vm.parameters.facetSearch = null;\n } else {\n vm.parameters.facetSearch = vm.sidenavQuery;\n vm.sidenavQueryFuncLoading = true;\n api.report.search(vm.report.id, vm.parameters)\n .then(function (response) {\n vm.data.facets = response.facets;\n vm.sidenavQueryFuncLoading = false;\n vm.data.facetSize = 10;\n vm.data.facets.forEach(function (f) {\n f[\"size\"] = 10;\n f[\"showMoreAndMore\"] = f.facetList && f.facetList.length >= 10 ? true : false;\n f[\"allFacets\"] = f.facetList && f.facetList.length > 10 ? true : false;\n });\n\n }, function (err) {\n $log.error(err);\n })\n }\n }\n\n function openSaveDefaultReportFiltersDialog($event){\n ReportService.showSaveReportFiltersDialog($scope, $event, vm.filterChips, vm.report.id);\n\n }\n\n vm.goBackToDocument = function goBackToDocument() {\n vm.parameters = JSON.parse(vm.goBackDocumentQuery)\n vm.filterChips = vm.parameters.filterChips;\n if (vm.parameters.startDate && vm.parameters.endDate) {\n vm.afterDatePicker = {\n startDate: moment(vm.parameters.startDate).toDate(),\n endDate: moment(vm.parameters.endDate).toDate()\n }\n $('#afterreportrange').val(moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY'));\n $('#afterreportrange2').val(moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY'));\n }\n searchData();\n }\n\n function setupFacets() {\n vm.targetChartData = null;\n vm.data.facetSize = 10;\n vm.data.facets.forEach(function (f) {\n f[\"size\"] = 10;\n f[\"showMoreAndMore\"] = f.facetList && f.facetList.length >= 10 ? true : false;\n f[\"allFacets\"] = f.facetList && f.facetList.length > 10 || vm.reportModuleIds.includes(f.key) ? true : false;\n });\n var normalCategoryFilters = vm.filterChips.filter(function (c) {\n return c.type == 100;\n });\n if (normalCategoryFilters && normalCategoryFilters.length > 0) {\n var level = findChartLevel();\n normalCategoryFilters.forEach(function (c) {\n var foundedFacets = vm.data.facets.filter(function (f) {\n return f.key === c.key\n });\n if (foundedFacets && foundedFacets.length > 0) {\n var facet = foundedFacets[0];\n var result = findRecurisiveFacetByValue(facet.facetList, c.value,c.parentString ? c.parentString:null,null);\n if (result && result.subs && result.subs.length > 0) {\n result.subs.forEach(function (s) {\n s[\"parentString\"] = c.parentString ? c.parentString + \"->\" + c.value : c.value;\n })\n if (c.group == -1 && level - 1 == c.level && result && result.subs && result.subs.length > 0) {\n vm.targetChartData = {\n key: facet.key,\n title: result.value,\n type: facet.type + 10,\n size: 10,\n count: result.count,\n facetList: result.subs,\n parentString: c.parentString ? c.parentString + \"->\" + c.value : c.value\n };\n } else if (c.group == -1 && level - 1 == c.level && result) {\n var foundedFilter = normalCategoryFilters.filter(function (cat) {\n return cat.level == level - 2;\n })[0];\n }\n var alias = {};\n var chipCat = getChipCat(c);\n if (chipCat && chipCat.localVariables) {\n chipCat.localVariables.forEach(function (k) {\n alias[k.language] = k.value;\n })\n }\n vm.data.facets.push({\n key: facet.key,\n title: result.value,\n type: facet.type + 10,\n size: 10,\n count: result.count,\n facetList: result.subs,\n parentString: c.parentString ? c.parentString + \"->\" + c.value : c.value,\n alias: alias\n });\n } else if (c.group == -1 && level - 1 == c.level) {\n var foundedTarget = vm.data.facets.filter(function (x) {\n return result.parentString && x.parentString && x.parentString == result.parentString;\n })[0];\n if (foundedTarget) {\n foundedTarget = JSON.parse(JSON.stringify(foundedTarget));\n foundedTarget.facetList = foundedTarget.facetList.filter(function (ss) {\n return ss.value === result.value;\n });\n vm.targetChartData = foundedTarget;\n }\n }\n }\n })\n }\n /*if (!vm.isOrderActive) {\n if (vm.data.facets && vm.data.facets.length > 1) {\n vm.data.facets.sort(function (a, b) {\n if (a.type > b.type) return 1;\n if (b.type > a.type) return -1;\n return 0;\n })\n }\n }*/\n sortFacets();\n if (normalCategoryFilters && normalCategoryFilters.length > 0) {\n normalCategoryFilters.forEach(function (cFilter) {\n var foundedFacet = vm.data.facets.filter(function (f) {\n return f.key == cFilter.key && cFilter.titleKey == f.title;\n })[0];\n if (foundedFacet)\n vm.data.facets = vm.data.facets.filter(function (f) {\n return f != foundedFacet;\n });\n })\n }\n }\n\n vm.isUserTagsExist = function (item) {\n item.nominalAttributes = item.nominalAttributes ? item.nominalAttributes : [];\n var facet = item.nominalAttributes.filter(function (k) {\n return k.key == \"user_tags_ss\";\n })[0]\n return facet ? true : false;\n }\n\n function findChartLevel() {\n if (!vm.filterChips || vm.filterChips.length == 0) return 1;\n var foundedChips = vm.filterChips.filter(function (c) {\n return c.level >= 0;\n });\n if (foundedChips && foundedChips.length > 0) {\n foundedChips.sort(function (c1, c2) {\n return c1.level - c2.level;\n });\n return foundedChips[foundedChips.length - 1].level + 1;\n }\n return 1;\n }\n\n function findRecurisiveFacetByValue(facets, value,parent,currentParent) {\n if (!value || !facets || facets.length <= 0) return null;\n for (var i in facets) {\n var f = facets[i];\n if (f.value === value && parent == currentParent) {\n return f;\n } else {\n var m = findRecurisiveFacetByValue(f.subs, value,parent,currentParent?currentParent+\"->\"+f.value:f.value);\n if (m)\n return m;\n }\n }\n return null;\n }\n\n function setFacetFieldsQuery() {\n var fields = vm.reportFields.filter(function (rf) {\n return ReportService.isThisFieldType(300, rf.fieldType);\n });\n fields.forEach(function (f) {\n if (!vm.parameters[\"facet\"]) vm.parameters[\"facet\"] = [];\n if (vm.parameters[\"facet\"].indexOf(f.fieldTitle) == -1)\n vm.parameters[\"facet\"].push(f.fieldTitle);\n })\n var classificationModules = vm.reportModules.filter(function (rm) {\n return rm.moduleTypeId == 1 || rm.moduleTypeId == 5 || rm.moduleTypeId == 7;\n });\n if (classificationModules && classificationModules.length > 0) {\n classificationModules.forEach(function (m) {\n if (!vm.parameters[\"facet\"]) vm.parameters[\"facet\"] = [];\n var value = \"\\\"moduleid:\" + m.moduleId + \"\\\"\";\n if (vm.parameters[\"facet\"].indexOf(value) == -1)\n vm.parameters[\"facet\"].push(value);\n })\n }\n var sentimentField = vm.reportFields.filter(function (rf) {\n return rf.fieldType == 200;\n })[0];\n if(sentimentField){\n if (!vm.parameters[\"facet\"]) vm.parameters[\"facet\"] = [];\n if (vm.parameters[\"facet\"].indexOf(sentimentField.fieldTitle) == -1)\n vm.parameters[\"facet\"].push(sentimentField.fieldTitle);\n }\n }\n\n function parseDocuments(documents) {\n if (!documents || documents.length < 1) return;\n documents.forEach(function (doc) {\n generateSentimentChart(doc);\n doc.hidetag = vm.hideTags;\n doc.hidecattag = vm.hideCategoryTags;\n if (doc.children) {\n doc.children.forEach(function (child) {\n child.hidetag = vm.hideTags;\n })\n }\n parseNotes(doc);\n if (doc.markedList && doc.markedList.length > 0) {\n doc[\"categories\"] = [];\n doc.markedList.forEach(function (marked) {\n var r = parseMarkedCategories(marked);\n doc[\"categories\"] = doc[\"categories\"].concat(r);\n })\n }\n })\n }\n\n function parseDocumentsD(documents) {\n if (!documents || documents.length < 1) return;\n documents.forEach(function (doc) {\n //generateSentimentChart(doc);\n parseNotes(doc);\n if (doc.markedListD && doc.markedListD.length > 0) {\n doc[\"categoriesD\"] = [];\n doc.markedListD.forEach(function (marked) {\n var r = parseMarkedCategories(marked);\n doc[\"categoriesD\"] = doc[\"categoriesD\"].concat(r);\n })\n }\n })\n }\n\n function parseNotes(doc) {\n if (doc.notes && doc.notes.length > 0) {\n doc.notes = doc.notes.filter(function (n) {\n return n.isActive == 1;\n });\n }\n\n if (doc.nominalAttributes) {\n var isConfirmedAttribute = doc.nominalAttributes.filter(function (e) { return e.key === 'is_classification_confirmed_b'; })[0];\n if (isConfirmedAttribute) {\n doc.thumbsUp = isConfirmedAttribute.value;\n doc.nominalAttributes = doc.nominalAttributes.filter(function (e) {\n return e.key != \"is_classification_confirmed_b\";\n })\n }\n }\n }\n\n function parseMarkedCategories(marked) {\n var result = [];\n var startIndex = marked.startIndex;\n var endIndex = marked.endIndex;\n var moduleName = marked.moduleName;\n var moduleId = marked.moduleId;\n var sentiment = marked.sentiment;\n var sentimentValue = marked.sentimentValue;\n\n var cats = [];\n generateStringCats(cats, [], marked.categories);\n cats.forEach(function (c) {\n var r = {\n startIndex: startIndex,\n endIndex: endIndex,\n moduleName: moduleName,\n moduleId: moduleId,\n sentiment: sentiment,\n sentimentValue: sentimentValue,\n categories: c\n };\n result.push(r);\n });\n if (!cats || cats.length == 0) {\n result.push({\n startIndex: startIndex,\n endIndex: endIndex,\n moduleName: moduleName,\n moduleId: moduleId,\n sentiment: sentiment,\n sentimentValue: sentimentValue,\n categories: []\n });\n }\n return result;\n }\n\n function generateStringCats(cats, tempCats, markedCategories) {\n if (markedCategories && markedCategories.length > 0) {\n markedCategories.forEach(function (caty) {\n var catName = caty.name;\n var catId = caty.categoryId;\n var newTempCats = tempCats.slice();\n newTempCats.push({\n name: catName,\n id: catId\n });\n if (caty.subCategories && caty.subCategories.length > 0) {\n generateStringCats(cats, newTempCats, caty.subCategories);\n } else {\n cats.push(newTempCats);\n }\n })\n }\n }\n\n function generateSentimentChart(doc) {\n doc[\"sentimentChart\"] = [];\n doc.sentimentChart.push({\n label: \"Positive\",\n order: 1,\n value: 0\n });\n doc.sentimentChart.push({\n label: \"Negative\",\n order: 3,\n value: 0\n });\n doc.sentimentChart.push({\n label: \"Neutral\",\n order: 2,\n value: 0\n });\n if (!doc.categoryModels || doc.categoryModels.length < 1) return;\n doc.categoryModels.forEach(function (moduleCategory) {\n if (moduleCategory.categories && moduleCategory.categories.length > 0) {\n moduleCategory.categories.forEach(function (catString) {\n var sentimentValue = extractSentimentValueInCategoryString(catString);\n var foundedPart = doc.sentimentChart.find(function (i) {\n return i.order == sentimentValue\n });\n if (foundedPart) {\n foundedPart.value = foundedPart.value + 1;\n }\n })\n }\n })\n }\n\n function extractSentimentValueInCategoryString(category) {\n var regex = /(.*)\\|(.*)/gm;\n var m;\n var sentimentValue;\n\n while ((m = regex.exec(category)) !== null) {\n if (m.index === regex.lastIndex) {\n regex.lastIndex++;\n }\n\n // The result can be accessed through the `m`-variable.\n m.forEach(function (match, groupIndex) {\n if (groupIndex == 2) {\n sentimentValue = match;\n }\n });\n }\n return sentimentValue;\n }\n\n\n vm.calculatePercentageForCategorySentimentTooltip = function (item, id, field) {\n var result = 0;\n if (item.isBasicCategoryAdded && field.moduleId == vm.singleClassificationModule.moduleId) return 100;\n if (!item.markedList) return \"-\";\n var marking = item.markedList.filter(function (k) { return field.startIndex == k.startIndex && field.endIndex == k.endIndex && k.moduleId == field.moduleId })[0];\n if (!marking) return 100;\n for (var j = 0; j < marking.categories.length; j++) {\n if (marking.categories[j].categoryId == id) {\n result = Math.round(marking.categories[j].probability * 100);\n break;\n }\n if (marking.categories[j].subCategories.length > 0) {\n var recursiveResult = recursiveFindProbability(marking.categories[j], id);\n result = recursiveResult != 0 ? recursiveResult : result;\n if (result != 0) break;\n }\n }\n return result;\n }\n\n function recursiveFindProbability(item, id) {\n var res = 0;\n for (var k = 0; k < item.subCategories.length; k++) {\n if (item.subCategories[k].categoryId == id) {\n res = Math.round(item.subCategories[k].probability * 100);\n break;\n }\n if (item.subCategories[k].subCategories.length > 0) {\n res = recursiveFindProbability(item.subCategories[k], id);\n break;\n }\n }\n return res;\n }\n\n\n vm.calculatePercentageForSentimentTooltip = function (item, field) {\n var result = 0;\n if (!item.markedList) return 100;\n for (var i = 0; i < item.markedList.length; i++) {\n if (field.startIndex == item.markedList[i].startIndex && item.markedList[i].moduleId == field.moduleId) {\n result = Math.round(item.markedList[i].sentimentRate * 100);\n break;\n }\n }\n return result;\n }\n\n vm.calculatePercentageForTotalSentiment = function (item) {\n return Math.round(item.sentimentRate * 100);\n }\n\n\n\n function calculatePageCounts(count) {\n var l = 10;\n var lastpage = Math.ceil(count / l);\n return lastpage;\n }\n\n function setCurrentPage(page) {\n if (page < 1)\n page = 1;\n var row = 10;\n vm.pagination.totalNumber = Math.ceil(vm.pagination.count / row);\n if (page > vm.pagination.totalNumber)\n page = vm.pagination.totalNumber;\n var pageCount = (row * page) - row;\n vm.parameters.start = pageCount;\n searchData();\n }\n\n function highlightCategoryContent(part, contentFields) {\n var reportModule = vm.report.reportModules.filter(function (m) { return m.moduleId == part.moduleId })[0];\n if (reportModule && reportModule.classifierType == \"SINGLE\") return;\n vm.highlightingIsOn = true;\n var startIndex = part.startIndex;\n var endIndex = part.endIndex;\n var sentiment = part.sentimentValue;\n var colorCode = \"#aec7e8\";\n var textColor = \"#fff\";\n if (sentiment) {\n if (sentiment == 1) {\n colorCode = \"#4caf50\";\n } else if (sentiment == 3) {\n colorCode = \"#f44336\";\n } else if (sentiment == 2) {\n colorCode = \"#9e9e9e\";\n }\n }\n var startContentField = contentFields.filter(function (c) {\n return c.startIndex <= startIndex && c.endIndex >= endIndex;\n })[0];\n if (startContentField) {\n var content = startContentField.text;\n if (!content.includes('= endIndex) {\n if (startContentField.text.indexOf(\"' + startContentField.text.substring(startIndex - startContentField.startIndex, endIndex - startContentField.startIndex) + '' + startContentField.text.substring(endIndex - startContentField.startIndex, startContentField.text.length);\n }\n } else {\n var includedContentFields = contentFields.filter(function (c) {\n return startIndex <= c.endIndex && endIndex >= c.startIndex;\n });\n includedContentFields.forEach(function (contentField) {\n if (contentField.text.indexOf(\"= startIndex) && (contentField.endIndex - 1 <= endIndex)) {\n vm.categoryTextTooltip = contentField.text.substring(0, contentField.endIndex - contentField.startIndex);\n contentField.text = contentField.text.substring(0, 0) + '' + contentField.text.substring(0, contentField.endIndex - contentField.startIndex) + '' + contentField.text.substring(contentField.endIndex - contentField.startIndex, contentField.content.length);\n } else if (contentField.startIndex <= startIndex && contentField.endIndex - 1 <= endIndex) {\n vm.categoryTextTooltip = contentField.text.substring(startIndex - contentField.startIndex, contentField.endIndex - contentField.startIndex);\n contentField.text = contentField.text.substring(0, startIndex - contentField.startIndex) + '' + contentField.text.substring(startIndex - contentField.startIndex, contentField.endIndex - contentField.startIndex) + '' + contentField.text.substring(contentField.endIndex - contentField.startIndex, contentField.content.length);\n } else if (contentField.startIndex <= startIndex && contentField.endIndex - 1 >= endIndex) {\n vm.categoryTextTooltip = contentField.text.substring(startIndex - contentField.startIndex, endIndex - contentField.startIndex);\n contentField.text = contentField.text.substring(0, startIndex - contentField.startIndex) + '' + contentField.text.substring(startIndex - contentField.startIndex, endIndex - contentField.startIndex) + '' + contentField.text.substring(endIndex - contentField.startIndex, contentField.content.length);\n } else if (contentField.startIndex >= startIndex && contentField.endIndex - 1 >= endIndex) {\n vm.categoryTextTooltip = contentField.text.substring(0, endIndex - contentField.startIndex);\n contentField.text = contentField.text.substring(0, 0) + '' + contentField.text.substring(0, endIndex - contentField.startIndex) + '' + contentField.text.substring(endIndex - contentField.startIndex, contentField.content.length);\n }\n }\n });\n }\n }\n }\n\n }\n vm.getContentLimit = function (content, limit) {\n var substring = content.substring(0, limit);\n var span = substring.match(\"()\")\n if (span) limit += span[0].length;\n substring = content.substring(0, limit);\n var span = substring.match(\"()\")\n if (span) limit += span[0].length;\n return limit;\n }\n\n function unHighlightCategoryContent(contentFields) {\n vm.categoryTextTooltip = \"\";\n vm.highlightingIsOn = false;\n var colorsUnhighlight = [\"#aec7e8\", \"#4caf50\", \"#f44336\", \"#9e9e9e\"];\n var textColor = \"#fff\";\n if (contentFields && contentFields.length > 0) {\n contentFields.forEach(function (c) {\n colorsUnhighlight.forEach(function (color) {\n c.text = c.text.split('').join('');\n c.text = c.text.split('').join('');\n });\n });\n }\n }\n\n function filterSidenavFacet(facet) {\n if (!vm.report.facetMultiple) {\n var fieldName = facet.fieldName;\n var foundedFilter = vm.filters.levels.filter(function (l) {\n return l.fieldName === fieldName;\n });\n if (foundedFilter && foundedFilter.length > 0) {\n return false;\n } else {\n return true;\n }\n } else {\n return true;\n }\n }\n\n function getSortableFields() {\n vm.numericReportFields = vm.reportFields.filter(function (k) {\n return k.fieldType == 301 || k.fieldType == 311;\n })\n var sortableFields = vm.reportFields.filter(function (f) {\n return f.fieldType == 500 || f.fieldType == 400 || ReportService.isThisFieldType(300, f.fieldType);\n });\n sortableFields = sortableFields.filter(function (r) {\n var founded = sortableFields.filter(function (f1) {\n return f1.fieldTitle === r.fieldTitle;\n })\n if (founded && founded.length > 1)\n return false;\n else\n return true;\n });\n sortableFields.filter(function (e) {\n return angular.isDefined(e);\n });\n vm.sortableFields = sortableFields.filter(function (f) {\n return f.allowSort;\n }).map(function (f) {\n return {\n \"fieldName\": f.fieldName,\n \"fieldTitle\": f.fieldTitle\n }\n });\n\n var date_dt = {\n \"fieldName\": \"date_dt\",\n \"fieldTitle\": \"Date\"\n };\n var flag = false;\n for (var i = 0; i < vm.sortableFields.length; i++) {\n if (vm.sortableFields[i].fieldName == \"date_dt\") {\n flag = true;\n }\n }\n if (!flag && isReportContainDateField()) {\n vm.sortableFields.push(date_dt);\n }\n }\n\n function getSortableFieldName() {\n if (vm.userSettings != null && vm.userSettings.sortableFieldName != null) {\n var sortableField = vm.sortableFields.filter(function (c) { return c.fieldName == vm.userSettings.sortableFieldName; })[0];\n if (sortableField || vm.userSettings.sortableFieldName == \"createdate\" || vm.userSettings.sortableFieldName == \"content_len_i\" || vm.userSettings.sortableFieldName == \"category_count_i\") {\n return vm.userSettings.sortableFieldName;\n } else if (isReportContainDateField()) {\n return \"date_dt\";\n } else {\n return \"createdate\";\n }\n } else {\n if (isReportContainDateField()) {\n return \"date_dt\";\n } else {\n return \"createdate\";\n }\n }\n }\n\n vm.saveLastSortableField = function() {\n $settings.saveUserSettings(\"sortableFieldName\", vm.sortByFieldName, vm.report.id);\n if (vm.sortByFieldName == null) {\n vm.sortByFieldName = 'createdate'\n }\n if (vm.sortByFieldName && vm.sortOrder) {\n vm.parameters.sort = vm.sortByFieldName + \" \" + vm.sortOrder;\n }\n vm.searchFromStart();\n }\n\n function isReportContainDateField() {\n var flag = false;\n for (var i = 0; i < vm.reportFields.length; i++) {\n if (vm.reportFields[i].fieldName == \"date_dt\") {\n flag = true;\n }\n }\n return flag;\n }\n\n function toggleSort() {\n if (vm.sortByFieldName == null) {\n vm.sortByFieldName = 'createdate'\n }\n if (vm.sortOrder === vm.sortOrders[0]) {\n vm.sortOrder = vm.sortOrders[1];\n } else {\n vm.sortOrder = vm.sortOrders[0];\n }\n if (vm.sortByFieldName && vm.sortOrder) {\n vm.parameters.sort = vm.sortByFieldName + \" \" + vm.sortOrder;\n }\n vm.searchFromStart();\n }\n\n vm.handleReadyButton = function handleReadyButton(item) {\n var readyPermission = false;\n var permissions = vm.user.permissions.filter(function (k) {\n return k.workspaceId == vm.report.workspaceId\n })[0].permissions;\n if (permissions.includes('REPORT/DATA/READY')) {\n readyPermission = true;\n }\n if (readyPermission) {\n if (item.isReady) {\n vm.unReadyDocument(item);\n } else {\n vm.readyDocument(item, readyPermission);\n }\n } else {\n if (item.isPending || item.isReady) {\n item[\"isPending\"] = false;\n item[\"pendingBy\"] = null;\n item[\"pendingDate\"] = null;\n vm.unReadyDocument(item);\n } else {\n vm.readyDocument(item, readyPermission);\n }\n }\n }\n\n function dateFormat(dateStart, dateEnd) {\n return dateStart && dateEnd && (dateStart.toLocaleDateString('tr-TR') + ' - ' + moment(dateEnd).toDate().toLocaleDateString('tr-TR'));\n }\n\n function setQueryParameters() {\n if ($location.search().query || $stateParams.query) {\n if($location.search().query){\n vm.parameters = JSON.parse(base64.decode($location.search().query));\n }else if($stateParams.query){\n vm.parameters = JSON.parse(base64.decode($stateParams.query));\n }\n if (vm.parameters.feedback || vm.parameters.assignment) {\n vm.feedbackMode = true;\n setFeedbackModeFromQuery();\n }\n if (vm.parameters.showSimilar) {\n vm.similarityMode = false;\n }\n if (vm.parameters && vm.parameters.startDate && vm.parameters.endDate) {\n /*\n vm.datePicker.dateStart = moment(vm.parameters.startDate).toDate();\n vm.datePicker.dateEnd = moment(vm.parameters.endDate).toDate();\n vm.parameters.startDate = vm.datePicker.dateStart.toISOString().split('.')[0] + \"Z\";\n vm.parameters.endDate = vm.datePicker.dateEnd.toISOString().split('.')[0] + \"Z\";\n */\n vm.afterDatePicker = {\n startDate: moment(vm.parameters.startDate).toDate(),\n endDate: moment(vm.parameters.endDate).toDate()\n }\n vm.parameters.startDate = vm.afterDatePicker.startDate.toISOString().split('.')[0] + \"Z\";\n vm.parameters.endDate = vm.afterDatePicker.endDate.toISOString().split('.')[0] + \"Z\";\n }else if (vm.afterDatePicker && vm.afterDatePicker.startDate && vm.afterDatePicker.endDate) {\n vm.parameters.startDate = vm.afterDatePicker.startDate.toISOString().split('.')[0] + \"Z\";\n vm.parameters.endDate = vm.afterDatePicker.endDate.toISOString().split('.')[0] + \"Z\";\n }\n vm.filterChips = ReportService.generateFilterChipsFromFilter(vm.parameters, vm.reportModules);\n }\n if (vm.parameters.sort == null) {\n vm.parameters.sort = getSortableFieldName() + \" desc\";\n vm.sortByFieldName = getSortableFieldName();\n } else {\n var res = vm.parameters.sort.split(\" \");\n vm.sortByFieldName = res[0];\n }\n\n var url = $location.search().url ? $location.search().url : $stateParams.url ? $stateParams.url : null;\n var oid = $location.search().oid ? $location.search().oid : $stateParams.oid ? $stateParams.oid : null;;\n\n if ($location.search().logs) vm.showLogs = true;\n\n if (url) {\n vm.filterChips.push({\n key: \"url_s\",\n value: url,\n type: 300,\n group: -1,\n operand: \"AND\",\n titleKey: \"Url\"\n })\n }\n if (oid) {\n vm.filterChips.push({\n key: \"original_id_s\",\n value: oid,\n type: 300,\n group: -1,\n operand: \"AND\",\n titleKey: \"Id\"\n })\n }\n }\n\n vm.removePeriodFilter = function () {\n vm.parameters.periods = [];\n search();\n }\n\n function encodeFilters(query) {\n var encodedFilters = base64.encode(JSON.stringify(query));\n $location.search('query', encodedFilters);\n ReportService.setQuery(vm.report.id,encodedFilters);\n }\n\n function saveBookmark(title, event) {\n var request = {\n url: $location.search().query,\n title: title,\n reportId: vm.reportId\n };\n event.target.disabled = true;\n api.report.saveBookmark(request)\n .then(function (res) {\n vm.allBookmarks = res;\n vm.bookmarks = vm.allBookmarks.filter(function (k) { return k.userName != null });\n vm.generalBookmarks = vm.allBookmarks.filter(function (k) { return k.userName == null });\n vm.newBookmarkTitle = null;\n event.target.disabled = false;\n }, function (response) {\n event.target.disabled = false;\n })\n }\n\n //General ookmarks starts\n this.saveGeneralBookmark = function (title, event) {\n var request = {\n url: $location.search().query,\n title: title,\n reportId: vm.reportId\n };\n event.target.disabled = true;\n api.report.saveGeneralBookmark(request)\n .then(function (res) {\n vm.allBookmarks = res;\n vm.bookmarks = vm.allBookmarks.filter(function (k) { return k.userName != null });\n vm.generalBookmarks = vm.allBookmarks.filter(function (k) { return k.userName == null });\n vm.newBookmarkTitle = null;\n vm.newGeneralBookmarkTitle = null;\n event.target.disabled = false;\n }, function (response) {\n event.target.disabled = false;\n })\n }\n\n function deleteBookmark(id, event) {\n var request = {\n reportId: vm.reportId,\n id: id\n };\n event.target.disabled = true;\n api.report.deleteBookmark(request)\n .then(function (res) {\n vm.allBookmarks = res;\n vm.bookmarks = vm.allBookmarks.filter(function (k) { return k.userName != null });\n vm.generalBookmarks = vm.allBookmarks.filter(function (k) { return k.userName == null });\n event.target.disabled = false;\n }, function (response) {\n console.log(response);\n })\n }\n\n function goToBookmark(query) {\n $location.search('query', query);\n if ($location.search().query) {\n setQueryParameters();\n search();\n }\n }\n\n vm.showHistories = function ($event, doc) {\n ReportHistoryService.showDocumentHistory($scope, $event, doc, vm.report)\n }\n\n function createDatePickers() {\n if (!vm.isDatePickerCreatorStarted) {\n vm.isDatePickerCreatorStarted = true;\n if ($('#afterreportrange').length || $('#afterreportrange2').length) {\n if (vm.afterDatePicker && vm.afterDatePicker.startDate && vm.afterDatePicker.endDate) {\n createDateComponentTurkish('#afterreportrange', vm.afterDatePicker.startDate, vm.afterDatePicker.endDate);\n createDateComponentEnglish('#afterreportrange2', vm.afterDatePicker.startDate, vm.afterDatePicker.endDate);\n } else {\n createDateComponentTurkish('#afterreportrange', null, null);\n createDateComponentEnglish('#afterreportrange2', null, null);\n }\n\n if (vm.afterDatePicker.startDate && vm.afterDatePicker.endDate) {\n $('#afterreportrange').val(moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY'));\n $('#afterreportrange2').val(moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY'));\n } else {\n if ($translate.use() == \"tr\") {\n $('#afterreportrange').val('Tarih');\n $('#afterreportrange2').val('Tarih');\n } else {\n $('#afterreportrange').val('Date');\n $('#afterreportrange2').val('Date');\n }\n }\n\n if ($('#afterreportrange').length) {\n\n $('input[id=\"afterreportrange\"]').on('apply.daterangepicker', function (ev, picker) {\n vm.afterDatePicker = {\n startDate: picker.startDate.toDate(),\n endDate: picker.endDate.toDate()\n };\n //addTemplateReportCookie(\"afterDate\", vm.afterDatePicker);\n $settings.saveUserSettings(\"afterDate\", vm.afterDatePicker, vm.report.id);\n changeDate();\n });\n $('input[id=\"afterreportrange\"]').on('hide.daterangepicker', function (ev, picker) {\n refreshDatePickersFormat();\n });\n }\n\n if ($('#afterreportrange2').length) {\n\n $('input[id=\"afterreportrange2\"]').on('apply.daterangepicker', function (ev, picker) {\n vm.afterDatePicker = {\n startDate: picker.startDate.toDate(),\n endDate: picker.endDate.toDate()\n };\n //addTemplateReportCookie(\"afterDate\", vm.afterDatePicker);\n $settings.saveUserSettings(\"afterDate\", vm.afterDatePicker, vm.report.id);\n changeDate();\n });\n $('input[id=\"afterreportrange2\"]').on('hide.daterangepicker', function (ev, picker) {\n refreshDatePickersFormat();\n });\n }\n vm.dateTypes = [{\n id: 1,\n name: $translate.instant('REPORT.CONTENT_DATE')\n },\n {\n id: 2,\n name: $translate.instant('SHARED.ORDER.UPDATED_DATE')\n },\n {\n id: 3,\n name: $translate.instant('SHARED.ORDER.CREATED_DATE')\n }]\n var l = \"
\" +\n \"\" +\n \"
\";\n $(\".drp-buttons\").prepend($compile(l)($scope));\n\n vm.parameters.searchByDate = vm.paramSearchByDate;\n\n }\n vm.isDatePickerCreatorStarted = false;\n }\n refreshDatePickersFormat();\n }\n\n function createDatePicker() {\n if (($('#afterreportrange').is(':visible') && vm.languageDatePicker == 1) || ($('#afterreportrange2').is(':visible') && vm.languageDatePicker == 2)) { //if the container is visible on the page\n createDatePickers();\n } else {\n setTimeout(createDatePickers, 50); //wait 50 ms, then try again\n }\n }\n\n function setDate() {\n vm.afterDatePicker = {\n startDate: vm.report.dates && vm.report.dates.startDate ? moment(vm.report.dates.startDate).toDate() : null,\n //endDate: vm.report.dates && vm.report.dates.endDate ? moment(vm.report.dates.endDate).add(1, 'days').toDate() : null\n endDate: vm.report.dates && vm.report.dates.endDate ? moment(vm.report.dates.endDate).startOf('day').add(1, 'days').add(-1, 'seconds').toDate() : null\n };\n if (vm.afterDatePicker && vm.afterDatePicker.startDate && vm.afterDatePicker.endDate) {\n vm.parameters.startDate = vm.afterDatePicker.startDate.toISOString().split('.')[0] + \"Z\";\n vm.parameters.endDate = vm.afterDatePicker.endDate.toISOString().split('.')[0] + \"Z\";\n }\n }\n\n function setUserHaveReadyPermission() {\n var permissions = vm.user.permissions.filter(function (k) {\n return k.workspaceId == vm.report.workspaceId\n })[0].permissions;\n if (permissions.includes('REPORT/DATA/READY')) {\n vm.userHaveReadyPermission = true;\n }\n }\n\n function setSingleClassificationModuleId() {\n var classificationModules = vm.reportModules.filter(function (k) { return k.moduleTypeId == 1 && k.notDashboard == 0; });\n if (classificationModules.length == 1 && classificationModules[0].classifierType == \"SINGLE\") {\n vm.singleClassificationModule = classificationModules[0];\n }\n }\n\n vm.getCategoryTitle = function (cat) {\n var title = cat.name;\n var category = vm.categories.filter(function (k) { return k.id == cat.id; })[0];\n if (category && category.localVariables) {\n var localVariable = category.localVariables.filter(function (k) { return $translate.use() == k.language; })[0];\n if (localVariable) title = localVariable.value;\n }\n return title;\n }\n\n function getPreviousViewDate() {\n api.report.getPreviousViewDate(vm.reportId)\n .then(function (response) {\n vm.previousViewDate = response;\n }, function (response) {\n console.log(response);\n });\n }\n\n vm.isLater = function(str1, str2) {\n return new Date(str1) > new Date(str2);\n }\n\n function init() {\n getPreviousViewDate();\n setDate();\n getSortableFields();\n //setFeedbackInitializeParameters();\n setQueryParameters();\n search();\n //getReportModules();\n //getSortableFields();\n setFilteredFacets();\n setTimeout(function () { createDatePicker(); }, 2000);\n getIsFlatModeActive();\n setUserHaveReadyPermission();\n setSingleClassificationModuleId();\n $utils.saveAudit(vm.reportId, \"REPORT\", \"OPEN\", vm.report.name + \" / Report Detail\");\n $utils.googleAnalyticsSetPageview(\"/report/\" + vm.reportId + \"/data\");\n $utils.googleAnalyticsSetScreenView(\"Detail\");\n }\n init();\n\n vm.datePickerLanguage = {\n 'Mon': 'Pzt',\n 'Tue': 'Sal',\n 'Wed': 'Çar',\n 'Thu': 'Per',\n 'Fri': 'Cum',\n 'Sat': 'Cmt',\n 'Sun': 'Paz',\n 'This Week': 'Bu Hafta',\n \"January\": \"Ocak\",\n \"February\": \"Şubat\",\n \"March\": \"Mart\",\n \"April\": \"Nisan\",\n \"May\": \"Mayıs\",\n \"June\": \"Haziran\",\n \"July\": \"Temmuz\",\n \"August\": \"Ağustos\",\n \"September\": \"Eylül\",\n \"October\": \"Ekim\",\n \"November\": \"Kasım\",\n \"December\": \"Aralık\"\n };\n\n vm.sentimentChart = {\n config: {\n refreshDataOnly: true,\n deepWatchData: true\n },\n options: {\n chart: {\n type: 'pieChart',\n color: ['#4CAF50', '#F44336', '#9E9E9E'],\n height: 200,\n margin: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n },\n donut: true,\n clipEdge: true,\n cornerRadius: 0,\n labelType: 'percent',\n showLegend: false,\n padAngle: 0.02,\n x: function (d) {\n return d.label;\n },\n y: function (d) {\n return d.value;\n },\n tooltip: {\n gravity: 's',\n classes: 'gravity-s',\n valueFormatter: function () {\n return null;\n }\n },\n noData: $translate.instant('SENTIMENT.ERRORS.NO_DATA_AVAILABLE')\n }\n }\n };\n\n function buildToggler(navID) {\n return function () {\n // Component lookup should always be available since we are not using `ng-if`\n $mdSidenav(navID)\n .toggle()\n .then(function () {\n $log.debug(\"toggle \" + navID + \" is done\");\n });\n };\n }\n\n\n vm.categoryTextTooltip = \"\";\n vm.colors = ['blue-bg', 'blue-grey-bg', 'orange-bg', 'pink-bg', 'purple-bg'];\n vm.colors = [\n [\"#1f77b4\", \"#fff\"],\n [\"#aec7e8\", \"#000\"],\n [\"#ff7f0e\", \"#000\"],\n [\"#ffbb78\", \"#000\"],\n [\"#2ca02c\", \"#fff\"],\n [\"#98df8a\", \"#000\"],\n [\"#d62728\", \"#fff\"],\n [\"#ff9896\", \"#000\"],\n [\"#9467bd\", \"#000\"],\n [\"#c5b0d5\", \"#000\"],\n [\"#8c564b\", \"#fff\"],\n [\"#c49c94\", \"#000\"],\n [\"#e377c2\", \"#000\"],\n [\"#f7b6d2\", \"#000\"],\n [\"#7f7f7f\", \"#fff\"],\n [\"#c7c7c7\", \"#000\"],\n [\"#bcbd22\", \"#000\"],\n [\"#dbdb8d\", \"#000\"],\n [\"#17becf\", \"#000\"],\n [\"#9edae5\", \"#000\"]\n ];\n\n function refreshDatePickersFormat() {\n if (vm.afterDatePicker.startDate && vm.afterDatePicker.endDate) {\n var afterValue = getDatePickerValue(vm.afterDatePicker);\n var dateRanges = {};\n if (vm.languageDatePicker == 1)\n dateRanges = vm.dateRanges;\n else if (vm.languageDatePicker == 2)\n dateRanges = vm.dateRangesEn;\n Object.keys(dateRanges).forEach(function (k) {\n if (dateRanges[k][0].format('DD/MM/YYYY') == moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') && dateRanges[k][1].format('DD/MM/YYYY') == moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY')) {\n afterValue = k;\n }\n })\n if (afterValue) {\n $('#afterreportrange').val(afterValue);\n $('#afterreportrange2').val(afterValue);\n } else {\n $('#afterreportrange').val(moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY'));\n $('#afterreportrange2').val(moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY'));\n }\n }\n else {\n $('#afterreportrange').val('Tarih');\n $('#afterreportrange2').val('Tarih');\n }\n\n }\n\n function getDatePickerValue(picker) {\n var value = null;\n if (picker && picker.startDate && picker.endDate) {\n if (picker.startDate.getDate() == 1 && picker.startDate.getMonth() + 1 == 1 &&\n picker.endDate.getDate() == 31 && picker.endDate.getMonth() + 1 == 3 &&\n picker.startDate.getYear() == picker.endDate.getYear()) {\n value = \"Q1 (\" + picker.startDate.getFullYear() + \")\";\n } else if (picker.startDate.getDate() == 1 && picker.startDate.getMonth() + 1 == 4 &&\n picker.endDate.getDate() == 30 && picker.endDate.getMonth() + 1 == 6 &&\n picker.startDate.getYear() == picker.endDate.getYear()) {\n value = \"Q2 (\" + picker.startDate.getFullYear() + \")\";\n } else if (picker.startDate.getDate() == 1 && picker.startDate.getMonth() + 1 == 7 &&\n picker.endDate.getDate() == 30 && picker.endDate.getMonth() + 1 == 9 &&\n picker.startDate.getYear() == picker.endDate.getYear()) {\n value = \"Q3 (\" + picker.startDate.getFullYear() + \")\";\n } else if (picker.startDate.getDate() == 1 && picker.startDate.getMonth() + 1 == 10 &&\n picker.endDate.getDate() == 31 && picker.endDate.getMonth() + 1 == 12 &&\n picker.startDate.getYear() == picker.endDate.getYear()) {\n value = \"Q4 (\" + picker.startDate.getFullYear() + \")\";\n }\n }\n return value;\n }\n\n vm.dateRanges = {\n 'Bugün': [moment(), moment()],\n 'Dün': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],\n 'Son 7 Gün': [moment().subtract(6, 'days'), moment()],\n 'Son 30 Gün': [moment().subtract(29, 'days'), moment()],\n 'Bu Ay': [moment().startOf('month'), moment().endOf('month')],\n 'Geçen Ay': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')],\n 'Bu Yıl': [moment().startOf('year'), moment().endOf('year')],\n 'Geçen Yıl (Tümü)': [moment().startOf('year').subtract(1, 'y'), moment().endOf('year').subtract(1, 'y')],\n 'Bu Yıl (YTD)': [moment().startOf('year'), moment().endOf('day')],\n 'Geçen Yıl (YTD)': [moment().startOf('year').subtract(1, 'y'), moment().endOf('day').subtract(1, 'y')],\n 'Önceki Yıl (Tümü)': [moment().startOf('year').subtract(2, 'y'), moment().endOf('year').subtract(2, 'y')]\n }\n\n vm.dateRanges['Q1 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 0, 1)), moment(new Date(moment().year(), 2, 31))];\n vm.dateRanges['Q2 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 3, 1)), moment(new Date(moment().year(), 5, 30))];\n vm.dateRanges['Q3 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 6, 1)), moment(new Date(moment().year(), 8, 30))];\n vm.dateRanges['Q4 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 9, 1)), moment(new Date(moment().year(), 11, 31))];\n vm.dateRanges['Q1 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 0, 1)), moment(new Date(moment().year() - 1, 2, 31))];\n vm.dateRanges['Q2 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 3, 1)), moment(new Date(moment().year() - 1, 5, 30))];\n vm.dateRanges['Q3 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 6, 1)), moment(new Date(moment().year() - 1, 8, 30))];\n vm.dateRanges['Q4 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 9, 1)), moment(new Date(moment().year() - 1, 11, 31))];\n\n vm.dateRangesEn = {\n 'Today': [moment(), moment()],\n 'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],\n 'Last 7 Days': [moment().subtract(6, 'days'), moment()],\n 'Last 30 Days': [moment().subtract(29, 'days'), moment()],\n 'This Month': [moment().startOf('month'), moment().endOf('month')],\n 'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')],\n 'This Year': [moment().startOf('year'), moment().endOf('year')],\n 'Last Year (All)': [moment().startOf('year').subtract(1, 'y'), moment().endOf('year').subtract(1, 'y')],\n 'This Year (YTD)': [moment().startOf('year'), moment().endOf('day')],\n 'Last Year (YTD)': [moment().startOf('year').subtract(1, 'y'), moment().endOf('day').subtract(1, 'y')],\n 'Previous Year (All)': [moment().startOf('year').subtract(2, 'y'), moment().endOf('year').subtract(2, 'y')]\n }\n\n vm.dateRangesEn['Q1 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 0, 1)), moment(new Date(moment().year(), 2, 31))];\n vm.dateRangesEn['Q2 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 3, 1)), moment(new Date(moment().year(), 5, 30))];\n vm.dateRangesEn['Q3 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 6, 1)), moment(new Date(moment().year(), 8, 30))];\n vm.dateRangesEn['Q4 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 9, 1)), moment(new Date(moment().year(), 11, 31))];\n vm.dateRangesEn['Q1 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 0, 1)), moment(new Date(moment().year() - 1, 2, 31))];\n vm.dateRangesEn['Q2 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 3, 1)), moment(new Date(moment().year() - 1, 5, 30))];\n vm.dateRangesEn['Q3 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 6, 1)), moment(new Date(moment().year() - 1, 8, 30))];\n vm.dateRangesEn['Q4 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 9, 1)), moment(new Date(moment().year() - 1, 11, 31))];\n\n function createDateComponentTurkish(id, startDate, endDate) {\n $(id).daterangepicker({\n startDate: moment(startDate).toDate(),\n endDate: moment(endDate).toDate(),\n ranges: vm.dateRanges,\n opens: 'left',\n //alwaysShowCalendars: true,\n //ranges: createQuarters(),\n locale: {\n format: 'DD/MM/YYYY',\n applyLabel: \"Uygula\",\n cancelLabel: \"Vazgeç\",\n \"fromLabel\": \"Dan\",\n \"toLabel\": \"a\",\n \"customRangeLabel\": \"Seç\",\n \"daysOfWeek\": [\n \"Pz\",\n \"Pt\",\n \"Sl\",\n \"Çr\",\n \"Pr\",\n \"Cm\",\n \"Ct\"\n ],\n \"monthNames\": [\n \"Ocak\",\n \"Şubat\",\n \"Mart\",\n \"Nisan\",\n \"Mayıs\",\n \"Haziran\",\n \"Temmuz\",\n \"Ağustos\",\n \"Eylül\",\n \"Ekim\",\n \"Kasım\",\n \"Aralık\"\n ],\n \"firstDay\": 1\n }\n //ranges: createQuarters()\n }, refreshDatePickersFormat);\n }\n\n function createDateComponentEnglish(id, startDate, endDate) {\n $(id).daterangepicker({\n startDate: moment(startDate).toDate(),\n endDate: moment(endDate).toDate(),\n ranges: vm.dateRangesEn,\n opens: 'left',\n //alwaysShowCalendars: true,\n //ranges: createQuarters(),\n locale: {\n format: 'DD/MM/YYYY',\n applyLabel: \"Apply\",\n cancelLabel: \"Cancel\",\n \"fromLabel\": \"from\",\n \"toLabel\": \"to\",\n \"customRangeLabel\": \"Choose\",\n \"daysOfWeek\": [\n \"Sn\",\n \"Mn\",\n \"Tu\",\n \"Wn\",\n \"Th\",\n \"Fr\",\n \"St\"\n ],\n \"monthNames\": [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\"\n ],\n \"firstDay\": 1\n }\n //ranges: createQuarters()\n }, refreshDatePickersFormat);\n }\n\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.report')\n .controller('DataOrganizationController', DataOrganizationController);\n\n /** @ngInject */\n function DataOrganizationController($rootScope, $location, $scope, $state, $stateParams, $log, $timeout, $translate, api, $utils, $$report, $mdToast, ReportService, ReportDataOrganizationService, base64, $mdSidenav, $q, ReportQueryParserService, $compile) {\n var vm = this;\n moment.locale('tr');\n vm.translate = $translate;\n //variables\n vm.report = $$report;\n vm.reportId = $stateParams.id;\n vm.reportSettings = $$report.reportSettings;\n vm.documentNickname = $translate.use() == \"tr\" ? vm.reportSettings.commonSettings.documentNicknameTr : vm.reportSettings.commonSettings.documentNicknameEn;\n vm.selectedMode = 'md-scale';\n vm.reportFields = {\n allReportFields: [],\n classCategories: [],\n categories: [],\n tags: [],\n manipulatable: [],\n contents:[]\n };\n vm.selectedCategory = {};\n vm.selectedTag = null;\n vm.categories = [];\n vm.loaders = {\n fetchingCategoryValues: false,\n fetchingTagValues: false,\n fetchingMapperCategoryValues: false,\n changingCategoryValue: false,\n changingTagValue: false,\n deletingCategoryValues: false,\n deletingTagValues: false,\n deletingCategoryValue: false,\n deletingTagValue: false,\n mappingButton: false,\n addReportFieldButton: false,\n updateReportFieldButton: false,\n removeReportFieldButton: false,\n changeMapperCategory: false,\n changeMappedCategory: false,\n search: false\n }\n vm.categoryValues = [];\n vm.categoryMapperValues = [];\n vm.categoryMappedValues = [];\n vm.tagValues = [];\n vm.categoryNewValue = null;\n vm.defaultMapValue = null;\n vm.defaultMapSearchText = \"\";\n vm.tagNewValue = null;\n vm.tagOldValue = null;\n\n vm.selectedReportField = {};\n vm.selectedMappingExistsReportField = {};\n vm.selectedMappingMappedReportField = {};\n vm.deleteExistingReportFieldValues = false;\n\n vm.groupCtrlCount = 7000;\n vm.filterSidenav = buildToggler('main-sidenav');\n vm.data = {\n facets: []\n };\n \n vm.paramSearchByDate = $stateParams.searchByDate == undefined ? 1 : $stateParams.searchByDate;\n vm.parameters = {\n assignment: null,\n category: null,\n date: null,\n defaultFacet: true,\n endDate: null,\n searchByDate: vm.paramSearchByDate,\n facet: [],\n feedback: null,\n filter: null,\n filterChips: [],\n gap: null,\n highlight: false,\n query: null,\n row: 0,\n sort: null,\n start: 0,\n startDate: null,\n showSimilar: false\n };\n vm.afterDatePicker = {\n startDate: null,\n endDate: null\n };\n\n vm.sidenavQuery = null;\n vm.sidenavQueryFunc = sidenavQueryFunc;\n vm.facetMoreAndMore = facetMoreAndMore;\n vm.filteredFacets = {};\n vm.filterChips = [];\n vm.dataOrganization = 1;\n vm.removeFacetFilter = removeFacetFilter;\n vm.resetFilters = resetFilters;\n vm.moreAndMoreCount = 1;\n\n vm.language = $translate.use();\n setInterval(function () { vm.language = $translate.use(); }, 100);\n $scope.$watch('vm.language', function () {\n vm.documentNickname = $translate.use() == \"tr\" ? vm.reportSettings.commonSettings.documentNicknameTr : vm.reportSettings.commonSettings.documentNicknameEn;\n if ($$report.hasTrainedModule) {\n if ($translate.use() == \"tr\") {\n vm.languageDatePicker = 1;\n setTimeout(function () { createDatePickers(); }, 200);\n } else if ($translate.use() == \"en\") {\n vm.languageDatePicker = 2;\n setTimeout(function () { createDatePickers(); }, 200);\n }\n }\n });\n\n vm.calculateFilteredFacets = function () {\n vm.filteredFacets = {};\n for (var i = 0; i < vm.filterChips.length; i++) {\n if (vm.filteredFacets[vm.filterChips[i].titleKey] != null) {\n vm.filteredFacets[vm.filterChips[i].titleKey].push(vm.filterChips[i]);\n } else {\n var childs = [];\n childs.push(vm.filterChips[i]);\n vm.filteredFacets[vm.filterChips[i].titleKey] = childs;\n }\n }\n }\n\n //functions\n vm.changeSelectedCategory = changeSelectedCategory;\n vm.changeMapperSelectedCategory = changeMapperSelectedCategory;\n vm.changeMappedSelectedCategory = changeMappedSelectedCategory;\n vm.clickChangeCategoryValue = clickChangeCategoryValue;\n vm.updateReportField = updateReportField;\n vm.addReportField = addReportField;\n vm.mapReportField = mapReportField;\n\n //vm.changeSelectedTag = changeSelectedTag;\n vm.clickChangeTagValue = clickChangeTagValue;\n vm.clickDeleteCategoryValue = clickDeleteCategoryValue;\n vm.clickDeleteTagValue = clickDeleteTagValue;\n\n //methods date\n vm.changeDate = changeDate;\n vm.clearDate = clearDate;\n\n vm.removeReportField = removeReportField;\n\n vm.queryInCategoryMappedValues = queryInCategoryMappedValues;\n\n function changeSelectedCategory() {\n vm.loaders.fetchingCategoryValues = true;\n var request = {\n reportId: vm.report.id,\n fieldName: vm.selectedCategory.fieldName,\n filter: vm.parameters.filter ? vm.parameters.filter : [],\n startDate: vm.parameters.startDate,\n endDate: vm.parameters.endDate,\n searchByDate: vm.parameters.searchByDate,\n query: vm.parameters.query\n }\n api.report.reportFieldsCategoryValues(request)\n .then(function (r) {\n vm.loaders.fetchingCategoryValues = false;\n vm.categoryValues = r;\n ReportService.removeQuery(vm.report.id);\n }, function (err) {\n console.log(err);\n })\n }\n\n function changeMapperSelectedCategory() {\n if(vm.selectedMappingExistsReportField && vm.selectedMappingExistsReportField.fieldName){\n vm.loaders.changeMapperCategory = true;\n vm.loaders.fetchingMapperCategoryValues = true;\n var request = {\n reportId: vm.report.id,\n fieldName: vm.selectedMappingExistsReportField.fieldName\n }\n api.report.reportFieldsCategoryValues(request)\n .then(function (r) {\n vm.loaders.fetchingMapperCategoryValues = false;\n vm.loaders.changeMapperCategory = false;\n vm.categoryMapperValues = r;\n vm.categoryMapperValues = vm.categoryMapperValues.filter(function (c) {\n return c.count != 0;\n });\n ReportService.removeQuery(vm.report.id);\n }, function (err) {\n console.log(err);\n vm.loaders.fetchingMapperCategoryValues = false;\n vm.loaders.changeMapperCategory = false;\n })\n }\n }\n\n vm.getFilteredFacetTitle = function (title) {\n if (!vm.data) return title;\n var reportField = vm.reportFields.allReportFields.filter(function (a) {\n return a.fieldTitle == title;\n })[0]\n if (reportField) {\n var alias = vm.data.localVariables.filter(function (k) {\n return k.fieldName == reportField.fieldName;\n })\n if (alias[0] != null && alias[0].alias != null) {\n if ($translate.use() == \"tr\" && alias[0].alias.tr != null) return alias[0].alias.tr;\n else if ($translate.use() == \"en\" && alias[0].alias.en != null) return alias[0].alias.en;\n else return title;\n }\n }\n return title;\n }\n\n vm.getAttributeAlias = function (tag) {\n if (tag.alias) {\n if ($translate.use() == \"tr\" && tag.alias.tr) return tag.alias.tr;\n if ($translate.use() == \"en\" && tag.alias.en) return tag.alias.en;\n }\n return vm.getFilteredFacetTitle(tag.title);\n }\n\n vm.getFacetValueAlias = function (title, value) {\n if (String(value).startsWith(\"id:\\\"\")) {\n var values = value.split(\"_\");\n if (values[1] != null) {\n return \"id:\\\"\" + values[1];\n }\n }\n if (vm.data == null) return value;\n var reportField = vm.reportFields.allReportFields.filter(function (a) {\n return a.fieldTitle == title;\n })[0]\n if (reportField) {\n var localVariable = vm.data.localVariables.filter(function (k) {\n return k.fieldName == reportField.fieldName;\n })\n\n if (localVariable[0] != null && localVariable[0].valueAliases != null) {\n var valueLocalVariable = localVariable[0].valueAliases.filter(function (k) { return k.itemValue == value.toString(); })\n\n if (valueLocalVariable[0] != null) {\n if ($translate.use() == \"tr\" && valueLocalVariable[0].tr != null) return valueLocalVariable[0].tr;\n else if ($translate.use() == \"en\" && valueLocalVariable[0].en != null) return valueLocalVariable[0].en;\n else return value;\n }\n }\n }\n return value;\n }\n\n function changeMappedSelectedCategory() {\n if (vm.selectedMappingMappedReportField && vm.selectedMappingMappedReportField.fieldName) {\n vm.loaders.fetchingMapperCategoryValues = true;\n vm.loaders.changeMappedCategory = true;\n var request = {\n reportId: vm.report.id,\n fieldName: vm.selectedMappingMappedReportField.fieldName\n }\n api.report.reportFieldsCategoryValues(request)\n .then(function (r) {\n vm.loaders.changeMappedCategory = false;\n vm.loaders.fetchingMapperCategoryValues = false;\n vm.categoryMappedValues = r;\n ReportService.removeQuery(vm.report.id);\n }, function (err) {\n console.log(err);\n vm.loaders.fetchingMapperCategoryValues = false;\n vm.loaders.changeMappedCategory = false;\n })\n }\n }\n\n function queryInCategoryMappedValues(query) {\n var results = query ? vm.categoryMappedValues.filter(function (query) {\n var lowercaseQuery = angular.lowercase(query);\n return function filterFn(item) {\n var lowercaseName = angular.lowercase(item.name);\n return (lowercaseName.indexOf(lowercaseQuery) === 0);\n };\n }) : [];\n return results;\n }\n\n function mapReportField($event) {\n if (vm.categoryMapperValues && vm.categoryMapperValues.length > 0) {\n vm.loaders.mappingButton = true;\n var mappedValues = [];\n vm.categoryMapperValues.forEach(function (data) {\n if (data.name && data.mappedValue && data.mappedValue.name) {\n var item = {\n existsValue: data.name,\n mappedValue: data.mappedValue.name\n };\n mappedValues.push(item);\n } else if (data.searchText && data.searchText.length > 0) {\n var item = {\n existsValue: data.name,\n mappedValue: data.searchText\n };\n mappedValues.push(item);\n } else if (vm.defalutMapValue || (vm.defaultMapSearchText && vm.defaultMapSearchText.length > 0)) {\n var item = {\n existsValue: data.name,\n mappedValue: vm.defalutMapValue ? vm.defalutMapValue : vm.defaultMapSearchText\n };\n mappedValues.push(item);\n }\n });\n var defaultMappedValue = null;\n if(vm.defalutMapValue || (vm.defaultMapSearchText && vm.defaultMapSearchText.length > 0))\n defaultMappedValue = vm.defalutMapValue ? vm.defalutMapValue : vm.defaultMapSearchText;\n var request = {\n reportId: vm.report.id,\n existReportFieldName: vm.selectedMappingExistsReportField.fieldName,\n mappedReportFieldName: vm.selectedMappingMappedReportField.fieldName,\n defaultMappedValue: defaultMappedValue, \n mappingFieldValues: mappedValues,\n deleteExistingReportFieldValues: vm.deleteExistingReportFieldValues,\n defaultValue: vm.defalutMapValue\n }\n ReportDataOrganizationService.mapReportField($scope, $state, $event, request)\n .then(function (answer) {\n if (answer) {\n vm.selectedMappingMappedReportField = {};\n vm.selectedMappingExistsReportField = {};\n }\n vm.loaders.mappingButton = false;\n ReportService.removeQuery(vm.report.id);\n }, function (err) {\n console.log(err);\n vm.loaders.mappingButton = false;\n });\n }\n }\n\n function clickChangeCategoryValue($event) {\n vm.loaders.changingCategoryValue = true;\n var request = {\n reportId: vm.report.id,\n replaceOperation: true,\n fields: [{\n fieldName: vm.selectedCategory.fieldName,\n oldFieldValue: vm.selectedCategoryValue,\n newFieldValue: vm.categoryNewValue\n }],\n filter: vm.parameters.filter ? vm.parameters.filter : [],\n startDate: vm.parameters.startDate,\n endDate: vm.parameters.endDate,\n searchByDate: vm.parameters.searchByDate,\n query: vm.parameters.query\n };\n api.report.changeReportFieldCategoryValue(request)\n .then(function (r) {\n ReportDataOrganizationService.replaceCategoryValue($scope, $state, $event, r)\n .then(function (answer) {\n if (answer) {\n vm.selectedCategory = {};\n vm.selectedNewCategory = {};\n vm.categoryValues = [];\n vm.categoryNewValue = null;\n vm.categoryNewField = false;\n }\n vm.loaders.changingCategoryValue = false;\n ReportService.removeQuery(vm.report.id);\n });\n }, function (err) {\n console.log(err);\n vm.loaders.changingCategoryValue = false;\n });\n }\n\n function clickDeleteCategoryValue($event) {\n vm.loaders.deletingCategoryValue = true;\n var request = {\n reportId: vm.report.id,\n deleteOperation: true,\n fields: [{\n fieldName: vm.selectedCategory.fieldName,\n oldFieldValue: vm.selectedCategoryValue\n }],\n filter: vm.parameters.filter ? vm.parameters.filter : []\n };\n api.report.changeReportFieldCategoryValue(request)\n .then(function (r) {\n ReportDataOrganizationService.deleteCategoryValue($scope, $state, $event, r)\n .then(function (answer) {\n if (answer) {\n vm.selectedCategory = {};\n vm.categoryValues = [];\n vm.categoryNewValue = null;\n }\n ReportService.removeQuery(vm.report.id);\n vm.loaders.deletingCategoryValue = false;\n });\n }, function (err) {\n console.log(err);\n vm.loaders.deletingCategoryValue = false;\n });\n }\n\n function clickChangeTagValue($event) {\n vm.loaders.changingTagValue = true;\n var request = {\n reportId: vm.report.id,\n replaceOperation: true,\n fields: [{\n fieldName: vm.selectedTag.fieldName,\n oldFieldValue: vm.tagOldValue,\n newFieldValue: vm.tagNewValue\n }],\n filter: vm.parameters.filter ? vm.parameters.filter : [],\n startDate: vm.parameters.startDate,\n endDate: vm.parameters.endDate,\n searchByDate: vm.parameters.searchByDate,\n query: vm.parameters.query\n };\n api.report.changeReportFieldCategoryValue(request)\n .then(function (r) {\n ReportDataOrganizationService.replaceCategoryValue($scope, $state, $event, r)\n .then(function (answer) {\n if (answer) {\n vm.selectedTag = null;\n vm.tagOldValue = null;\n vm.tagNewValue = null;\n }\n ReportService.removeQuery(vm.report.id);\n vm.loaders.changingTagValue = false;\n });\n }, function (err) {\n console.log(err);\n vm.loaders.changingTagValue = false;\n });\n }\n\n function clickDeleteTagValue($event) {\n vm.loaders.deletingTagValue = true;\n var request = {\n reportId: vm.report.id,\n deleteOperation: true,\n fields: [{\n fieldName: vm.selectedTag.fieldName,\n oldFieldValue: vm.tagOldValue\n }],\n filter: vm.parameters.filter ? vm.parameters.filter : []\n };\n api.report.changeReportFieldCategoryValue(request)\n .then(function (r) {\n ReportDataOrganizationService.deleteCategoryValue($scope, $state, $event, r)\n .then(function (answer) {\n if (answer) {\n vm.selectedTag = null;\n vm.tagOldValue = null;\n vm.tagNewValue = null;\n }\n ReportService.removeQuery(vm.report.id);\n vm.loaders.deletingTagValue = false;\n });\n }, function (err) {\n console.log(err);\n vm.loaders.deletingTagValue = false;\n });\n }\n\n function findReportFields() {\n api.reportv2.reportField.findReportFields(vm.report.id)\n .then(function (r) {\n if (r && r.length > 0) {\n r = r.sort(function (a, b) {\n // Use toUpperCase() to ignore character casing\n var fieldTitleA = a.fieldTitle.toUpperCase();\n var fieldTitleB = b.fieldTitle.toUpperCase();\n var comparison = 0;\n if (fieldTitleA > fieldTitleB) {\n comparison = 1;\n } else if (fieldTitleA < fieldTitleB) {\n comparison = -1;\n }\n return comparison;\n })\n //vm.reportFields.allReportFields = r.filter(function (m) { return !(m.fieldName.startsWith(\"category_c\") && m.fieldName.endsWith(\"ratio_ds\")) });\n vm.reportFields.allReportFields = r;\n refreshReportFields();\n }\n }, function (err) {\n console.log(err);\n });\n }\n\n function refreshReportFields() {\n vm.reportFields.categories = vm.reportFields.allReportFields.filter(function (value) {\n return ReportService.isThisFieldType(300, value.fieldType);\n });\n vm.reportFields.tags = vm.reportFields.allReportFields.filter(function (value) {\n return value.fieldType == 500;\n });\n vm.reportFields.classCategories = vm.reportFields.allReportFields.filter(function (value) {\n return value.fieldType == 100 && value.fieldName.indexOf(\"_u_ss\") == -1;\n });\n vm.reportFields.sentiments = vm.reportFields.allReportFields.filter(function (value) {\n return value.fieldType == 200;\n });\n vm.reportFields.contents = vm.reportFields.allReportFields.filter(function (value) {\n return value.fieldType == 600;\n });\n vm.reportFields.manipulatable = vm.reportFields.allReportFields.filter(function (value) {\n return (value.fieldType == 100 && value.fieldName.indexOf(\"_u_ss\") == -1) || (value.fieldType == 500) || (value.fieldType == 400) || ReportService.isThisFieldType(300, value.fieldType) || (value.fieldType == 200) || (value.fieldType == 600);\n });\n }\n\n function removeReportField($event, reportField) {\n vm.loaders.removeReportFieldButton = true;\n ReportDataOrganizationService.deleteReportField($scope, $state, $event, reportField)\n .then(function (response) {\n if (response) {\n vm.reportFields.allReportFields = vm.reportFields.allReportFields.filter(function (rf) {\n return rf.id !== reportField.id;\n });\n vm.selectedReportField = {};\n }\n findReportFields();\n ReportService.removeQuery(vm.report.id);\n vm.loaders.removeReportFieldButton = false;\n }, function (err) {\n console.log(err);\n vm.loaders.removeReportFieldButton = false;\n findReportFields();\n })\n }\n\n function updateReportField($event, reportField) {\n vm.loaders.updateReportFieldButton = true;\n ReportDataOrganizationService.updateReportField($scope, $state, $event, reportField, 2, vm.report.id, vm.documentNickname)\n .then(function (response) {\n if (response) {\n vm.reportFields.allReportFields = vm.reportFields.allReportFields.filter(function (rf) {\n return rf.id !== reportField.id;\n });\n vm.reportFields.allReportFields.forEach(function (rf) {\n if(rf.dashboardFieldOrder === response.dashboardFieldOrder && rf.id !== response.id){\n rf.dashboardField = false;\n rf.dashboardFieldOrder = 0;\n }\n });\n vm.reportFields.allReportFields.push(response);\n }\n findReportFields();\n vm.loaders.updateReportFieldButton = false;\n ReportService.removeQuery(vm.report.id);\n }, function (err) {\n console.log(err);\n vm.loaders.updateReportFieldButton = false;\n findReportFields();\n })\n }\n\n function addReportField($event, reportField) {\n vm.loaders.addReportFieldButton = true;\n ReportDataOrganizationService.updateReportField($scope, $state, $event, reportField, 1, vm.report.id)\n .then(function (response) {\n if (response) {\n vm.reportFields.allReportFields = vm.reportFields.allReportFields.filter(function (rf) {\n return rf.id !== reportField.id;\n });\n vm.reportFields.allReportFields.forEach(function (rf) {\n if(rf.dashboardFieldOrder === response.dashboardFieldOrder && rf.id !== response.id){\n rf.dashboardField = false;\n rf.dashboardFieldOrder = 0;\n }\n });\n vm.reportFields.allReportFields.push(response);\n }\n findReportFields();\n vm.loaders.addReportFieldButton = false;\n ReportService.removeQuery(vm.report.id);\n }, function (err) {\n console.log(err);\n vm.loaders.addReportFieldButton = false;\n findReportFields();\n })\n }\n\n function buildToggler(navID) {\n return function () {\n // Component lookup should always be available since we are not using `ng-if`\n $mdSidenav(navID)\n .toggle()\n .then(function () {\n $log.debug(\"toggle \" + navID + \" is done\");\n });\n };\n }\n\n \n\n vm.search = function () {\n vm.loaders.search = true;\n vm.parameters.periods = null;\n setFacetParams(vm.parameters.facet);\n vm.filterChips = vm.filterChips.filter(function (item) {\n return item.type != 600;\n });\n if (vm.parameters.query && vm.parameters.query.length > 0) {\n var filterQueryChip = {\n key: \"content\",\n value: vm.parameters.query,\n type: 600,\n group: -1,\n operand: \"AND\",\n titleKey: \"Query\"\n }\n vm.filterChips.push(filterQueryChip);\n }\n \n vm.calculateFilteredFacets();\n var searchPromises = [api.report.search(vm.reportId, vm.parameters)];\n $q.all(searchPromises).then(function (results) {\n var afterResponse = results[0];\n vm.data.facets = afterResponse.facets;\n vm.data.count = afterResponse.count;\n vm.data.facetSize = 10;\n vm.data.localVariables = afterResponse.localVariables;\n vm.data.facets.forEach(function (f) {\n f[\"size\"] = 10;\n f[\"showMoreAndMore\"] = f.facetList && f.facetList.length >= 10 ? true : false;\n f[\"allFacets\"] = f.facetList && f.facetList.length > 10 ? true : false;\n });\n vm.dataCopy = JSON.parse(JSON.stringify(vm.data));\n vm.loaders.search = false;\n vm.selectedCategory = null;\n vm.categoryValues = null;\n vm.selectedCategoryValue = null;\n vm.selectedTag = null;\n }, function (err) {\n $log.error(err);\n vm.sideNavEnabled = true;\n })\n }\n\n vm.search();\n\n function setFacetParams(facets) {\n if (!facets) return;\n var facetList = [];\n for (var i = 0; i < facets.length; i++) {\n facetList.push({\n name: facets[i]\n })\n }\n vm.parameters.facet = facetList;\n }\n\n vm.toggleFacetFilter = function(child, item, $event) {\n //if (!vm.sideNavEnabled) return;\n\n if (ReportService.isThisFieldType(300, item.type) || item.type == 700 || item.type == 200) {\n var filterChip = {\n key: item.title,\n value: child.value,\n type: item.type,\n group: -1,\n operand: \"AND\",\n titleKey: item.title\n }\n vm.filterChips.push(filterChip);\n vm.calculateFilteredFacets();\n var foundedFilters = vm.filterChips.filter(function (chip) {\n return chip.key == item.title;\n });\n if (foundedFilters && foundedFilters.length > 1) {\n //var group = Math.floor(Math.random() * 10000) + 1;\n vm.groupCtrlCount = vm.groupCtrlCount + 1;\n foundedFilters.forEach(function (chip) {\n chip.group = vm.groupCtrlCount; //group;\n chip.operand = \"OR\";\n });\n }\n\n setNormalFacetFilters();\n }\n item.facetList = item.facetList.filter(function (c) { return c !== child; });\n vm.selectedCategory = null;\n vm.categoryValues = null;\n vm.selectedCategoryValue = null;\n vm.selectedTag = null;\n }\n\n function facetMoreAndMore(item) {\n if (item.allFacets) {\n vm.moreAndMoreCount += 1;\n item.size = item.size + 10;\n if (item.facetList.length < item.size) item.showMoreAndMore = false;\n return;\n }\n\n vm.moreAndMoreLoading = true;\n vm.moreAndMoreCount += 1;\n item.size = item.size + 10;\n\n api.report.moreAndMoreSearch(vm.reportId, item.key, item.size - 10, vm.parameters)\n .then(function (response) {\n if (response.length < 10) item.showMoreAndMore = false;\n item.facetList = item.facetList.concat(response);\n vm.moreAndMoreLoading = false;\n }, function (err) {\n $log.error(err);\n })\n\n }\n\n function setNormalFacetFilters() {\n var filters = ReportQueryParserService.setNormalFacetFilters(vm.filterChips);\n if (filters && filters.length > 0) {\n vm.parameters.filter = filters;\n } else {\n vm.parameters.filter = null;\n }\n }\n\n function sidenavQueryFunc() {\n vm.data = JSON.parse(JSON.stringify(vm.dataCopy));\n for (var i = 0; i < vm.dataCopy.facets.length; i++) {\n vm.data.facets[i].facetList = [];\n for (var j = 0; j < vm.dataCopy.facets[i].facetList.length; j++) {\n if (vm.dataCopy.facets[i].facetList[j].value.toLowerCase().includes(vm.sidenavQuery.toLowerCase())) {\n vm.data.facets[i].facetList.push(vm.dataCopy.facets[i].facetList[j]);\n }\n }\n if (vm.data.facets[i].title.toLowerCase().includes(vm.sidenavQuery.toLowerCase())) {\n vm.data.facets[i] = JSON.parse(JSON.stringify(vm.dataCopy.facets[i]));\n }\n }\n }\n\n function removeFacetFilter(item) {\n vm.filterChips = vm.filterChips.filter(function (f) {\n return f != item;\n });\n\n vm.data = {\n facets: []\n };\n\n if (vm.filteredFacets[item.key].length > 1) {\n for (var i = 0; i < vm.filteredFacets[item.key].length; i++) {\n if (vm.filteredFacets[item.key][i].value == item.value) {\n vm.filteredFacets[item.key].splice(i, 1);\n }\n }\n } else {\n delete vm.filteredFacets[item.key];\n }\n\n if (item.type == 600) {\n vm.parameters.query = null;\n }\n if (item.level && item.level > 0) {\n var removingFilters = vm.filterChips.filter(function (f) {\n return f.level > item.level;\n });\n if (removingFilters && removingFilters.length > 0) {\n removingFilters.forEach(function (r) {\n vm.filterChips = vm.filterChips.filter(function (f) {\n return f != r;\n });\n })\n }\n }\n\n vm.search();\n setNormalFacetFilters();\n vm.selectedCategory = null;\n vm.categoryValues = null;\n vm.selectedCategoryValue = null;\n vm.selectedTag = null;\n\n }\n\n function resetFilters() {\n vm.filteredFacets = {};\n vm.filterChips = [];\n vm.parameters.query = null;\n vm.data = {\n facets: []\n };\n vm.selectedCategory = null;\n vm.categoryValues = null;\n vm.selectedCategoryValue = null;\n vm.selectedTag = null;\n vm.search();\n setNormalFacetFilters();\n }\n\n function showSimpleToast(text) {\n $mdToast.show($mdToast.simple().textContent(text));\n }\n\n function init() {\n setDate();\n findReportFields()\n }\n init();\n\n\n\n function changeDate() {\n vm.parameters.startDate = vm.afterDatePicker.startDate.toISOString().split('.')[0] + \"Z\";\n vm.parameters.endDate = vm.afterDatePicker.endDate.toISOString().split('.')[0] + \"Z\";\n if (vm.parameters.startDate === vm.parameters.endDate) {\n vm.parameters.endDate = moment(vm.parameters.endDate).add(1, 'days').toDate().toISOString().split('.')[0] + \"Z\"\n }\n vm.search();\n refreshDatePickersFormat();\n }\n\n function clearDate() {\n vm.afterDatePicker = {\n startDate: null,\n endDate: null\n };\n vm.parameters.startDate = null;\n vm.parameters.endDate = null;\n vm.datePicker = {};\n vm.search();\n $('#afterreportrange').val('Tarih');\n $('#afterreportrange2').val('Tarih');\n }\n\n function setDate() {\n vm.afterDatePicker = {\n startDate: vm.report.dates && vm.report.dates.startDate ? moment(vm.report.dates.startDate).add(-1, 'days').toDate() : null,\n //endDate: vm.report.dates && vm.report.dates.endDate ? moment(vm.report.dates.endDate).add(1, 'days').toDate() : null\n endDate: vm.report.dates && vm.report.dates.endDate ? moment(vm.report.dates.endDate).startOf('day').add(1, 'days').add(-1, 'seconds').toDate() : null\n };\n if (vm.afterDatePicker && vm.afterDatePicker.startDate && vm.afterDatePicker.endDate) {\n vm.parameters.startDate = vm.afterDatePicker.startDate.toISOString().split('.')[0] + \"Z\";\n vm.parameters.endDate = vm.afterDatePicker.endDate.toISOString().split('.')[0] + \"Z\";\n }\n }\n\n function createDatePickers() {\n if (!vm.isDatePickerCreatorStarted) {\n vm.isDatePickerCreatorStarted = true;\n if ($('#afterreportrange').length || $('#afterreportrange2').length) {\n if (vm.afterDatePicker && vm.afterDatePicker.startDate && vm.afterDatePicker.endDate) {\n createDateComponentTurkish('#afterreportrange', vm.afterDatePicker.startDate, vm.afterDatePicker.endDate);\n createDateComponentEnglish('#afterreportrange2', vm.afterDatePicker.startDate, vm.afterDatePicker.endDate);\n } else {\n createDateComponentTurkish('#afterreportrange', null, null);\n createDateComponentEnglish('#afterreportrange2', null, null);\n }\n\n if (vm.afterDatePicker.startDate && vm.afterDatePicker.endDate) {\n $('#afterreportrange').val(moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY'));\n $('#afterreportrange2').val(moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY'));\n } else {\n $('#afterreportrange').val('Tarih');\n $('#afterreportrange2').val('Tarih');\n }\n\n if ($('#afterreportrange').length) {\n\n $('input[id=\"afterreportrange\"]').on('apply.daterangepicker', function (ev, picker) {\n vm.afterDatePicker = {\n startDate: picker.startDate.toDate(),\n endDate: picker.endDate.toDate()\n };\n //addTemplateReportCookie(\"afterDate\", vm.afterDatePicker);\n changeDate();\n });\n }\n\n if ($('#afterreportrange2').length) {\n\n $('input[id=\"afterreportrange2\"]').on('apply.daterangepicker', function (ev, picker) {\n vm.afterDatePicker = {\n startDate: picker.startDate.toDate(),\n endDate: picker.endDate.toDate()\n };\n //addTemplateReportCookie(\"afterDate\", vm.afterDatePicker);\n changeDate();\n });\n }\n vm.dateTypes = [{\n id: 1,\n name: $translate.instant('REPORT.CONTENT_DATE')\n },\n {\n id: 2,\n name: $translate.instant('SHARED.ORDER.UPDATED_DATE')\n },\n {\n id: 3,\n name: $translate.instant('SHARED.ORDER.CREATED_DATE')\n }]\n var l = \"
\" +\n \"\" +\n \"
\";\n $(\".drp-buttons\").prepend($compile(l)($scope));\n \n vm.parameters.searchByDate = vm.paramSearchByDate;\n\n }\n vm.isDatePickerCreatorStarted = false;\n }\n }\n\n function refreshDatePickersFormat() {\n if (vm.afterDatePicker.startDate && vm.afterDatePicker.endDate) {\n $('#afterreportrange').val(moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY'));\n $('#afterreportrange2').val(moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY'));\n }\n else {\n $('#afterreportrange').val('Tarih');\n $('#afterreportrange2').val('Tarih');\n }\n\n }\n\n function createDateComponentTurkish(id, startDate, endDate) {\n $(id).daterangepicker({\n startDate: moment(startDate).toDate(),\n endDate: moment(endDate).toDate(),\n ranges: {\n 'Bugün': [moment(), moment()],\n 'Dün': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],\n 'Son 7 Gün': [moment().subtract(6, 'days'), moment()],\n 'Son 30 Gün': [moment().subtract(29, 'days'), moment()],\n 'Bu Ay': [moment().startOf('month'), moment().endOf('month')],\n 'Geçen Ay': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')],\n 'Q1 (Bu Yıl)': [moment(new Date(moment().year(), 0, 1)), moment(new Date(moment().year(), 2, 31))],\n 'Q2 (Bu Yıl)': [moment(new Date(moment().year(), 3, 1)), moment(new Date(moment().year(), 5, 30))],\n 'Q3 (Bu Yıl)': [moment(new Date(moment().year(), 6, 1)), moment(new Date(moment().year(), 8, 30))],\n 'Q4 (Bu Yıl)': [moment(new Date(moment().year(), 9, 1)), moment(new Date(moment().year(), 11, 31))],\n 'Q1 (Geçen Yıl)': [moment(new Date(moment().year() - 1, 0, 1)), moment(new Date(moment().year() - 1, 2, 31))],\n 'Q2 (Geçen Yıl)': [moment(new Date(moment().year() - 1, 3, 1)), moment(new Date(moment().year() - 1, 5, 30))],\n 'Q3 (Geçen Yıl)': [moment(new Date(moment().year() - 1, 6, 1)), moment(new Date(moment().year() - 1, 8, 30))],\n 'Q4 (Geçen Yıl)': [moment(new Date(moment().year() - 1, 9, 1)), moment(new Date(moment().year() - 1, 11, 31))]\n },\n alwaysShowCalendars: true,\n //autoUpdateInput: false,\n //ranges: createQuarters(),\n locale: {\n format: 'DD/MM/YYYY',\n applyLabel: \"Uygula\",\n cancelLabel: \"Vazgeç\",\n \"fromLabel\": \"Dan\",\n \"toLabel\": \"a\",\n \"customRangeLabel\": \"Seç\",\n \"daysOfWeek\": [\n \"Pz\",\n \"Pt\",\n \"Sl\",\n \"Çr\",\n \"Pr\",\n \"Cm\",\n \"Ct\"\n ],\n \"monthNames\": [\n \"Ocak\",\n \"Şubat\",\n \"Mart\",\n \"Nisan\",\n \"Mayıs\",\n \"Haziran\",\n \"Temmuz\",\n \"Ağustos\",\n \"Eylül\",\n \"Ekim\",\n \"Kasım\",\n \"Aralık\"\n ],\n \"firstDay\": 1\n }\n //ranges: createQuarters()\n }, refreshDatePickersFormat);\n }\n\n function createDateComponentEnglish(id, startDate, endDate) {\n $(id).daterangepicker({\n startDate: moment(startDate).toDate(),\n endDate: moment(endDate).toDate(),\n ranges: {\n 'Today': [moment(), moment()],\n 'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],\n 'Last 7 Days': [moment().subtract(6, 'days'), moment()],\n 'Last 30 Days': [moment().subtract(29, 'days'), moment()],\n 'This Month': [moment().startOf('month'), moment().endOf('month')],\n 'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')],\n 'Q1 (This Year)': [moment(new Date(moment().year(), 0, 1)), moment(new Date(moment().year(), 2, 31))],\n 'Q2 (This Year)': [moment(new Date(moment().year(), 3, 1)), moment(new Date(moment().year(), 5, 30))],\n 'Q3 (This Year)': [moment(new Date(moment().year(), 6, 1)), moment(new Date(moment().year(), 8, 30))],\n 'Q4 (This Year)': [moment(new Date(moment().year(), 9, 1)), moment(new Date(moment().year(), 11, 31))],\n 'Q1 (Last Year)': [moment(new Date(moment().year() - 1, 0, 1)), moment(new Date(moment().year() - 1, 2, 31))],\n 'Q2 (Last Year)': [moment(new Date(moment().year() - 1, 3, 1)), moment(new Date(moment().year() - 1, 5, 30))],\n 'Q3 (Last Year)': [moment(new Date(moment().year() - 1, 6, 1)), moment(new Date(moment().year() - 1, 8, 30))],\n 'Q4 (Last Year)': [moment(new Date(moment().year() - 1, 9, 1)), moment(new Date(moment().year() - 1, 11, 31))]\n },\n alwaysShowCalendars: true,\n //autoUpdateInput: false,\n //ranges: createQuarters(),\n locale: {\n format: 'DD/MM/YYYY',\n applyLabel: \"Apply\",\n cancelLabel: \"Cancel\",\n \"fromLabel\": \"from\",\n \"toLabel\": \"to\",\n \"customRangeLabel\": \"Choose\",\n \"daysOfWeek\": [\n \"Sn\",\n \"Mn\",\n \"Tu\",\n \"Wn\",\n \"Th\",\n \"Fr\",\n \"St\"\n ],\n \"monthNames\": [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\"\n ],\n \"firstDay\": 1\n }\n //ranges: createQuarters()\n }, refreshDatePickersFormat);\n }\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.report')\n .controller('ReportDashboardTemplate5', ReportDashboardTemplate5);\n\n /** @ngInject */\n function ReportDashboardTemplate5($rootScope, $scope, $state, $translate, $window,\n $stateParams, $log, api, $q, ReportService, ReportQueryParserService, ReportTemplate1_2ChartParserService, ReportTemplate1ChartParserService, $$report, $location, $mdSidenav, base64, user, toastService, $settings, $utils, appSettings, $compile) {\n\n var vm = this;\n vm.translate = $translate;\n if (!$location.search().query && ReportService.getQuery($$report.id) != null) {\n $location.search('query', ReportService.getQuery($$report.id).query);\n }\n moment.locale('tr');\n vm.reportSettings = $$report.reportSettings;\n vm.language = $translate.use();\n setInterval(function () { vm.language = $translate.use(); }, 100);\n vm.languageDatePicker = $translate.use() === \"tr\" ? 1 : 2;\n \n vm.paramSearchByDate = $stateParams.searchByDate == undefined ? 1 : $stateParams.searchByDate;\n vm.parameters = {\n query: null,\n date: null,\n startDate: null,\n endDate: null,\n searchByDate: vm.paramSearchByDate,\n sort: null,\n gap: null,\n row: 10,\n start: 0,\n filter: [],\n category: [],\n facet: [],\n feedback: null,\n assignment: null,\n highlight: false,\n defaultFacet: true,\n patternFilter: [],\n showSimilar: false\n };\n vm.data = {\n facets: []\n };\n vm.filterChips = ReportService.getFilterChips(vm.reportId, vm.reportSettings.commonSettings.filterChips);\n vm.patternFilters = ReportService.getPatternFilters(vm.reportId);\n vm.afterDatePicker = {\n startDate: null,\n endDate: null\n };\n\n vm.reportFields = $$report.reportFields;\n vm.settings = $settings;\n vm.reportModules = $$report.reportModules;\n vm.reportModuleIds = vm.reportModules.map(function (k) {\n return k.moduleId;\n });\n vm.classificationModules = vm.reportModules.filter(function (m) { return m.moduleTypeId == 1 });\n vm.classificationModulesModules = [];\n vm.classificationModules.forEach(function (m) { return vm.classificationModulesModules.push(m.module) });\n vm.activeSources = appSettings.activeSources;\n vm.queueActive = appSettings.queueActive;\n vm.selectedDashboardTemplate = $stateParams.selectedDashboard ? $stateParams.selectedDashboard : $$report.selectedDashboard ? $$report.selectedDashboard : $$report.dashboardTemplate ? $$report.dashboardTemplate : 1;\n vm.hasSentimentModule = vm.reportModules.filter(function (r) { return r.moduleTypeId == 5 | r.moduleTypeId == 7; }).length > 0;\n vm.report = $$report;\n vm.reportId = $stateParams.id;\n vm.categoryAlieses = [];\n vm.userSettings = $settings.reportSettingsList ? $settings.reportSettingsList.filter(function (r) { return r.reportId == vm.report.id; })[0] : null;\n \n vm.categories = $$report.moduleCategories;\n vm.dashboardClassificationModule = $stateParams.dashboardClassificationModule;\n vm.noTrainedModule = !($$report.hasTrainedModule);\n vm.user = user;\n vm.dashboardModuleId = $stateParams.dashboardModuleId;\n vm.activeDashboardTemplates = vm.report.activeTemplates;\n vm.activeTemplateSize = 0;\n vm.categoryOperationMode = 0;\n Object.keys(vm.activeDashboardTemplates).forEach(function (key) {\n if (vm.activeDashboardTemplates[key]) vm.activeTemplateSize = vm.activeTemplateSize + 1;\n })\n vm.rightBottomSettingsButton = {\n isOpen: false,\n selectedMode: 'md-scale'\n };\n vm.changeDashboard = changeDashboard;\n vm.setPatternFilter = setPatternFilter;\n vm.removePatternFilter = removePatternFilter;\n\n //methods bookmarks\n vm.saveBookmark = saveBookmark;\n vm.deleteBookmark = deleteBookmark;\n vm.goToBookmark = goToBookmark;\n\n //methods date\n vm.changeDate = changeDate;\n vm.clearDate = clearDate;\n\n vm.search = search;\n vm.sidenavQuery = null;\n vm.sidenavQueryFunc = sidenavQueryFunc;\n vm.toggleFacetFilter = toggleFacetFilter;\n vm.removeFacetFilter = removeFacetFilter;\n vm.resetFilters = resetFilters;\n vm.exportReport = exportReport;\n vm.removeDocuments = removeDocuments;\n vm.replicateReport = replicateReport;\n vm.reevaluateReport = reevaluateReport;\n vm.deleteReport = deleteReport;\n vm.uploadReportFeedback = uploadReportFeedback;\n\n vm.ctrlKeyPressing = false;\n vm.bookmarkSidenav = buildToggler('right');\n vm.filterSidenav = buildToggler('main-sidenav');\n vm.moreAndMoreCount = 1;\n\n vm.selectedAiRateChart = 1;\n vm.selectedAproveRateChart = 1;\n vm.groupCtrlCount = 5000;\n \n\n function changeDashboard(oldDashboard) {\n if (vm.selectedDashboardTemplate != oldDashboard) {\n $state.current.params[\"selectedDashboard\"] = vm.selectedDashboardTemplate;\n //addTemplateReportCookie('template', vm.selectedDashboardTemplate);\n $settings.saveUserSettings(\"template\", vm.selectedDashboardTemplate, vm.report.id);\n $state.go($state.current, { selectedDashboard: vm.selectedDashboardTemplate }, { reload: true })\n }\n }\n\n vm.getFilteredFacetTitle = function (title) {\n if (!vm.response) return title;\n var reportField = vm.reportFields.filter(function (a) {\n return a.fieldTitle == title;\n })[0]\n if (reportField) {\n var alias = vm.response.localVariables.filter(function (k) {\n return k.fieldName == reportField.fieldName;\n })\n if (alias[0] != null && alias[0].alias != null) {\n if ($translate.use() == \"tr\" && alias[0].alias.tr != null) return alias[0].alias.tr;\n else if ($translate.use() == \"en\" && alias[0].alias.en != null) return alias[0].alias.en;\n else return title;\n }\n }\n return title;\n }\n\n vm.getFacetValueAlias = function (title, value) {\n if (String(value).startsWith(\"id:\\\"\")) {\n var values = value.split(\"_\");\n if (values[1] != null) {\n return \"id:\\\"\" + values[1];\n }\n }\n if (vm.dataCopy == null) return value;\n var reportField = vm.reportFields.filter(function (a) {\n return a.fieldTitle == title;\n })[0]\n if (reportField) {\n var localVariable = vm.dataCopy.localVariables.filter(function (k) {\n return k.fieldName == reportField.fieldName;\n })\n\n if (localVariable[0] != null && localVariable[0].valueAliases != null) {\n var valueLocalVariable = localVariable[0].valueAliases.filter(function (k) { return k.itemValue == value.toString(); })\n\n if (valueLocalVariable[0] != null) {\n if ($translate.use() == \"tr\" && valueLocalVariable[0].tr != null) return valueLocalVariable[0].tr;\n else if ($translate.use() == \"en\" && valueLocalVariable[0].en != null) return valueLocalVariable[0].en;\n else return value;\n }\n }\n }\n return value;\n }\n\n vm.getCategoryAlias = function (child) {\n var cat = child.category;\n if (!cat) return child.value;\n var title = cat.name;\n if (cat.localVariables) {\n var localVariable = cat.localVariables.filter(function (k) { return $translate.use() == k.language; })[0];\n if (localVariable) title = localVariable.value;\n }\n return title;\n }\n\n vm.printPage = function () {\n window.print();\n }\n\n vm.getCategoryChipAlias = function (chip) {\n var title = chip.value;\n var category = getChipCat(chip);\n if (category && category.localVariables) {\n var localVariable = category.localVariables.filter(function (k) { return $translate.use() == k.language; })[0];\n if (localVariable) title = localVariable.value;\n }\n return title;\n }\n\n function getChipCat(chip) {\n var category;\n var categories = vm.categories.filter(function (k) { return k.name == chip.value; });\n if (chip.parentString) {\n category = categories.filter(function (k) { return k.parentModuleCategory != null && k.parentModuleCategory.name == chip.titleKey; })[0];\n } else {\n category = categories.filter(function (k) { return k.parentModuleCategory == null })[0]\n }\n return category;\n }\n\n vm.exportExcel = function (type, tableName, name, fn, dl) {\n var elt = document.getElementById(tableName);\n var wb = XLSX.utils.table_to_book(elt, { sheet: \"Sheet JS\" });\n return dl ?\n XLSX.write(wb, { bookType: type, bookSST: true, type: 'base64' }) :\n XLSX.writeFile(wb, fn || (name + \".\" + (type || 'xlsx')));\n }\n\n function getCategoryChangeOperationResults() {\n if (vm.queueActive) {\n api.report.operation.categoryChangeOperationResults(vm.reportId)\n .then(function (res) {\n vm.categoryChangeOperationResults = res;\n var lastResultDate = vm.categoryChangeOperationResults.map(function (e) { return e.createDate; }).sort().reverse()[0]\n var lastResult = vm.categoryChangeOperationResults.filter(function (m) { return m.createDate == lastResultDate })[0]\n vm.selectedCategoryChangeModule = lastResult ? vm.classificationModulesModules.filter(function (m) { return m.id == lastResult.moduleId })[0] : null;\n vm.setAvailableOperationResults();\n if (lastResult) {\n var date = new Date(lastResult.startDate);\n vm.selectedCategoryChangeYear = date.getFullYear();\n vm.selectedCategoryChangeMonth = date.getMonth();\n }\n vm.selectAvailableYear();\n vm.setCategoryChangeChart();\n }, function (response) {\n console.log(response);\n })\n }\n\n }\n\n vm.categoryChangeOperationTitles = vm.hasSentimentModule ? [\"TOTAL\", \"NEGATIVE\", \"NEUTRAL\", \"POSITIVE\"] : [\"TOTAL\"];\n vm.categoryChangeOperationSuccessTitles = [\"sum\", \"wf1Total\", \"wprecTotal\", \"wrecTotal\"];\n vm.operationSentiments = vm.hasSentimentModule ? [\"total\", \"negative\", \"neutral\", \"positive\"] : [\"total\"];\n vm.categoryChangeOperationRateTitles = [\"precision\", \"recall\", \"f1\"];\n\n vm.getCategoryChangeOperationValue = function (cat, group, sentiment) {\n sentiment = sentiment.toLowerCase();\n var filterModuleAndDate = vm.categoryChangeOperationResults.filter(function (m) {\n var date = new Date(m.startDate);\n return m.moduleId == vm.selectedCategoryChangeModule.id && date.getFullYear() == vm.selectedCategoryChangeYear && date.getMonth() == vm.selectedCategoryChangeMonth; //m.startDate == vm.selectedCategoryChangeDate\n })[0]\n if (!filterModuleAndDate) return \"-\"\n var groupFilter = filterModuleAndDate[group];\n var catFilter = groupFilter.filter(function (m) { return m.categoryName == cat.name })[0];\n return catFilter ? vm.categoryOperationMode == 0 ? catFilter[sentiment].toFixed(2) : catFilter[sentiment] : \"-\";\n }\n\n vm.getCategoryChangeOperationScoreValue = function (cat, item) {\n var filterModuleAndDate = vm.categoryChangeOperationResults.filter(function (m) {\n var date = new Date(m.startDate);\n return m.moduleId == vm.selectedCategoryChangeModule.id && date.getFullYear() == vm.selectedCategoryChangeYear && date.getMonth() == vm.selectedCategoryChangeMonth; //m.startDate == vm.selectedCategoryChangeDate\n })[0]\n if (!filterModuleAndDate) return \"-\"\n var groupFilter = filterModuleAndDate[\"scores\"];\n var catFilter = groupFilter.filter(function (m) { return m.categoryName == cat.name })[0];\n return catFilter ? catFilter[item].toFixed(2) : \"-\";\n }\n\n vm.setAvailableOperationResults = function () {\n vm.availableOperationResults = vm.categoryChangeOperationResults.filter(function (m) { return m.moduleId == vm.selectedCategoryChangeModule.id });\n vm.availableYears = [];\n vm.availableMonths = [];\n vm.selectedCategoryChangeMonth = null;\n vm.selectedCategoryChangeYear = null;\n vm.availableOperationResults.forEach(function (m) {\n var date = new Date(m.startDate);\n if (!vm.availableYears.includes(date.getFullYear())) {\n vm.availableYears.push(date.getFullYear());\n }\n })\n vm.availableYears.sort(function (a, b) { return a - b });\n }\n\n vm.selectAvailableYear = function () {\n vm.availableMonths = [];\n vm.availableOperationResults.forEach(function (m) {\n var date = new Date(m.startDate);\n if (date.getFullYear() == vm.selectedCategoryChangeYear && !vm.availableMonths.includes(date.getMonth())) {\n vm.availableMonths.push(date.getMonth());\n }\n })\n vm.availableMonths.sort(function (a, b) { return a - b });\n }\n\n vm.setCategoryChangeChart = function () {\n if (!vm.selectedCategoryChangeModule) return;\n vm.categoryChangeOperationCats = vm.categories.filter(function (m) { return m.moduleId == vm.selectedCategoryChangeModule.id && m.parent == null });\n\n var filterModuleAndDate = vm.categoryChangeOperationResults.filter(function (m) {\n var date = new Date(m.startDate);\n return m.moduleId == vm.selectedCategoryChangeModule.id && date.getFullYear() == vm.selectedCategoryChangeYear && date.getMonth() == vm.selectedCategoryChangeMonth; //m.startDate == vm.selectedCategoryChangeDate\n })[0]\n vm.totalResult = {};\n if (vm.categoryOperationMode == 0) {\n for (var i = 0; i < vm.categoryChangeOperationRateTitles.length; i++) {\n vm.totalResult[vm.categoryChangeOperationRateTitles[i]] = {};\n for (var j = 0; j < vm.operationSentiments.length; j++) {\n vm.totalResult[vm.categoryChangeOperationRateTitles[i]][vm.operationSentiments[j]] = 0;\n\n if (vm.categoryChangeOperationRateTitles[i] != \"f1\") {\n var groupFilter = filterModuleAndDate[vm.categoryChangeOperationRateTitles[i]];\n var total = 0;\n var count = 0;\n for (var m = 0; m < groupFilter.length; m++) {\n if (groupFilter[m][vm.operationSentiments[j]] && groupFilter[m][vm.operationSentiments[j]] != 0) {\n total += groupFilter[m][vm.operationSentiments[j]];\n count += 1;\n }\n }\n total = count != 0 ? total / count : 0;\n vm.totalResult[vm.categoryChangeOperationRateTitles[i]][vm.operationSentiments[j]] = total;\n } else {\n var precision = vm.totalResult[\"precision\"][vm.operationSentiments[j]];\n var recall = vm.totalResult[\"recall\"][vm.operationSentiments[j]];\n vm.totalResult[vm.categoryChangeOperationRateTitles[i]][vm.operationSentiments[j]] = (precision + recall) != 0 ? (2 * precision * recall) / (precision + recall) : 0;\n }\n }\n }\n }\n var sumSum = 0;\n var sumWF1 = 0;\n var sumWPrec = 0;\n var sumWRec = 0;\n filterModuleAndDate[\"scores\"].forEach(function (k) {\n sumSum = sumSum + k.sum;\n sumWF1 = sumWF1 + k.wf1Total;\n sumWPrec = sumWPrec + k.wprecTotal;\n sumWRec = sumWRec + k.wrecTotal;\n })\n vm.categoryChangeOperationSuccessTitles = [\"sum\", \"wf1Total\", \"wprecTotal\", \"wrecTotal\"];\n vm.totalResult[\"sum\"] = sumSum;\n vm.totalResult[\"wf1Total\"] = sumSum != 0 ? sumWF1 / sumSum : 0;\n vm.totalResult[\"wprecTotal\"] = sumSum != 0 ? sumWPrec / sumSum : 0;\n vm.totalResult[\"wrecTotal\"] = sumSum != 0 ? sumWRec / sumSum : 0;\n }\n\n function generateYearsAndMonths() {\n var years = [];\n var months = [];\n var date = new Date();\n for (var i = date.getFullYear(); i > 1969; i--) {\n years.push(i);\n }\n for (var i = 12; i > 0; i--) {\n months.push(i);\n }\n vm.years = years;\n vm.months = months;\n }\n\n vm.getAttributeAlias = function (tag) {\n if (tag.alias) {\n if ($translate.use() == \"tr\" && tag.alias.tr) return tag.alias.tr;\n if ($translate.use() == \"en\" && tag.alias.en) return tag.alias.en;\n }\n return vm.getFilteredFacetTitle(tag.title);\n }\n\n vm.calculateCategoryChangeSuccessRate = function () {\n if (!vm.categorySuccessRateOperation.year || !vm.categorySuccessRateOperation.month || !vm.categorySuccessRateOperation.module) {\n var toast = $mdToast.simple()\n .textContent($translate.instant(\"REPORT.DASHBOARD_TEMPLATE_4.SUCCESS_RATE_CHART.ERROR.FILL_THE_BLANKS\"))\n .action('OK')\n .position('center center');\n\n $mdToast.show(toast);\n return;\n }\n var d = new Date(vm.categorySuccessRateOperation.year, vm.categorySuccessRateOperation.month - 1, 1, 0, 0, 0, 0);\n var body = {\n moduleId: vm.categorySuccessRateOperation.module.id,\n startDate: d.toISOString().split('.')[0] + \"Z\"\n }\n vm.successRateLoading = true;\n api.report.operation.saveCategorySuccessRates(vm.report.id, body)\n .then(function (response) {\n getCategoryChangeOperationResults();\n vm.successRateLoading = false;\n },\n function (response) {\n $log.error(response);\n });\n\n }\n\n function getIsFlatModeActive() {\n if (vm.activeSources.includes('WEBSOURCE')) {\n api.source.getReportTemplates(vm.report.id, 0, 1)\n .then(function (response) {\n if (response.content.length > 0) {\n vm.isFlatModeActive = true;\n }\n },\n function (response) {\n $log.error(response);\n });\n }\n }\n\n function uploadReportFeedback($event) {\n ReportService.uploadFeedbackPrompt($scope, $event, vm.report.id);\n }\n\n vm.downloadAmchart = function (id, element, elementt, name) {\n if (!document.getElementById(id) || (document.getElementById(id) && !document.getElementById(id).children[element])) return;\n if (document.getElementById(id).children[element].children[elementt].tagName != \"svg\") return;\n document.getElementById(id).children[element].children[elementt].style.fontSize = \"13px\";\n document.getElementById(id).children[element].children[elementt].style.fontFamily = \"'Roboto', 'Helvetica Neue', 'Arial', sans-serif\";\n saveSvgAsPng(document.getElementById(id).children[element].children[elementt], name);\n $utils.saveAudit(vm.reportId, \"REPORT\", \"DOWNLOAD_CHART_IMAGE\", vm.report.name + ' / ' + name);\n $utils.googleAnalyticsSetAction(\"Report\", \"Download Chart Image\", vm.report.name + ' / ' + name);\n }\n\n function setFacetParams(facets) {\n if (!facets) return;\n var facetList = [];\n for (var i = 0; i < facets.length; i++) {\n facetList.push({\n name: facets[i]\n })\n }\n vm.parameters.facet = facetList;\n }\n\n vm.exportExcel = function (type, tableName, name, fn, dl) {\n var elt = document.getElementById(tableName);\n var wb = XLSX.utils.table_to_book(elt, { sheet: \"Sheet JS\" });\n return dl ?\n XLSX.write(wb, { bookType: type, bookSST: true, type: 'base64' }) :\n XLSX.writeFile(wb, fn || (name + \".\" + (type || 'xlsx')));\n }\n\n function sidenavQueryFunc() {\n if (vm.sidenavQuery == \"\") {\n vm.data = JSON.parse(JSON.stringify(vm.dataCopy));\n vm.parameters.facetSearch = null;\n } else {\n vm.parameters.facetSearch = vm.sidenavQuery;\n vm.sidenavQueryFuncLoading = true;\n api.report.search(vm.report.id, vm.parameters)\n .then(function (response) {\n vm.data.facets = response.facets;\n vm.sidenavQueryFuncLoading = false;\n vm.data.facetSize = 10;\n vm.data.facets.forEach(function (f) {\n f[\"size\"] = 10;\n f[\"showMoreAndMore\"] = f.facetList && f.facetList.length >= 10 ? true : false;\n f[\"allFacets\"] = f.facetList && f.facetList.length > 10 ? true : false;\n });\n\n }, function (err) {\n $log.error(err);\n })\n }\n }\n\n function openSaveDefaultReportFiltersDialog($event) {\n ReportService.showSaveReportFiltersDialog($scope, $event, vm.filterChips, vm.report.id);\n }\n\n vm.filteredFacets = {};\n\n function setFilteredFacets() {\n vm.filteredFacets = {};\n for (var i = 0; i < vm.filterChips.length; i++) {\n if (vm.filteredFacets[vm.filterChips[i].titleKey] != null) {\n vm.filteredFacets[vm.filterChips[i].titleKey].push(vm.filterChips[i]);\n } else {\n var childs = [];\n childs.push(vm.filterChips[i]);\n vm.filteredFacets[vm.filterChips[i].titleKey] = childs;\n }\n }\n }\n\n function toggleFacetFilter(child, item, $event) {\n if (!vm.sideNavEnabled) return;\n /*\n if (JSON.stringify(vm.filterChips).length + JSON.stringify(ReportQueryParserService.setNormalFacetFilters(vm.filterChips)).length > 1700) {\n toastService.serverError($translate.instant('REPORT.ERRORS.FILTER_LIMIT'))\n return;\n }*/\n if (ReportService.isThisFieldType(300, item.type) || item.type == 700 || item.type == 800 || item.type == 200) {\n if (!vm.ctrlKeyPressing) {\n //var keyValue = generateKeyValuePairFilter(child.fieldName, child.value);\n var filterChip = {\n key: item.title,\n value: child.value,\n type: item.type,\n group: -1,\n operand: \"AND\",\n titleKey: item.title\n }\n vm.filterChips.push(filterChip);\n\n var foundedFilters = vm.filterChips.filter(function (chip) {\n return chip.key == item.title;\n });\n if (foundedFilters && foundedFilters.length > 1) {\n //var group = Math.floor(Math.random() * 10000) + 1;\n vm.groupCtrlCount = vm.groupCtrlCount + 1;\n foundedFilters.forEach(function (chip) {\n chip.group = vm.groupCtrlCount; //group;\n chip.operand = \"OR\";\n });\n }\n //search();\n\n // searchDateRanges();\n }\n if (vm.ctrlKeyPressing) {\n var filterCtrlChip = {\n key: item.title,\n value: child.value,\n type: item.type,\n group: vm.groupCtrlCount,\n operand: \"OR\",\n titleKey: item.title\n }\n vm.filterChips.push(filterCtrlChip);\n }\n item.facetList = item.facetList.filter(function (c) { return c !== child; });\n }\n\n if (item.type >= 100 && item.type < 200) {\n if (!vm.ctrlKeyPressing) {\n vm.sideNavEnabled = false;\n var level = null;\n if (item.key === vm.dashboardModuleId) {\n level = findChartLevel();\n }\n if (child.parentString) {\n var foundedSameLevelFilter = vm.filterChips.filter(function (chip) { return chip.key == item.key && chip.parentString && chip.parentString.split(\"->\").length == child.parentString.split(\"->\").length; })[0];\n if (foundedSameLevelFilter)\n level = level - 1;\n } else {\n var foundedSameLevelFilter = vm.filterChips.filter(function (chip) { return chip.key == item.key && typeof chip.parentString === 'undefined' && typeof child.parentString === 'undefined'; })[0];\n if (foundedSameLevelFilter)\n level = level - 1;\n }\n var catFilterChip = {\n key: item.key,\n value: child.value,\n type: 100,\n group: -1,\n operand: \"AND\",\n parentString: child.parentString,\n titleKey: item.title,\n level: level,\n aspectSentiment: child.sentimentFilter ? child.sentimentFilter : \"\"\n }\n vm.filterChips.push(catFilterChip);\n search();\n } else {\n var catCtrlFilterChip = {\n key: item.key,\n value: child.value,\n type: 100,\n group: vm.groupCtrlCount,\n operand: \"OR\",\n parentString: child.parentString,\n titleKey: item.title\n }\n vm.filterChips.push(catCtrlFilterChip);\n }\n item.facetList = item.facetList.filter(function (c) { return c !== child; });\n }\n setFilteredFacets();\n }\n\n function removeFacetFilter(item) {\n vm.filterChips = vm.filterChips.filter(function (f) {\n return f != item;\n });\n\n if (item.type == 600) {\n vm.parameters.query = null;\n }\n if (item.level && item.level > 0) {\n var removingFilters = vm.filterChips.filter(function (f) {\n return f.level > item.level;\n });\n if (removingFilters && removingFilters.length > 0) {\n removingFilters.forEach(function (r) {\n vm.filterChips = vm.filterChips.filter(function (f) {\n return f != r;\n });\n })\n }\n }\n search();\n }\n\n function resetFilters() {\n vm.filteredFacets = {};\n vm.patternFilters = {};\n vm.filterChips = [];\n vm.parameters.query = null;\n search();\n }\n\n function setPatternFilter(key, name) {\n if (vm.patternFilters[key] == '')\n delete vm.patternFilters[key];\n else {\n vm.patternFilters.chips = vm.patternFilters.chips || [];\n var chip = vm.patternFilters.chips.filter(function (item) { return item.key === key; })[0];\n if (chip)\n chip.value = vm.patternFilters[key];\n else\n vm.patternFilters.chips.push({ key: key, name: name, value: vm.patternFilters[key] });\n }\n }\n\n function removePatternFilter(key, name) {\n if (vm.patternFilters[key])\n delete vm.patternFilters[key];\n vm.patternFilters.chips = vm.patternFilters.chips.filter(function (item) {\n return item.key !== key;\n });\n if (vm.patternFilters.postKeys.indexOf(key) != -1)\n search();\n }\n\n function changeDate() {\n vm.parameters.startDate = vm.afterDatePicker.startDate.toISOString().split('.')[0] + \"Z\";\n vm.parameters.endDate = vm.afterDatePicker.endDate.toISOString().split('.')[0] + \"Z\";\n if (vm.parameters.startDate === vm.parameters.endDate) {\n vm.parameters.endDate = moment(vm.parameters.endDate).add(1, 'days').toDate().toISOString().split('.')[0] + \"Z\"\n }\n search();\n refreshDatePickersFormat();\n }\n\n function clearDate() {\n vm.afterDatePicker = {\n startDate: null,\n endDate: null\n };\n vm.parameters.startDate = null;\n vm.parameters.endDate = null;\n vm.datePicker = {};\n search();\n\n if (vm.report.dates && vm.report.dates.startDate && vm.report.dates.endDate) {\n if ($('#afterreportrange').is(':visible')) {\n $('input[id=\"afterreportrange\"]').data('daterangepicker').setEndDate(moment().toDate());\n $('input[id=\"afterreportrange\"]').data('daterangepicker').setStartDate(moment().toDate());\n }\n if ($('#afterreportrange2').is(':visible')) {\n $('input[id=\"afterreportrange2\"]').data('daterangepicker').setEndDate(moment().toDate());\n $('input[id=\"afterreportrange2\"]').data('daterangepicker').setStartDate(moment().toDate());\n }\n }\n\n $('#afterreportrange').val('Tarih');\n $('#afterreportrange2').val('Tarih');\n }\n\n function setPatternFilters() {\n vm.parameters.patternFilter = [];\n vm.patternFilters.postKeys = [];\n var excludedKeys = ['postKeys', 'chips'];\n for (var key in vm.patternFilters) {\n if (excludedKeys.indexOf(key) == -1 && vm.patternFilters[key] && vm.patternFilters[key] != '') {\n var patternValue = \"\\\"\" + key + \"\\\":\\\"\" + vm.patternFilters[key] + \"\\\"\";\n vm.parameters.patternFilter.push(patternValue);\n vm.patternFilters.postKeys.push(key);\n }\n }\n }\n\n function findRecurisiveFacetByValue(facets, value, parent, currentParent) {\n if (!value || !facets || facets.length <= 0) return null;\n for (var i in facets) {\n var f = facets[i];\n if (f.value === value && parent == currentParent) {\n return f;\n } else {\n var p = f.value;\n if (currentParent)\n p = currentParent + \"->\" + f.value;\n var m = findRecurisiveFacetByValue(f.subs, value, parent, p);\n if (m)\n return m;\n }\n }\n return null;\n }\n\n function storeFilters() {\n ReportService.setPatternFilters(vm.reportId, vm.patternFilters);\n ReportService.setFilterChips(vm.reportId, vm.filterChips);\n setFilteredFacets();\n }\n\n function searchData() {\n vm.parameters.gap = vm.parameters.gap ? vm.parameters.gap : \"1MONTH\";\n var start = Date.now();\n vm.searching = true;\n //if (vm.filterChips && vm.filterChips.length > 0) {\n //vm.parameters.filterChips = vm.filterChips;\n //} else {\n vm.parameters.filterChips = [];\n //}\n vm.filterChips = vm.filterChips.filter(function (item) {\n return item.type != 600;\n });\n if (vm.parameters.query && vm.parameters.query.length > 0) {\n var filterQueryChip = {\n key: \"content\",\n value: vm.parameters.query,\n type: 600,\n group: -1,\n operand: \"AND\",\n titleKey: \"Query\"\n }\n vm.filterChips.push(filterQueryChip);\n }\n setNormalFacetFilters();\n setCategoryFacetFilters();\n setFacetFieldsQuery();\n setPatternFilters();\n storeFilters();\n vm.parameters.facet = [];\n vm.parameters.defaultFacet = true;\n vm.parameters.facetSearch = null;\n encodeFilters(vm.parameters);\n vm.parameters.filter = vm.parameters.filter ? vm.parameters.filter : [];\n vm.parameters.row = 0;\n vm.parameters.start = 0;\n vm.parameters.highlight = false;\n vm.parameters.periods = null;\n setFacetParams(vm.parameters.facet);\n vm.parameters.facet.push({ name: \"category_count_i\", range: true });\n var readyQuery = JSON.parse(JSON.stringify(vm.parameters));\n vm.parameters.facet.push({ name: \"first_updated_by_s,updated_by_s\", range: false });\n vm.parameters.facet.push({ name: \"category_change_m\" + vm.dashboardClassificationModule.moduleId + \"_ss\", range: false });\n vm.parameters.facetQueries = [vm.dashboardClassificationModule.moduleId, \"drafted_b:true\"];\n\n setReadyQueryParameters(readyQuery);\n setFilteredFacets();\n var query = vm.parameters.query ? vm.parameters.query : \"\";\n vm.parameters.query = query != \"\" ? query + \" AND (drafted_b:false OR (drafted_b:true AND ready_b:true))\" : \"drafted_b:false OR (drafted_b:true AND ready_b:true)\";\n if (vm.showLogs) {\n console.log(vm.parameters)\n console.log(readyQuery)\n }\n console.log(vm.parameters)\n console.log(vm.report.id)\n console.log(readyQuery)\n var searchPromises = [api.report.search(vm.report.id, vm.parameters), api.report.search(vm.report.id, readyQuery)];\n $q.all(searchPromises).then(function (results) {\n $utils.googleAnalyticsSetTiming(\"Operation Report Search Response\", vm.reportId, Date.now() - start);\n if (vm.showLogs) console.log(results)\n vm.parameters.query = query;\n vm.searching = false;\n var response = results[0];\n vm.response = response;\n var readyResponse = results[1];\n vm.readyResponse = readyResponse;\n vm.data.facets = response.facets;\n vm.data.localVariables = response.localVariables;\n setupFacets();\n groupNerFacets();\n vm.data.documents = response.reportDocumentList;\n vm.data.count = response.count;\n vm.searching = false;\n vm.sideNavEnabled = true;\n vm.dataCopy = JSON.parse(JSON.stringify(vm.data));\n eliminateFacetFilteredValues();\n setCharts(response, readyResponse);\n measureTimings(start)\n }, function (err) {\n $log.error(err);\n vm.sideNavEnabled = true;\n })\n }\n\n function setReadyQueryParameters(readyQuery) {\n readyQuery.filter = readyQuery.filter ? readyQuery.filter : [];\n readyQuery.filter.push(\"ready_b:true\")\n readyQuery.onlyModuleFacets = true;\n readyQuery.defaultFacet = false;\n readyQuery.facet = readyQuery.facet ? readyQuery.facet : [];\n readyQuery.facet.push({\n name: \"drafted_by_s,\" + vm.dashboardClassificationModule.moduleId\n })\n readyQuery.facet.push({\n name: \"ready_by_s\"\n })\n readyQuery.facet.push({\n name: \"drafted_b\",\n range: true\n })\n }\n\n function groupNerFacets() {\n var nerFacets = vm.data.facets.filter(function (k) { return k.key.startsWith('ner_') })\n vm.data.facets = vm.data.facets.filter(function (k) { return !k.key.startsWith('ner_') })\n if (nerFacets.length > 0) {\n var order = nerFacets[0].order;\n nerFacets.forEach(function (k) {\n if (k.order && Number(k.order) < Number(order)) {\n order = k.order;\n }\n })\n nerFacets.sort(function (a, b) {\n return a.order - b.order\n });\n vm.data.facets.push({\n \"key\": \"ner_\",\n \"title\": $translate.instant('SHARED.NAMEDENTITY'),\n \"facets\": nerFacets,\n \"group\": true,\n \"facetList\": [\"a\"],\n \"type\": 250,\n \"order\": order\n })\n sortFacets();\n }\n }\n\n function setCharts(response, readyResponse) {\n setAiMarkingRateChart(response.facetQueries)\n setAiAproveRateChart(readyResponse)\n setAiAproveRateDateChart(readyResponse);\n aiMarkingTrend(response, readyResponse);\n }\n\n function setAiMarkingRateChart(facetQueries) {\n vm.aiMarkingRateChart = ReportTemplate1_2ChartParserService.aiMarkingRateChart(facetQueries, vm.dashboardClassificationModule.moduleId);\n }\n\n function aiMarkingTrend(response, readyResponse) {\n vm.aiMarkingTrendData = ReportTemplate1_2ChartParserService.setAiMarkingTrendData(response, readyResponse);\n }\n\n function setAiAproveRateChart(facetQueries) {\n vm.aiAproveRateChart = ReportTemplate1_2ChartParserService.aiAproveRateChart(facetQueries);\n }\n\n function setAiAproveRateDateChart(response) {\n vm.aiAproveRateDateChart = ReportTemplate1_2ChartParserService.aiAproveRateDateChart(response);\n }\n\n function sortFacets() {\n vm.isOrderActive = vm.data.facets.filter(function (f) {\n return Number(f.order) > 1;\n }).length > 0;\n if (!vm.isOrderActive) {\n vm.data.facets.sort(function (a, b) {\n return a.type - b.type\n });\n } else {\n vm.data.facets.sort(function (a, b) {\n return Number(a.order) - Number(b.order)\n });\n }\n }\n\n function measureTimings(start) {\n if ($('#dashboard4').is(':visible')) { //if the container is visible on the page\n $utils.googleAnalyticsSetTiming('Operation Report Page Load', vm.reportId, Date.now() - start)\n } else {\n setTimeout(function () { measureTimings(start) }, 200); //wait 50 ms, then try again\n }\n }\n\n function setDate() {\n vm.afterDatePicker = {\n startDate: vm.report.dates && vm.report.dates.startDate ? moment(vm.report.dates.startDate).toDate() : null,\n //endDate: vm.report.dates && vm.report.dates.endDate ? moment(vm.report.dates.endDate).add(1, 'days').toDate() : null\n endDate: vm.report.dates && vm.report.dates.endDate ? moment(vm.report.dates.endDate).startOf('day').add(1, 'days').add(-1, 'seconds').toDate() : null\n };\n if (vm.afterDatePicker && vm.afterDatePicker.startDate && vm.afterDatePicker.endDate) {\n vm.parameters.startDate = vm.afterDatePicker.startDate.toISOString().split('.')[0] + \"Z\";\n vm.parameters.endDate = vm.afterDatePicker.endDate.toISOString().split('.')[0] + \"Z\";\n }\n }\n\n function eliminateFacetFilteredValues() {\n if (vm.parameters.filterChips && vm.parameters.filterChips.length > 0) {\n vm.parameters.filterChips.forEach(function (filteredValue) {\n var facet = vm.data.facets.filter(function (facet) { return facet.title === filteredValue.titleKey; })[0];\n if (facet && facet.facetList) {\n facet.facetList = facet.facetList.filter(function (item) { return item.value !== filteredValue.value; });\n }\n })\n }\n }\n\n\n\n function findChartLevel() {\n if (!vm.filterChips || vm.filterChips.length == 0) return 1;\n var foundedChips = vm.filterChips.filter(function (c) {\n return c.level >= 0;\n });\n if (foundedChips && foundedChips.length > 0) {\n foundedChips.sort(function (c1, c2) {\n return c1.level - c2.level;\n });\n return foundedChips[foundedChips.length - 1].level + 1;\n }\n return 1;\n }\n\n function encodeFilters(query) {\n var encodedFilters = base64.encode(JSON.stringify(query));\n $location.search('query', encodedFilters);\n ReportService.setQuery(vm.report.id, encodedFilters);\n }\n\n function setNormalFacetFilters() {\n var filters = ReportQueryParserService.setNormalFacetFilters(vm.filterChips);\n if (filters && filters.length > 0) {\n vm.parameters.filter = filters;\n } else {\n vm.parameters.filter = null;\n }\n }\n\n function setCategoryFacetFilters() {\n var filters = ReportQueryParserService.setCategoryFacetFilters(vm.filterChips);\n if (filters && filters.length > 0) {\n vm.parameters.category = filters;\n } else {\n vm.parameters.category = null;\n }\n }\n\n\n function setFacetFieldsQuery() {\n var fields = vm.reportFields.filter(function (rf) {\n return ReportService.isThisFieldType(300, rf.fieldType);\n });\n fields.forEach(function (f) {\n if (!vm.parameters[\"facet\"]) vm.parameters[\"facet\"] = [];\n if (vm.parameters[\"facet\"].indexOf(f.fieldTitle) == -1)\n vm.parameters[\"facet\"].push(f.fieldTitle);\n })\n var classificationModules = vm.reportModules.filter(function (rm) {\n return rm.moduleTypeId == 1\n });\n if (classificationModules && classificationModules.length > 0) {\n classificationModules.forEach(function (m) {\n if (!vm.parameters[\"facet\"]) vm.parameters[\"facet\"] = [];\n var value = \"\\\"moduleid:\" + m.moduleId + \"\\\"\";\n if (vm.parameters[\"facet\"].indexOf(value) == -1)\n vm.parameters[\"facet\"].push(value);\n })\n }\n var sentimentField = vm.reportFields.filter(function (rf) {\n return rf.fieldType == 200;\n })[0];\n if (sentimentField) {\n if (!vm.parameters[\"facet\"]) vm.parameters[\"facet\"] = [];\n if (vm.parameters[\"facet\"].indexOf(sentimentField.fieldTitle) == -1)\n vm.parameters[\"facet\"].push(sentimentField.fieldTitle);\n }\n }\n\n function setupFacets() {\n\n vm.targetChartData = null;\n vm.data.facetSize = 10;\n vm.data.facets.forEach(function (f) {\n f[\"size\"] = 10;\n f[\"showMoreAndMore\"] = f.facetList && f.facetList.length >= 10 ? true : false;\n f[\"allFacets\"] = f.facetList && f.facetList.length > 10 || vm.reportModuleIds.includes(f.key) ? true : false;\n });\n sortFacets();\n /*var normalCategoryFilters = vm.filterChips.filter(function (c) {\n return c.type == 100;\n });*/\n var normalCategoryFilters = [];\n vm.filterChips.forEach(function (c) {\n if (c.type == 100 && c.operand == \"AND\" && normalCategoryFilters.filter(function (f) { return f.level == c.level && f.operand == \"AND\"; }).length == 0) {\n normalCategoryFilters.push(c);\n }\n });\n if (normalCategoryFilters && normalCategoryFilters.length > 0) {\n var level = findChartLevel();\n normalCategoryFilters.forEach(function (c) {\n var foundedFacets = vm.data.facets.filter(function (f) {\n return f.key === c.key\n });\n if (foundedFacets && foundedFacets.length > 0) {\n var facet = foundedFacets[0];\n var result = findRecurisiveFacetByValue(facet.facetList, c.value, c.parentString ? c.parentString : null, null);\n if (result && result.subs && result.subs.length > 0) {\n result.subs.forEach(function (s) {\n s[\"parentString\"] = c.parentString ? c.parentString + \"->\" + c.value : c.value;\n })\n if (c.group == -1 && level - 1 == c.level && result && result.subs && result.subs.length > 0) {\n vm.targetChartData = {\n key: facet.key,\n title: result.value,\n type: facet.type + 10,\n size: 10,\n count: result.count,\n facetList: result.subs,\n parentString: c.parentString ? c.parentString + \"->\" + c.value : c.value\n };\n } else if (c.group == -1 && level - 1 == c.level && result) {\n var foundedFilter = normalCategoryFilters.filter(function (cat) {\n return cat.level == level - 2;\n })[0];\n }\n var alias = {};\n var chipCat = getChipCat(c);\n if (chipCat && chipCat.localVariables) {\n chipCat.localVariables.forEach(function (k) {\n alias[k.language] = k.value;\n })\n }\n vm.data.facets.push({\n key: facet.key,\n title: result.value,\n type: facet.type + 10,\n size: 10,\n count: result.count,\n facetList: result.subs,\n parentString: c.parentString ? c.parentString + \"->\" + c.value : c.value,\n alias: alias\n });\n } else if (c.group == -1 && level - 1 == c.level) {\n var foundedTarget = vm.data.facets.filter(function (x) {\n return result.parentString && x.parentString && x.parentString == result.parentString;\n })[0];\n if (foundedTarget) {\n foundedTarget = JSON.parse(JSON.stringify(foundedTarget));\n if (foundedTarget.subs && foundedTarget.subs.length > 0) {\n foundedTarget.facetList = foundedTarget.facetList.filter(function (ss) {\n return ss.value === result.value;\n });\n }\n vm.targetChartData = foundedTarget;\n }\n }\n }\n })\n }\n /*if (!vm.isOrderActive) {\n if (vm.data.facets && vm.data.facets.length > 1) {\n vm.data.facets.sort(function (a, b) {\n if (a.type > b.type) return 1;\n if (b.type > a.type) return -1;\n return 0;\n })\n }\n }*/\n sortFacets();\n if (normalCategoryFilters && normalCategoryFilters.length > 0) {\n normalCategoryFilters.forEach(function (cFilter) {\n var foundedFacet = vm.data.facets.filter(function (f) {\n return f.key == cFilter.key && cFilter.titleKey == f.title;\n })[0];\n if (foundedFacet)\n vm.data.facets = vm.data.facets.filter(function (f) {\n return f != foundedFacet;\n });\n })\n }\n }\n\n vm.facetMoreAndMore = function (item) {\n if (item.allFacets) {\n vm.moreAndMoreCount += 1;\n item.size = item.size + 10;\n if (item.facetList.length < item.size) item.showMoreAndMore = false;\n return;\n }\n\n vm.moreAndMoreLoading = true;\n vm.moreAndMoreCount += 1;\n item.size = item.size + 10;\n\n api.report.moreAndMoreSearch(vm.reportId, item.key, item.size - 10, vm.parameters)\n .then(function (response) {\n if (response.length < 10) item.showMoreAndMore = false;\n item.facetList = item.facetList.concat(response);\n vm.moreAndMoreLoading = false;\n }, function (err) {\n $log.error(err);\n })\n\n }\n\n function createDatePickers() {\n if (!vm.isDatePickerCreatorStarted) {\n vm.isDatePickerCreatorStarted = true;\n if ($('#afterreportrange').length || $('#afterreportrange2').length) {\n if (vm.afterDatePicker && vm.afterDatePicker.startDate && vm.afterDatePicker.endDate) {\n createDateComponentTurkish('#afterreportrange', vm.afterDatePicker.startDate, vm.afterDatePicker.endDate);\n createDateComponentEnglish('#afterreportrange2', vm.afterDatePicker.startDate, vm.afterDatePicker.endDate);\n } else {\n createDateComponentTurkish('#afterreportrange', null, null);\n createDateComponentEnglish('#afterreportrange2', null, null);\n }\n\n if (vm.afterDatePicker.startDate && vm.afterDatePicker.endDate) {\n $('#afterreportrange').val(moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY'));\n $('#afterreportrange2').val(moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY'));\n } else {\n $('#afterreportrange').val('Tarih');\n $('#afterreportrange2').val('Tarih');\n }\n\n if ($('#afterreportrange').length) {\n\n $('input[id=\"afterreportrange\"]').on('apply.daterangepicker', function (ev, picker) {\n vm.afterDatePicker = {\n startDate: picker.startDate.toDate(),\n endDate: picker.endDate.toDate()\n };\n //addTemplateReportCookie(\"afterDate\", vm.afterDatePicker);\n $settings.saveUserSettings(\"afterDate\", vm.afterDatePicker, vm.report.id);\n changeDate();\n });\n $('input[id=\"afterreportrange\"]').on('hide.daterangepicker', function (ev, picker) {\n refreshDatePickersFormat();\n });\n }\n\n if ($('#afterreportrange2').length) {\n\n $('input[id=\"afterreportrange2\"]').on('apply.daterangepicker', function (ev, picker) {\n vm.afterDatePicker = {\n startDate: picker.startDate.toDate(),\n endDate: picker.endDate.toDate()\n };\n //addTemplateReportCookie(\"afterDate\", vm.afterDatePicker);\n $settings.saveUserSettings(\"afterDate\", vm.afterDatePicker, vm.report.id);\n changeDate();\n });\n $('input[id=\"afterreportrange2\"]').on('hide.daterangepicker', function (ev, picker) {\n refreshDatePickersFormat();\n });\n }\n vm.dateTypes = [{\n id: 1,\n name: $translate.instant('REPORT.CONTENT_DATE')\n },\n {\n id: 2,\n name: $translate.instant('SHARED.ORDER.UPDATED_DATE')\n },\n {\n id: 3,\n name: $translate.instant('SHARED.ORDER.CREATED_DATE')\n }]\n var l = \"
\" +\n \"\" +\n \"
\";\n $(\".drp-buttons\").prepend($compile(l)($scope));\n \n vm.parameters.searchByDate = vm.paramSearchByDate;\n\n }\n vm.isDatePickerCreatorStarted = false;\n }\n refreshDatePickersFormat();\n }\n\n function createDatePicker() {\n if (($('#afterreportrange').is(':visible') && vm.languageDatePicker == 1) || ($('#afterreportrange2').is(':visible') && vm.languageDatePicker == 2)) { //if the container is visible on the page\n createDatePickers();\n } else {\n setTimeout(createDatePickers, 50); //wait 50 ms, then try again\n }\n }\n\n function setQueryParameters() {\n if ($location.search().query) {\n vm.parameters = JSON.parse(base64.decode($location.search().query));\n if (vm.parameters && vm.parameters.startDate && vm.parameters.endDate) {\n vm.afterDatePicker = {\n startDate: moment(vm.parameters.startDate).toDate(),\n endDate: moment(vm.parameters.endDate).toDate()\n }\n vm.beforeDatePicker = {\n startDate: moment(vm.parameters.startDate).subtract(1, 'quarter').startOf('quarter').toDate(),\n endDate: moment(vm.parameters.startDate).subtract(1, 'quarter').endOf('quarter').toDate()\n }\n vm.parameters.startDate = vm.afterDatePicker.startDate.toISOString().split('.')[0] + \"Z\";\n vm.parameters.endDate = vm.afterDatePicker.endDate.toISOString().split('.')[0] + \"Z\";\n } else if (vm.afterDatePicker && vm.afterDatePicker.startDate && vm.afterDatePicker.endDate) {\n vm.parameters.startDate = vm.afterDatePicker.startDate.toISOString().split('.')[0] + \"Z\";\n vm.parameters.endDate = vm.afterDatePicker.endDate.toISOString().split('.')[0] + \"Z\";\n }\n //if (vm.parameters.filterChips && vm.parameters.filterChips.length > 0) {\n vm.filterChips = ReportService.generateFilterChipsFromFilter(vm.parameters, vm.reportModules);\n //}\n }\n if ($location.search().logs) vm.showLogs = true;\n if ($location.search().url || $location.search().oid) {\n $state.go('app.report.data', {\n id: vm.reportId,\n url: $location.search().url,\n oid: $location.search().oid,\n query: $location.search().query\n });\n }\n }\n\n function replicateReport($event) {\n ReportService.replicatePrompt($scope, $event, vm.report.id, user, vm.documentNickname);\n }\n\n function reevaluateReport($event) {\n ReportService.reevaluatePrompt($scope, $event, vm.report.id, user, vm.documentNickname);\n }\n\n function removeDocuments($event) {\n ReportService.deleteReportData($scope, $state, $event, vm.report, vm.parameters, vm.data.count);\n }\n\n function deleteReport($event) {\n if (vm.isFlatModeActive)\n ReportService.warning($scope, $event, $translate.instant(\"REPORT.ERRORS.ACTIVE_WEB_SOURCE_HEADER\"), $translate.instant(\"REPORT.ERRORS.ACTIVE_WEB_SOURCE_BODY\"));\n else\n ReportService.deleteReport($scope, $state, $event, vm.report);\n }\n\n //export starts\n function exportReport(type, $event) {\n ReportService.exportPrompt($scope, $event, vm.report.id, user, vm.parameters, type, vm.data.count);\n }\n\n //export ends\n\n //Key events starts\n angular.element($window).bind('keydown', function (e) {\n if (e.keyCode == 16) {\n vm.ctrlKeyPressing = true;\n vm.groupCtrlCount = vm.groupCtrlCount + 1;\n }\n });\n\n angular.element($window).bind('keyup', function (e) {\n if (e.keyCode == 16) {\n vm.ctrlKeyPressing = false;\n //vm.groupCtrlCount = Math.floor(Math.random() * 10000) + 1;\n //search();\n\n }\n });\n //Key events ends\n\n //Bookmarks starts\n function saveBookmark(title, event) {\n var request = {\n url: $location.search().query,\n title: title,\n reportId: vm.reportId\n };\n event.target.disabled = true;\n api.report.saveBookmark(request)\n .then(function (res) {\n vm.allBookmarks = res;\n vm.bookmarks = vm.allBookmarks.filter(function (k) { return k.userName != null });\n vm.generalBookmarks = vm.allBookmarks.filter(function (k) { return k.userName == null });\n vm.newBookmarkTitle = null;\n event.target.disabled = false;\n }, function (response) {\n console.log(response);\n event.target.disabled = false;\n })\n }\n\n //General ookmarks starts\n this.saveGeneralBookmark = function (title, event) {\n var request = {\n url: $location.search().query,\n title: title,\n reportId: vm.reportId\n };\n event.target.disabled = true;\n api.report.saveGeneralBookmark(request)\n .then(function (res) {\n vm.allBookmarks = res;\n vm.bookmarks = vm.allBookmarks.filter(function (k) { return k.userName != null });\n vm.generalBookmarks = vm.allBookmarks.filter(function (k) { return k.userName == null });\n vm.newBookmarkTitle = null;\n vm.newGeneralBookmarkTitle = null;\n event.target.disabled = false;\n }, function (response) {\n console.log(response);\n event.target.disabled = false;\n })\n }\n\n function deleteBookmark(id, event) {\n var request = {\n reportId: vm.reportId,\n id: id\n };\n event.target.disabled = true;\n api.report.deleteBookmark(request)\n .then(function (res) {\n vm.allBookmarks = res;\n vm.bookmarks = vm.allBookmarks.filter(function (k) { return k.userName != null });\n vm.generalBookmarks = vm.allBookmarks.filter(function (k) { return k.userName == null });\n event.target.disabled = false;\n }, function (response) {\n console.log(response);\n })\n }\n\n function goToBookmark(query) {\n $location.search('query', query);\n if ($location.search().query) {\n setQueryParameters();\n search();\n }\n }\n\n //Bookmarks ends\n\n function buildToggler(navID) {\n return function () {\n // Component lookup should always be available since we are not using `ng-if`\n $mdSidenav(navID)\n .toggle()\n .then(function () {\n $log.debug(\"toggle \" + navID + \" is done\");\n });\n };\n }\n\n function search() {\n searchData();\n }\n\n function init() {\n setDate();\n setQueryParameters();\n //initDateRanges();\n search();\n setFilteredFacets();\n setTimeout(function () { createDatePicker(); }, 2000);\n $utils.saveAudit(vm.reportId, \"REPORT\", \"OPEN\", vm.report.name + \" / Operation Report\");\n getIsFlatModeActive();\n $utils.googleAnalyticsSetPageview(\"/report/\" + vm.reportId + \"/overview\");\n $utils.googleAnalyticsSetScreenView(\"Operation Report\");\n generateYearsAndMonths();\n getCategoryChangeOperationResults();\n }\n init();\n\n function refreshDatePickersFormat() {\n if (vm.afterDatePicker.startDate && vm.afterDatePicker.endDate) {\n var afterValue = getDatePickerValue(vm.afterDatePicker);\n var dateRanges = {};\n if (vm.languageDatePicker == 1)\n dateRanges = vm.dateRanges;\n else if (vm.languageDatePicker == 2)\n dateRanges = vm.dateRangesEn;\n Object.keys(dateRanges).forEach(function (k) {\n if (dateRanges[k][0].format('DD/MM/YYYY') == moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') && dateRanges[k][1].format('DD/MM/YYYY') == moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY')) {\n afterValue = k;\n }\n })\n if (afterValue) {\n $('#afterreportrange').val(afterValue);\n $('#afterreportrange2').val(afterValue);\n } else {\n $('#afterreportrange').val(moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY'));\n $('#afterreportrange2').val(moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY'));\n }\n }\n else {\n $('#afterreportrange').val('Tarih');\n $('#afterreportrange2').val('Tarih');\n }\n\n }\n\n function getDatePickerValue(picker) {\n var value = null;\n if (picker && picker.startDate && picker.endDate) {\n if (picker.startDate.getDate() == 1 && picker.startDate.getMonth() + 1 == 1 &&\n picker.endDate.getDate() == 31 && picker.endDate.getMonth() + 1 == 3 &&\n picker.startDate.getYear() == picker.endDate.getYear()) {\n value = \"Q1 (\" + picker.startDate.getFullYear() + \")\";\n } else if (picker.startDate.getDate() == 1 && picker.startDate.getMonth() + 1 == 4 &&\n picker.endDate.getDate() == 30 && picker.endDate.getMonth() + 1 == 6 &&\n picker.startDate.getYear() == picker.endDate.getYear()) {\n value = \"Q2 (\" + picker.startDate.getFullYear() + \")\";\n } else if (picker.startDate.getDate() == 1 && picker.startDate.getMonth() + 1 == 7 &&\n picker.endDate.getDate() == 30 && picker.endDate.getMonth() + 1 == 9 &&\n picker.startDate.getYear() == picker.endDate.getYear()) {\n value = \"Q3 (\" + picker.startDate.getFullYear() + \")\";\n } else if (picker.startDate.getDate() == 1 && picker.startDate.getMonth() + 1 == 10 &&\n picker.endDate.getDate() == 31 && picker.endDate.getMonth() + 1 == 12 &&\n picker.startDate.getYear() == picker.endDate.getYear()) {\n value = \"Q4 (\" + picker.startDate.getFullYear() + \")\";\n }\n }\n return value;\n }\n\n vm.dateRanges = {\n 'Bugün': [moment(), moment()],\n 'Dün': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],\n 'Son 7 Gün': [moment().subtract(6, 'days'), moment()],\n 'Son 30 Gün': [moment().subtract(29, 'days'), moment()],\n 'Bu Ay': [moment().startOf('month'), moment().endOf('month')],\n 'Geçen Ay': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')],\n 'Bu Yıl': [moment().startOf('year'), moment().endOf('year')],\n 'Geçen Yıl (Tümü)': [moment().startOf('year').subtract(1, 'y'), moment().endOf('year').subtract(1, 'y')],\n 'Bu Yıl (YTD)': [moment().startOf('year'), moment().endOf('day')],\n 'Geçen Yıl (YTD)': [moment().startOf('year').subtract(1, 'y'), moment().endOf('day').subtract(1, 'y')],\n 'Önceki Yıl (Tümü)': [moment().startOf('year').subtract(2, 'y'), moment().endOf('year').subtract(2, 'y')]\n }\n\n vm.dateRanges['Q1 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 0, 1)), moment(new Date(moment().year(), 2, 31))];\n vm.dateRanges['Q2 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 3, 1)), moment(new Date(moment().year(), 5, 30))];\n vm.dateRanges['Q3 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 6, 1)), moment(new Date(moment().year(), 8, 30))];\n vm.dateRanges['Q4 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 9, 1)), moment(new Date(moment().year(), 11, 31))];\n vm.dateRanges['Q1 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 0, 1)), moment(new Date(moment().year() - 1, 2, 31))];\n vm.dateRanges['Q2 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 3, 1)), moment(new Date(moment().year() - 1, 5, 30))];\n vm.dateRanges['Q3 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 6, 1)), moment(new Date(moment().year() - 1, 8, 30))];\n vm.dateRanges['Q4 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 9, 1)), moment(new Date(moment().year() - 1, 11, 31))];\n\n vm.dateRangesEn = {\n 'Today': [moment(), moment()],\n 'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],\n 'Last 7 Days': [moment().subtract(6, 'days'), moment()],\n 'Last 30 Days': [moment().subtract(29, 'days'), moment()],\n 'This Month': [moment().startOf('month'), moment().endOf('month')],\n 'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')],\n 'This Year': [moment().startOf('year'), moment().endOf('year')],\n 'Last Year (All)': [moment().startOf('year').subtract(1, 'y'), moment().endOf('year').subtract(1, 'y')],\n 'This Year (YTD)': [moment().startOf('year'), moment().endOf('day')],\n 'Last Year (YTD)': [moment().startOf('year').subtract(1, 'y'), moment().endOf('day').subtract(1, 'y')],\n 'Previous Year (All)': [moment().startOf('year').subtract(2, 'y'), moment().endOf('year').subtract(2, 'y')]\n }\n\n vm.dateRangesEn['Q1 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 0, 1)), moment(new Date(moment().year(), 2, 31))];\n vm.dateRangesEn['Q2 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 3, 1)), moment(new Date(moment().year(), 5, 30))];\n vm.dateRangesEn['Q3 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 6, 1)), moment(new Date(moment().year(), 8, 30))];\n vm.dateRangesEn['Q4 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 9, 1)), moment(new Date(moment().year(), 11, 31))];\n vm.dateRangesEn['Q1 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 0, 1)), moment(new Date(moment().year() - 1, 2, 31))];\n vm.dateRangesEn['Q2 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 3, 1)), moment(new Date(moment().year() - 1, 5, 30))];\n vm.dateRangesEn['Q3 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 6, 1)), moment(new Date(moment().year() - 1, 8, 30))];\n vm.dateRangesEn['Q4 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 9, 1)), moment(new Date(moment().year() - 1, 11, 31))];\n\n function createDateComponentTurkish(id, startDate, endDate) {\n $(id).daterangepicker({\n startDate: moment(startDate).toDate(),\n endDate: moment(endDate).toDate(),\n ranges: vm.dateRanges,\n opens: 'left',\n //alwaysShowCalendars: true,\n //autoUpdateInput: false,\n //ranges: createQuarters(),\n locale: {\n format: 'DD/MM/YYYY',\n applyLabel: \"Uygula\",\n cancelLabel: \"Vazgeç\",\n \"fromLabel\": \"Dan\",\n \"toLabel\": \"a\",\n \"customRangeLabel\": \"Seç\",\n \"daysOfWeek\": [\n \"Pz\",\n \"Pt\",\n \"Sl\",\n \"Çr\",\n \"Pr\",\n \"Cm\",\n \"Ct\"\n ],\n \"monthNames\": [\n \"Ocak\",\n \"Şubat\",\n \"Mart\",\n \"Nisan\",\n \"Mayıs\",\n \"Haziran\",\n \"Temmuz\",\n \"Ağustos\",\n \"Eylül\",\n \"Ekim\",\n \"Kasım\",\n \"Aralık\"\n ],\n \"firstDay\": 1\n }\n //ranges: createQuarters()\n }, refreshDatePickersFormat);\n }\n\n function createDateComponentEnglish(id, startDate, endDate) {\n $(id).daterangepicker({\n startDate: moment(startDate).toDate(),\n endDate: moment(endDate).toDate(),\n ranges: vm.dateRangesEn,\n opens: 'left',\n //alwaysShowCalendars: true,\n //autoUpdateInput: false,\n //ranges: createQuarters(),\n locale: {\n format: 'DD/MM/YYYY',\n applyLabel: \"Apply\",\n cancelLabel: \"Cancel\",\n \"fromLabel\": \"from\",\n \"toLabel\": \"to\",\n \"customRangeLabel\": \"Choose\",\n \"daysOfWeek\": [\n \"Sn\",\n \"Mn\",\n \"Tu\",\n \"Wn\",\n \"Th\",\n \"Fr\",\n \"St\"\n ],\n \"monthNames\": [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\"\n ],\n \"firstDay\": 1\n }\n //ranges: createQuarters()\n }, refreshDatePickersFormat);\n }\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.report')\n .controller('ReportDashboardTemplate4', ReportDashboardTemplate4);\n\n /** @ngInject */\n function ReportDashboardTemplate4($rootScope, $scope, $state, $translate, $window,\n $stateParams, $log, api, $q, ReportService, ReportQueryParserService, ReportTemplate1_2ChartParserService, ReportTemplate1ChartParserService, $$report, $location, $mdSidenav, base64, user, toastService, $settings, $utils, appSettings, $compile, $mdToast) {\n\n var vm = this;\n vm.translate = $translate;\n if (!$location.search().query && ReportService.getQuery($$report.id) != null) {\n $location.search('query', ReportService.getQuery($$report.id).query);\n }\n moment.locale('tr');\n vm.languageDatePicker = $translate.use() === \"tr\" ? 1 : 2;\n vm.isDatePickerCreatorStarted = false;\n vm.reportSettings = $$report.reportSettings;\n vm.documentNickname = $translate.use() == \"tr\" ? vm.reportSettings.commonSettings.documentNicknameTr : vm.reportSettings.commonSettings.documentNicknameEn;\n vm.language = $translate.use();\n setInterval(function () { vm.language = $translate.use(); }, 100);\n $scope.$watch('vm.language', function () {\n vm.documentNickname = $translate.use() == \"tr\" ? vm.reportSettings.commonSettings.documentNicknameTr : vm.reportSettings.commonSettings.documentNicknameEn;\n if ($$report.hasTrainedModule) {\n if ($translate.use() == \"tr\") {\n vm.languageDatePicker = 1;\n setTimeout(function () { createDatePicker(); }, 200);\n } else if ($translate.use() == \"en\") {\n vm.languageDatePicker = 2;\n setTimeout(function () { createDatePicker(); }, 200);\n }\n if (vm.response && vm.readyResponse)\n setCharts(vm.response, vm.readyResponse);\n }\n });\n vm.sideNavEnabled = true;\n vm.reportFields = $$report.reportFields;\n vm.settings = $settings;\n vm.reportModules = $$report.reportModules;\n vm.reportModuleIds = vm.reportModules.map(function (k) {\n return k.moduleId;\n });\n vm.classificationModules = vm.reportModules.filter(function (m) { return m.moduleTypeId == 1 });\n vm.classificationModulesModules = [];\n vm.classificationModules.forEach(function (m) { return vm.classificationModulesModules.push(m.module) });\n vm.activeSources = appSettings.activeSources;\n vm.isFlatModeActive = false;\n vm.selectedDashboardTemplate = $stateParams.selectedDashboard ? $stateParams.selectedDashboard : $$report.selectedDashboard ? $$report.selectedDashboard : $$report.dashboardTemplate ? $$report.dashboardTemplate : 1;\n vm.hasSentimentModule = vm.reportModules.filter(function (r) { return r.moduleTypeId == 5 | r.moduleTypeId == 7; }).length > 0;\n vm.report = $$report;\n vm.categoryAlieses = $$report.categoryAliases;\n vm.userSettings = $settings.reportSettingsList ? $settings.reportSettingsList.filter(function (r) { return r.reportId == vm.report.id; })[0] : null;\n vm.categories = $$report.moduleCategories;\n vm.allBookmarks = $$report.bookmarks;\n vm.bookmarks = vm.allBookmarks.filter(function (k) { return k.userName != null });\n vm.generalBookmarks = vm.allBookmarks.filter(function (k) { return k.userName == null });\n vm.dashboardClassificationModule = $stateParams.dashboardClassificationModule;\n vm.noTrainedModule = !($$report.hasTrainedModule);\n vm.user = user;\n vm.dashboardModuleId = $stateParams.dashboardModuleId;\n user.moduleWorkspace = vm.report.workspaceId;\n $rootScope.selectedWorkspaceId = vm.report.workspaceId;\n vm.reportId = $stateParams.id;\n vm.selectedCategory = null;\n vm.selectedColor = \"#64a0ff\";\n vm.selectedChartCats = vm.reportSettings.dashboardSettings.operationReportModel.selectedDateBasedCategories;\n vm.selectedTrendChart = 1;\n vm.selectedUpdateChart = 1;\n vm.categoryChangesChart1Level = 1;\n vm.categoryChangesChart2Level = 2;\n vm.categoryChangesChart1Disabled = true;\n vm.categoryChangesChart2Disabled = true;\n vm.selectedAiRateChart = 1;\n vm.selectedAproveRateChart = 1;\n vm.categorySuccessRateOperation = {\n module: null,\n year: null,\n month: null\n }\n \n vm.paramSearchByDate = $stateParams.searchByDate == undefined ? 1 : $stateParams.searchByDate;\n vm.parameters = {\n query: null,\n date: null,\n startDate: null,\n endDate: null,\n searchByDate: vm.paramSearchByDate,\n sort: null,\n gap: null,\n row: 10,\n start: 0,\n filter: [],\n category: [],\n facet: [],\n feedback: null,\n assignment: null,\n highlight: false,\n defaultFacet: true,\n patternFilter: [],\n showSimilar: false\n };\n vm.data = {\n facets: []\n };\n vm.filterChips = ReportService.getFilterChips(vm.reportId, vm.reportSettings.commonSettings.filterChips);\n vm.patternFilters = ReportService.getPatternFilters(vm.reportId);\n vm.afterDatePicker = {\n startDate: null,\n endDate: null\n };\n vm.groupCtrlCount = 4000; //Math.floor(Math.random() * 10000) + 1;\n vm.orBundle = [];\n vm.activeDashboardTemplates = vm.report.activeTemplates;\n vm.activeTemplateSize = 0;\n Object.keys(vm.activeDashboardTemplates).forEach(function (key) {\n if (vm.activeDashboardTemplates[key]) vm.activeTemplateSize = vm.activeTemplateSize + 1;\n })\n \n vm.dateFormat = dateFormat;\n vm.sidenavQuery = null;\n vm.sidenavQueryFunc = sidenavQueryFunc;\n vm.openSaveDefaultReportFiltersDialog = openSaveDefaultReportFiltersDialog;\n vm.isOrderActive = false;\n vm.showLogs = false;\n vm.search = search;\n vm.toggleFacetFilter = toggleFacetFilter;\n vm.removeFacetFilter = removeFacetFilter;\n vm.resetFilters = resetFilters;\n vm.exportReport = exportReport;\n vm.removeDocuments = removeDocuments;\n vm.replicateReport = replicateReport;\n vm.reevaluateReport = reevaluateReport;\n vm.deleteReport = deleteReport;\n vm.uploadReportFeedback = uploadReportFeedback;\n vm.changeDashboard = changeDashboard;\n vm.setPatternFilter = setPatternFilter;\n vm.removePatternFilter = removePatternFilter;\n\n //methods bookmarks\n vm.saveBookmark = saveBookmark;\n vm.deleteBookmark = deleteBookmark;\n vm.goToBookmark = goToBookmark;\n\n //methods date\n vm.changeDate = changeDate;\n vm.clearDate = clearDate;\n\n vm.ctrlKeyPressing = false;\n vm.bookmarkSidenav = buildToggler('right');\n vm.filterSidenav = buildToggler('main-sidenav');\n vm.rightBottomSettingsButton = {\n isOpen: false,\n selectedMode: 'md-scale'\n };\n vm.moreAndMoreCount = 1;\n\n function changeDashboard(oldDashboard) {\n if (vm.selectedDashboardTemplate != oldDashboard) {\n $state.current.params[\"selectedDashboard\"] = vm.selectedDashboardTemplate;\n //addTemplateReportCookie('template', vm.selectedDashboardTemplate);\n $settings.saveUserSettings(\"template\", vm.selectedDashboardTemplate, vm.report.id);\n $state.go($state.current, { selectedDashboard: vm.selectedDashboardTemplate }, { reload: true })\n }\n }\n\n vm.getFilteredFacetTitle = function (title) {\n if (!vm.response) return title;\n var reportField = vm.reportFields.filter(function (a) {\n return a.fieldTitle == title;\n })[0]\n if (reportField) {\n var alias = vm.response.localVariables.filter(function (k) {\n return k.fieldName == reportField.fieldName;\n })\n if (alias[0] != null && alias[0].alias != null) {\n if ($translate.use() == \"tr\" && alias[0].alias.tr != null) return alias[0].alias.tr;\n else if ($translate.use() == \"en\" && alias[0].alias.en != null) return alias[0].alias.en;\n else return title;\n }\n }\n return title;\n }\n\n vm.getFacetValueAlias = function (title, value) {\n if (String(value).startsWith(\"id:\\\"\")) {\n var values = value.split(\"_\");\n if (values[1] != null) {\n return \"id:\\\"\" + values[1];\n }\n }\n if (vm.dataCopy == null) return value;\n var reportField = vm.reportFields.filter(function (a) {\n return a.fieldTitle == title;\n })[0]\n if (reportField) {\n var localVariable = vm.dataCopy.localVariables.filter(function (k) {\n return k.fieldName == reportField.fieldName;\n })\n\n if (localVariable[0] != null && localVariable[0].valueAliases != null) {\n var valueLocalVariable = localVariable[0].valueAliases.filter(function (k) { return k.itemValue == value.toString(); })\n\n if (valueLocalVariable[0] != null) {\n if ($translate.use() == \"tr\" && valueLocalVariable[0].tr != null) return valueLocalVariable[0].tr;\n else if ($translate.use() == \"en\" && valueLocalVariable[0].en != null) return valueLocalVariable[0].en;\n else return value;\n }\n }\n }\n return value;\n }\n\n vm.getCategoryAlias = function (child) {\n var cat = child.category;\n if (!cat) return child.value;\n var title = cat.name;\n if (cat.localVariables) {\n var localVariable = cat.localVariables.filter(function (k) { return $translate.use() == k.language; })[0];\n if (localVariable) title = localVariable.value;\n }\n return title;\n }\n\n vm.printPage = function () {\n window.print();\n }\n\n function getIsFlatModeActive() {\n if (vm.activeSources.includes('WEBSOURCE')) {\n api.source.getReportTemplates(vm.report.id,0,1)\n .then(function (response) {\n if (response.content.length > 0) {\n vm.isFlatModeActive = true;\n }\n },\n function (response) {\n $log.error(response);\n });\n }\n }\n\n function uploadReportFeedback($event) {\n ReportService.uploadFeedbackPrompt($scope, $event, vm.report.id);\n }\n\n vm.downloadAmchart = function (id, element, elementt, name) {\n if (!document.getElementById(id) || (document.getElementById(id) && !document.getElementById(id).children[element])) return;\n if (document.getElementById(id).children[element].children[elementt].tagName != \"svg\") return;\n document.getElementById(id).children[element].children[elementt].style.fontSize = \"13px\";\n document.getElementById(id).children[element].children[elementt].style.fontFamily = \"'Roboto', 'Helvetica Neue', 'Arial', sans-serif\";\n saveSvgAsPng(document.getElementById(id).children[element].children[elementt], name);\n $utils.saveAudit(vm.reportId, \"REPORT\", \"DOWNLOAD_CHART_IMAGE\", vm.report.name + ' / ' + name);\n $utils.googleAnalyticsSetAction(\"Report\", \"Download Chart Image\", vm.report.name + ' / ' + name);\n }\n\n vm.exportExcel = function (type, tableName, name, fn, dl) {\n var elt = document.getElementById(tableName);\n var wb = XLSX.utils.table_to_book(elt, { sheet: \"Sheet JS\" });\n return dl ?\n XLSX.write(wb, { bookType: type, bookSST: true, type: 'base64' }) :\n XLSX.writeFile(wb, fn || (name + \".\" + (type || 'xlsx')));\n }\n\n function sidenavQueryFunc() {\n if (vm.sidenavQuery == \"\") {\n vm.data = JSON.parse(JSON.stringify(vm.dataCopy));\n vm.parameters.facetSearch = null;\n } else {\n vm.parameters.facetSearch = vm.sidenavQuery;\n vm.sidenavQueryFuncLoading = true;\n api.report.search(vm.report.id, vm.parameters)\n .then(function (response) {\n vm.data.facets = response.facets;\n vm.sidenavQueryFuncLoading = false;\n vm.data.facetSize = 10;\n vm.data.facets.forEach(function (f) {\n f[\"size\"] = 10;\n f[\"showMoreAndMore\"] = f.facetList && f.facetList.length >= 10 ? true : false;\n f[\"allFacets\"] = f.facetList && f.facetList.length > 10 ? true : false;\n });\n\n }, function (err) {\n $log.error(err);\n })\n }\n }\n\n function openSaveDefaultReportFiltersDialog($event){\n ReportService.showSaveReportFiltersDialog($scope, $event, vm.filterChips, vm.report.id);\n }\n\n vm.filteredFacets = {};\n\n function setFilteredFacets() {\n vm.filteredFacets = {};\n for (var i = 0; i < vm.filterChips.length; i++) {\n if (vm.filteredFacets[vm.filterChips[i].titleKey] != null) {\n vm.filteredFacets[vm.filterChips[i].titleKey].push(vm.filterChips[i]);\n } else {\n var childs = [];\n childs.push(vm.filterChips[i]);\n vm.filteredFacets[vm.filterChips[i].titleKey] = childs;\n }\n }\n }\n\n function toggleFacetFilter(child, item, $event) {\n if (!vm.sideNavEnabled) return;\n /*\n if (JSON.stringify(vm.filterChips).length + JSON.stringify(ReportQueryParserService.setNormalFacetFilters(vm.filterChips)).length > 1700) {\n toastService.serverError($translate.instant('REPORT.ERRORS.FILTER_LIMIT'))\n return;\n }*/\n if (ReportService.isThisFieldType(300, item.type) || item.type == 700 || item.type == 800 || item.type == 200) {\n if (!vm.ctrlKeyPressing) {\n //var keyValue = generateKeyValuePairFilter(child.fieldName, child.value);\n var filterChip = {\n key: item.title,\n value: child.value,\n type: item.type,\n group: -1,\n operand: \"AND\",\n titleKey: item.title\n }\n vm.filterChips.push(filterChip);\n\n var foundedFilters = vm.filterChips.filter(function (chip) {\n return chip.key == item.title;\n });\n if (foundedFilters && foundedFilters.length > 1) {\n //var group = Math.floor(Math.random() * 10000) + 1;\n vm.groupCtrlCount = vm.groupCtrlCount + 1;\n foundedFilters.forEach(function (chip) {\n chip.group = vm.groupCtrlCount; //group;\n chip.operand = \"OR\";\n });\n }\n //search();\n\n // searchDateRanges();\n }\n if (vm.ctrlKeyPressing) {\n var filterCtrlChip = {\n key: item.title,\n value: child.value,\n type: item.type,\n group: vm.groupCtrlCount,\n operand: \"OR\",\n titleKey: item.title\n }\n vm.filterChips.push(filterCtrlChip);\n }\n item.facetList = item.facetList.filter(function (c) { return c !== child; });\n }\n\n if (item.type >= 100 && item.type < 200) {\n if (!vm.ctrlKeyPressing) {\n vm.sideNavEnabled = false;\n var level = null;\n if (item.key === vm.dashboardModuleId) {\n level = findChartLevel();\n }\n if (child.parentString) {\n var foundedSameLevelFilter = vm.filterChips.filter(function (chip) { return chip.key == item.key && chip.parentString && chip.parentString.split(\"->\").length == child.parentString.split(\"->\").length; })[0];\n if (foundedSameLevelFilter)\n level = level - 1;\n } else {\n var foundedSameLevelFilter = vm.filterChips.filter(function (chip) { return chip.key == item.key && typeof chip.parentString === 'undefined' && typeof child.parentString === 'undefined'; })[0];\n if (foundedSameLevelFilter)\n level = level - 1;\n }\n var catFilterChip = {\n key: item.key,\n value: child.value,\n type: 100,\n group: -1,\n operand: \"AND\",\n parentString: child.parentString,\n titleKey: item.title,\n level: level,\n aspectSentiment: child.sentimentFilter ? child.sentimentFilter : \"\"\n }\n vm.filterChips.push(catFilterChip);\n search();\n } else {\n var catCtrlFilterChip = {\n key: item.key,\n value: child.value,\n type: 100,\n group: vm.groupCtrlCount,\n operand: \"OR\",\n parentString: child.parentString,\n titleKey: item.title\n }\n vm.filterChips.push(catCtrlFilterChip);\n }\n item.facetList = item.facetList.filter(function (c) { return c !== child; });\n }\n setFilteredFacets();\n }\n\n function removeFacetFilter(item) {\n vm.filterChips = vm.filterChips.filter(function (f) {\n return f != item;\n });\n\n if (item.type == 600) {\n vm.parameters.query = null;\n }\n if (item.level && item.level > 0) {\n var removingFilters = vm.filterChips.filter(function (f) {\n return f.level > item.level;\n });\n if (removingFilters && removingFilters.length > 0) {\n removingFilters.forEach(function (r) {\n vm.filterChips = vm.filterChips.filter(function (f) {\n return f != r;\n });\n })\n }\n }\n search();\n }\n\n function resetFilters() {\n vm.filteredFacets = {};\n vm.patternFilters = {};\n vm.filterChips = [];\n vm.parameters.query = null;\n search();\n }\n\n function setPatternFilter(key, name) {\n if (vm.patternFilters[key] == '')\n delete vm.patternFilters[key];\n else {\n vm.patternFilters.chips = vm.patternFilters.chips || [];\n var chip = vm.patternFilters.chips.filter(function (item) { return item.key === key; })[0];\n if (chip)\n chip.value = vm.patternFilters[key];\n else\n vm.patternFilters.chips.push({ key: key, name: name, value: vm.patternFilters[key] });\n }\n }\n\n function removePatternFilter(key, name) {\n if (vm.patternFilters[key])\n delete vm.patternFilters[key];\n vm.patternFilters.chips = vm.patternFilters.chips.filter(function (item) {\n return item.key !== key;\n });\n if (vm.patternFilters.postKeys.indexOf(key) != -1)\n search();\n }\n\n function changeDate() {\n vm.parameters.startDate = vm.afterDatePicker.startDate.toISOString().split('.')[0] + \"Z\";\n vm.parameters.endDate = vm.afterDatePicker.endDate.toISOString().split('.')[0] + \"Z\";\n if (vm.parameters.startDate === vm.parameters.endDate) {\n vm.parameters.endDate = moment(vm.parameters.endDate).add(1, 'days').toDate().toISOString().split('.')[0] + \"Z\"\n }\n search();\n refreshDatePickersFormat();\n }\n\n function clearDate() {\n vm.afterDatePicker = {\n startDate: null,\n endDate: null\n };\n vm.parameters.startDate = null;\n vm.parameters.endDate = null;\n vm.datePicker = {};\n search();\n\n if (vm.report.dates && vm.report.dates.startDate && vm.report.dates.endDate) {\n if ($('#afterreportrange').is(':visible')) {\n $('input[id=\"afterreportrange\"]').data('daterangepicker').setEndDate(moment().toDate());\n $('input[id=\"afterreportrange\"]').data('daterangepicker').setStartDate(moment().toDate());\n }\n if ($('#afterreportrange2').is(':visible')) {\n $('input[id=\"afterreportrange2\"]').data('daterangepicker').setEndDate(moment().toDate());\n $('input[id=\"afterreportrange2\"]').data('daterangepicker').setStartDate(moment().toDate());\n }\n }\n\n $('#afterreportrange').val('Tarih');\n $('#afterreportrange2').val('Tarih');\n }\n\n function setPatternFilters() {\n vm.parameters.patternFilter = [];\n vm.patternFilters.postKeys = [];\n var excludedKeys = ['postKeys', 'chips'];\n for (var key in vm.patternFilters) {\n if (excludedKeys.indexOf(key) == -1 && vm.patternFilters[key] && vm.patternFilters[key] != '') {\n var patternValue = \"\\\"\" + key + \"\\\":\\\"\" + vm.patternFilters[key] + \"\\\"\";\n vm.parameters.patternFilter.push(patternValue);\n vm.patternFilters.postKeys.push(key);\n }\n }\n }\n\n function storeFilters() {\n ReportService.setPatternFilters(vm.reportId, vm.patternFilters);\n ReportService.setFilterChips(vm.reportId, vm.filterChips);\n setFilteredFacets();\n }\n\n function searchData() {\n vm.parameters.gap = vm.parameters.gap ? vm.parameters.gap : \"1MONTH\";\n var start = Date.now();\n vm.searching = true;\n //if (vm.filterChips && vm.filterChips.length > 0) {\n //vm.parameters.filterChips = vm.filterChips;\n //} else {\n vm.parameters.filterChips = [];\n //}\n vm.filterChips = vm.filterChips.filter(function (item) {\n return item.type != 600;\n });\n if (vm.parameters.query && vm.parameters.query.length > 0) {\n var filterQueryChip = {\n key: \"content\",\n value: vm.parameters.query,\n type: 600,\n group: -1,\n operand: \"AND\",\n titleKey: \"Query\"\n }\n vm.filterChips.push(filterQueryChip);\n }\n setNormalFacetFilters();\n setCategoryFacetFilters();\n setFacetFieldsQuery();\n setPatternFilters();\n storeFilters();\n vm.parameters.facet = [];\n vm.parameters.defaultFacet = true;\n vm.parameters.facetSearch = null;\n vm.parameters.periods = null;\n encodeFilters(vm.parameters);\n vm.parameters.filter = vm.parameters.filter ? vm.parameters.filter : [];\n vm.parameters.row = 0;\n vm.parameters.start = 0;\n vm.parameters.highlight = false;\n setFacetParams(vm.parameters.facet);\n vm.parameters.facet.push({ name: \"category_count_i\", range: true });\n var readyQuery = JSON.parse(JSON.stringify(vm.parameters));\n vm.parameters.facet.push({ name: \"first_updated_by_s,updated_by_s\", range: false });\n vm.parameters.facet.push({ name: \"category_change_m\" + vm.dashboardClassificationModule.moduleId + \"_ss\", range: false });\n vm.parameters.facetQueries = [vm.dashboardClassificationModule.moduleId, \"drafted_b:true\"];\n \n setReadyQueryParameters(readyQuery);\n setFilteredFacets();\n var query = vm.parameters.query ? vm.parameters.query : \"\";\n vm.parameters.query = query != \"\" ? query + \" AND (drafted_b:false OR (drafted_b:true AND ready_b:true))\" : \"drafted_b:false OR (drafted_b:true AND ready_b:true)\";\n if (vm.showLogs) {\n console.log(vm.parameters)\n console.log(readyQuery)\n }\n \n var searchPromises = [api.report.search(vm.report.id, vm.parameters), api.report.search(vm.report.id, readyQuery)];\n $q.all(searchPromises).then(function (results) {\n $utils.googleAnalyticsSetTiming(\"Operation Report Search Response\", vm.reportId, Date.now() - start);\n if (vm.showLogs) console.log(results)\n vm.parameters.query = query;\n vm.searching = false;\n var response = results[0];\n vm.response = response;\n var readyResponse = results[1];\n vm.readyResponse = readyResponse;\n vm.data.facets = response.facets;\n vm.data.localVariables = response.localVariables;\n setupFacets();\n groupNerFacets();\n vm.data.documents = response.reportDocumentList;\n vm.data.count = response.count;\n vm.searching = false;\n vm.sideNavEnabled = true;\n vm.dataCopy = JSON.parse(JSON.stringify(vm.data));\n eliminateFacetFilteredValues();\n setCharts(response, readyResponse);\n measureTimings(start)\n }, function (err) {\n $log.error(err);\n vm.sideNavEnabled = true;\n })\n }\n\n function groupNerFacets() {\n var nerFacets = vm.data.facets.filter(function (k) { return k.key.startsWith('ner_') })\n vm.data.facets = vm.data.facets.filter(function (k) { return !k.key.startsWith('ner_') })\n if (nerFacets.length > 0) {\n var order = nerFacets[0].order;\n nerFacets.forEach(function (k) {\n if (k.order && Number(k.order) < Number(order)) {\n order = k.order;\n }\n })\n nerFacets.sort(function (a, b) {\n return a.order - b.order\n });\n vm.data.facets.push({\n \"key\": \"ner_\",\n \"title\": $translate.instant('SHARED.NAMEDENTITY'),\n \"facets\": nerFacets,\n \"group\": true,\n \"facetList\": [\"a\"],\n \"type\": 250,\n \"order\": order\n })\n sortFacets();\n }\n }\n\n function sortFacets() {\n vm.isOrderActive = vm.data.facets.filter(function (f) {\n return Number(f.order) > 1;\n }).length > 0;\n if (!vm.isOrderActive) {\n vm.data.facets.sort(function (a, b) {\n return a.type - b.type\n });\n } else {\n vm.data.facets.sort(function (a, b) {\n return Number(a.order) - Number(b.order)\n });\n }\n }\n\n function measureTimings(start) {\n if ($('#dashboard4').is(':visible')) { //if the container is visible on the page\n $utils.googleAnalyticsSetTiming('Operation Report Page Load', vm.reportId, Date.now() - start)\n } else {\n setTimeout(function () { measureTimings(start) }, 200); //wait 50 ms, then try again\n }\n }\n \n function setReadyQueryParameters(readyQuery) {\n readyQuery.filter = readyQuery.filter ? readyQuery.filter : [];\n readyQuery.filter.push(\"ready_b:true\")\n readyQuery.onlyModuleFacets = true;\n readyQuery.defaultFacet = false;\n readyQuery.facet = readyQuery.facet ? readyQuery.facet : [];\n readyQuery.facet.push({\n name: \"drafted_by_s,\" + vm.dashboardClassificationModule.moduleId\n })\n readyQuery.facet.push({\n name: \"ready_by_s\"\n })\n readyQuery.facet.push({\n name: \"drafted_b\",\n range: true\n })\n }\n\n function setFacetParams(facets) {\n if (!facets) return;\n var facetList = [];\n for (var i = 0; i < facets.length; i++) {\n facetList.push({\n name: facets[i]\n })\n }\n vm.parameters.facet = facetList;\n }\n\n vm.categoryChangesChart2EnterFunc = function () {\n vm.categoryChangesChart2Disabled = !vm.categoryChangesChart2Disabled;\n vm.setCategoryChangesChart2(vm.response, vm.categoryChangesChart2Level, '#40e0d0');\n }\n\n vm.categoryChangesChart1EnterFunc = function () {\n vm.categoryChangesChart1Disabled = !vm.categoryChangesChart1Disabled;\n vm.setCategoryChangesChart1(vm.response, vm.categoryChangesChart1Level, '#45bbf0');\n }\n\n function setCharts(response, readyResponse) {\n setAiMarkingRateChart(response.facetQueries)\n setAiAproveRateChart(readyResponse)\n setCategoryTimelineChart(response)\n setUserCategoryChart(response, readyResponse)\n setAiAproveRateDateChart(readyResponse);\n aiMarkingTrend(response, readyResponse);\n setAiAproveTrend(response, readyResponse);\n setChangedUserChart(response);\n setChangerUserChart(response);\n vm.setCategoryChangesChart1(response, vm.categoryChangesChart1Level, \"#45bbf0\");\n vm.setCategoryChangesChart2(response, vm.categoryChangesChart2Level, \"#40e0d0\");\n }\n\n vm.setCategoryChangesChart2 = function(response, level, color) {\n vm.categoryChangesChart2 = ReportTemplate1_2ChartParserService.setCategoryChangeChartData(response, level, color, vm.categories);\n }\n\n vm.setCategoryChangesChart1 = function(response, level, color) {\n vm.categoryChangesChart1 = ReportTemplate1_2ChartParserService.setCategoryChangeChartData(response, level, color, vm.categories);\n }\n\n function setChangerUserChart(response) {\n vm.changerUserChartData = ReportTemplate1_2ChartParserService.setChangerUserChartData(response);\n }\n\n function setChangedUserChart(response) {\n vm.changedUserChartData = ReportTemplate1_2ChartParserService.setChangedUserChartData(response);\n }\n\n function setAiMarkingRateChart(facetQueries) {\n vm.aiMarkingRateChart = ReportTemplate1_2ChartParserService.aiMarkingRateChart(facetQueries, vm.dashboardClassificationModule.moduleId);\n }\n\n function setAiAproveRateChart(facetQueries) {\n vm.aiAproveRateChart = ReportTemplate1_2ChartParserService.aiAproveRateChart(facetQueries);\n }\n\n function setCategoryTimelineChart(response) {\n vm.categoryTimelineData = ReportTemplate1_2ChartParserService.setCategoryTimelineData(response, vm.dashboardClassificationModule.moduleId, vm.categories, vm.selectedChartCats);\n }\n\n function setUserCategoryChart(response, readyResponse) {\n vm.userCategoryChart = ReportTemplate1_2ChartParserService.setUserCategoryChart(response, readyResponse, vm.dashboardClassificationModule.moduleId, vm.categories, vm.selectedChartCats);\n }\n\n function setAiAproveRateDateChart(response) {\n vm.aiAproveRateDateChart = ReportTemplate1_2ChartParserService.aiAproveRateDateChart(response);\n }\n\n function aiMarkingTrend(response, readyResponse) {\n vm.aiMarkingTrendData = ReportTemplate1_2ChartParserService.setAiMarkingTrendData(response, readyResponse);\n }\n\n function setAiAproveTrend(response, readyResponse) {\n vm.aiAproveTrendData = ReportTemplate1_2ChartParserService.setAiAproveTrendData(response, readyResponse);\n }\n\n function createFilterForCategoryAlias(query) {\n var lowercaseQuery = query.toLocaleLowerCase('tr-TR');\n return function filterFn(category) {\n return (category.name.toLocaleLowerCase('tr-TR').indexOf(lowercaseQuery) != -1);\n };\n }\n\n vm.searchCategories = function(query) {\n var results = query ? vm.categories.filter(createFilterForCategoryAlias(query)) : vm.categories;\n return results;\n }\n\n \n\n vm.addToSelectedChartCats = function () {\n if (!vm.selectedCategory) return;\n var existChartCat = vm.selectedChartCats.filter(function (m) { return m.id == vm.selectedCategory.id })[0];\n if (existChartCat) {\n existChartCat.color = vm.selectedColor;\n } else {\n vm.selectedChartCats.push({\n id: vm.selectedCategory.id,\n color: vm.selectedColor\n })\n }\n }\n\n vm.removeSelectedChartCat = function (id) {\n vm.selectedChartCats = vm.selectedChartCats.filter(function (m) { return m.id != id });\n }\n\n vm.getCatName = function (catid) {\n var category = vm.categories.filter(function (m) { return m.id == catid })[0];\n if (category.parentModuleCategory)\n return category.parentModuleCategory.name + \" -> \" + category.name;\n else\n return category.name;\n }\n\n vm.saveDateBasedCategorySettings = function () {\n vm.saveReportSettingsProcessing = true;\n vm.reportSettings.dashboardSettings.operationReportModel.selectedDateBasedCategories = vm.selectedChartCats;\n api.settings.saveReportSettings(vm.reportSettings, vm.reportId)\n .then(function (response) {\n vm.saveReportSettingsProcessing = false;\n toastService.serverError($translate.instant('REPORT.SETTINGS.SAVE_COMPLETED'));\n setCategoryTimelineChart(vm.response);\n setUserCategoryChart(vm.response, vm.readyResponse);\n },\n function (response) {\n $log.error(response);\n });\n }\n\n function eliminateFacetFilteredValues() {\n if (vm.parameters.filterChips && vm.parameters.filterChips.length > 0) {\n vm.parameters.filterChips.forEach(function (filteredValue) {\n var facet = vm.data.facets.filter(function (facet) { return facet.title === filteredValue.titleKey; })[0];\n if (facet && facet.facetList) {\n facet.facetList = facet.facetList.filter(function (item) { return item.value !== filteredValue.value; });\n }\n })\n }\n }\n\n function findChartLevel() {\n if (!vm.filterChips || vm.filterChips.length == 0) return 1;\n var foundedChips = vm.filterChips.filter(function (c) {\n return c.level >= 0;\n });\n if (foundedChips && foundedChips.length > 0) {\n foundedChips.sort(function (c1, c2) {\n return c1.level - c2.level;\n });\n return foundedChips[foundedChips.length - 1].level + 1;\n }\n return 1;\n }\n\n function encodeFilters(query) {\n var encodedFilters = base64.encode(JSON.stringify(query));\n $location.search('query', encodedFilters);\n ReportService.setQuery(vm.report.id, encodedFilters);\n }\n\n function setNormalFacetFilters() {\n var filters = ReportQueryParserService.setNormalFacetFilters(vm.filterChips);\n if (filters && filters.length > 0) {\n vm.parameters.filter = filters;\n } else {\n vm.parameters.filter = null;\n }\n }\n\n function setCategoryFacetFilters() {\n var filters = ReportQueryParserService.setCategoryFacetFilters(vm.filterChips);\n if (filters && filters.length > 0) {\n vm.parameters.category = filters;\n } else {\n vm.parameters.category = null;\n }\n }\n\n\n function setFacetFieldsQuery() {\n var fields = vm.reportFields.filter(function (rf) {\n return ReportService.isThisFieldType(300, rf.fieldType);\n });\n fields.forEach(function (f) {\n if (!vm.parameters[\"facet\"]) vm.parameters[\"facet\"] = [];\n if (vm.parameters[\"facet\"].indexOf(f.fieldTitle) == -1)\n vm.parameters[\"facet\"].push(f.fieldTitle);\n })\n var classificationModules = vm.reportModules.filter(function (rm) {\n return rm.moduleTypeId == 1\n });\n if (classificationModules && classificationModules.length > 0) {\n classificationModules.forEach(function (m) {\n if (!vm.parameters[\"facet\"]) vm.parameters[\"facet\"] = [];\n var value = \"\\\"moduleid:\" + m.moduleId + \"\\\"\";\n if (vm.parameters[\"facet\"].indexOf(value) == -1)\n vm.parameters[\"facet\"].push(value);\n })\n }\n var sentimentField = vm.reportFields.filter(function (rf) {\n return rf.fieldType == 200;\n })[0];\n if (sentimentField) {\n if (!vm.parameters[\"facet\"]) vm.parameters[\"facet\"] = [];\n if (vm.parameters[\"facet\"].indexOf(sentimentField.fieldTitle) == -1)\n vm.parameters[\"facet\"].push(sentimentField.fieldTitle);\n }\n }\n\n function getChipCat(chip) {\n var category;\n var categories = vm.categories.filter(function (k) { return k.name == chip.value; });\n if (chip.parentString) {\n category = categories.filter(function (k) { return k.parentModuleCategory != null && k.parentModuleCategory.name == chip.titleKey; })[0];\n } else {\n category = categories.filter(function (k) { return k.parentModuleCategory == null })[0]\n }\n return category;\n }\n\n function setupFacets() {\n\n vm.targetChartData = null;\n vm.data.facetSize = 10;\n vm.data.facets.forEach(function (f) {\n f[\"size\"] = 10;\n f[\"showMoreAndMore\"] = f.facetList && f.facetList.length >= 10 ? true : false;\n f[\"allFacets\"] = f.facetList && f.facetList.length > 10 || vm.reportModuleIds.includes(f.key) ? true : false;\n });\n sortFacets();\n /*var normalCategoryFilters = vm.filterChips.filter(function (c) {\n return c.type == 100;\n });*/\n var normalCategoryFilters = [];\n vm.filterChips.forEach(function (c) {\n if (c.type == 100 && c.operand == \"AND\" && normalCategoryFilters.filter(function (f) { return f.level == c.level && f.operand == \"AND\"; }).length == 0) {\n normalCategoryFilters.push(c);\n }\n });\n if (normalCategoryFilters && normalCategoryFilters.length > 0) {\n var level = findChartLevel();\n normalCategoryFilters.forEach(function (c) {\n var foundedFacets = vm.data.facets.filter(function (f) {\n return f.key === c.key\n });\n if (foundedFacets && foundedFacets.length > 0) {\n var facet = foundedFacets[0];\n var result = findRecurisiveFacetByValue(facet.facetList, c.value, c.parentString ? c.parentString : null, null);\n if (result && result.subs && result.subs.length > 0) {\n result.subs.forEach(function (s) {\n s[\"parentString\"] = c.parentString ? c.parentString + \"->\" + c.value : c.value;\n })\n if (c.group == -1 && level - 1 == c.level && result && result.subs && result.subs.length > 0) {\n vm.targetChartData = {\n key: facet.key,\n title: result.value,\n type: facet.type + 10,\n size: 10,\n count: result.count,\n facetList: result.subs,\n parentString: c.parentString ? c.parentString + \"->\" + c.value : c.value\n };\n } else if (c.group == -1 && level - 1 == c.level && result) {\n var foundedFilter = normalCategoryFilters.filter(function (cat) {\n return cat.level == level - 2;\n })[0];\n }\n var alias = {};\n var chipCat = getChipCat(c);\n if (chipCat && chipCat.localVariables) {\n chipCat.localVariables.forEach(function (k) {\n alias[k.language] = k.value;\n })\n }\n vm.data.facets.push({\n key: facet.key,\n title: result.value,\n type: facet.type + 10,\n size: 10,\n count: result.count,\n facetList: result.subs,\n parentString: c.parentString ? c.parentString + \"->\" + c.value : c.value,\n alias: alias\n });\n } else if (c.group == -1 && level - 1 == c.level) {\n var foundedTarget = vm.data.facets.filter(function (x) {\n return result.parentString && x.parentString && x.parentString == result.parentString;\n })[0];\n if (foundedTarget) {\n foundedTarget = JSON.parse(JSON.stringify(foundedTarget));\n if (foundedTarget.subs && foundedTarget.subs.length > 0) {\n foundedTarget.facetList = foundedTarget.facetList.filter(function (ss) {\n return ss.value === result.value;\n });\n }\n vm.targetChartData = foundedTarget;\n }\n }\n }\n })\n }\n /*if (!vm.isOrderActive) {\n if (vm.data.facets && vm.data.facets.length > 1) {\n vm.data.facets.sort(function (a, b) {\n if (a.type > b.type) return 1;\n if (b.type > a.type) return -1;\n return 0;\n })\n }\n }*/\n sortFacets();\n if (normalCategoryFilters && normalCategoryFilters.length > 0) {\n normalCategoryFilters.forEach(function (cFilter) {\n var foundedFacet = vm.data.facets.filter(function (f) {\n return f.key == cFilter.key && cFilter.titleKey == f.title;\n })[0];\n if (foundedFacet)\n vm.data.facets = vm.data.facets.filter(function (f) {\n return f != foundedFacet;\n });\n })\n }\n }\n\n vm.facetMoreAndMore = function (item) {\n if (item.allFacets) {\n vm.moreAndMoreCount += 1;\n item.size = item.size + 10;\n if (item.facetList.length < item.size) item.showMoreAndMore = false;\n return;\n }\n\n vm.moreAndMoreLoading = true;\n vm.moreAndMoreCount += 1;\n item.size = item.size + 10;\n\n api.report.moreAndMoreSearch(vm.reportId, item.key, item.size - 10, vm.parameters)\n .then(function (response) {\n if (response.length < 10) item.showMoreAndMore = false;\n item.facetList = item.facetList.concat(response);\n vm.moreAndMoreLoading = false;\n }, function (err) {\n $log.error(err);\n })\n\n }\n\n function findRecurisiveFacetByValue(facets, value, parent, currentParent) {\n if (!value || !facets || facets.length <= 0) return null;\n for (var i in facets) {\n var f = facets[i];\n if (f.value === value && parent == currentParent) {\n return f;\n } else {\n var p = f.value;\n if (currentParent)\n p = currentParent + \"->\" + f.value;\n var m = findRecurisiveFacetByValue(f.subs, value, parent, p);\n if (m)\n return m;\n }\n }\n return null;\n }\n\n\n function dateFormat(dateStart, dateEnd) {\n return dateStart && dateEnd && (dateStart.toLocaleDateString('tr-TR') + ' - ' + moment(dateEnd).toDate().toLocaleDateString('tr-TR'));\n }\n\n function init() {\n setDate();\n setQueryParameters();\n //initDateRanges();\n search();\n setFilteredFacets();\n setTimeout(function () { createDatePicker(); }, 2000);\n $utils.saveAudit(vm.reportId, \"REPORT\", \"OPEN\", vm.report.name + \" / Operation Report\");\n getIsFlatModeActive();\n $utils.googleAnalyticsSetPageview(\"/report/\" + vm.reportId + \"/overview\");\n $utils.googleAnalyticsSetScreenView(\"Operation Report\");\n }\n init();\n\n function setDate() {\n vm.afterDatePicker = {\n startDate: vm.report.dates && vm.report.dates.startDate ? moment(vm.report.dates.startDate).toDate() : null,\n //endDate: vm.report.dates && vm.report.dates.endDate ? moment(vm.report.dates.endDate).add(1, 'days').toDate() : null\n endDate: vm.report.dates && vm.report.dates.endDate ? moment(vm.report.dates.endDate).startOf('day').add(1, 'days').add(-1, 'seconds').toDate() : null\n };\n if (vm.afterDatePicker && vm.afterDatePicker.startDate && vm.afterDatePicker.endDate) {\n vm.parameters.startDate = vm.afterDatePicker.startDate.toISOString().split('.')[0] + \"Z\";\n vm.parameters.endDate = vm.afterDatePicker.endDate.toISOString().split('.')[0] + \"Z\";\n }\n }\n\n function createDatePickers() {\n if (!vm.isDatePickerCreatorStarted) {\n vm.isDatePickerCreatorStarted = true;\n if ($('#afterreportrange').length || $('#afterreportrange2').length) {\n if (vm.afterDatePicker && vm.afterDatePicker.startDate && vm.afterDatePicker.endDate) {\n createDateComponentTurkish('#afterreportrange', vm.afterDatePicker.startDate, vm.afterDatePicker.endDate);\n createDateComponentEnglish('#afterreportrange2', vm.afterDatePicker.startDate, vm.afterDatePicker.endDate);\n } else {\n createDateComponentTurkish('#afterreportrange', null, null);\n createDateComponentEnglish('#afterreportrange2', null, null);\n }\n\n if (vm.afterDatePicker.startDate && vm.afterDatePicker.endDate) {\n $('#afterreportrange').val(moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY'));\n $('#afterreportrange2').val(moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY'));\n } else {\n $('#afterreportrange').val('Tarih');\n $('#afterreportrange2').val('Tarih');\n }\n\n if ($('#afterreportrange').length) {\n\n $('input[id=\"afterreportrange\"]').on('apply.daterangepicker', function (ev, picker) {\n vm.afterDatePicker = {\n startDate: picker.startDate.toDate(),\n endDate: picker.endDate.toDate()\n };\n //addTemplateReportCookie(\"afterDate\", vm.afterDatePicker);\n $settings.saveUserSettings(\"afterDate\", vm.afterDatePicker, vm.report.id);\n changeDate();\n });\n $('input[id=\"afterreportrange\"]').on('hide.daterangepicker', function (ev, picker) {\n refreshDatePickersFormat();\n });\n }\n\n if ($('#afterreportrange2').length) {\n\n $('input[id=\"afterreportrange2\"]').on('apply.daterangepicker', function (ev, picker) {\n vm.afterDatePicker = {\n startDate: picker.startDate.toDate(),\n endDate: picker.endDate.toDate()\n };\n //addTemplateReportCookie(\"afterDate\", vm.afterDatePicker);\n $settings.saveUserSettings(\"afterDate\", vm.afterDatePicker, vm.report.id);\n changeDate();\n });\n $('input[id=\"afterreportrange2\"]').on('hide.daterangepicker', function (ev, picker) {\n refreshDatePickersFormat();\n });\n }\n vm.dateTypes = [{\n id: 1,\n name: $translate.instant('REPORT.CONTENT_DATE')\n },\n {\n id: 2,\n name: $translate.instant('SHARED.ORDER.UPDATED_DATE')\n },\n {\n id: 3,\n name: $translate.instant('SHARED.ORDER.CREATED_DATE')\n }]\n var l = \"
\" +\n \"\" +\n \"
\";\n $(\".drp-buttons\").prepend($compile(l)($scope));\n \n vm.parameters.searchByDate = vm.paramSearchByDate;\n\n }\n vm.isDatePickerCreatorStarted = false;\n }\n refreshDatePickersFormat();\n }\n\n function createDatePicker() {\n if (($('#afterreportrange').is(':visible') && vm.languageDatePicker == 1) || ($('#afterreportrange2').is(':visible') && vm.languageDatePicker == 2)) { //if the container is visible on the page\n createDatePickers();\n } else {\n setTimeout(createDatePickers, 50); //wait 50 ms, then try again\n }\n }\n\n function setQueryParameters() {\n if ($location.search().query) {\n vm.parameters = JSON.parse(base64.decode($location.search().query));\n if (vm.parameters && vm.parameters.startDate && vm.parameters.endDate) {\n vm.afterDatePicker = {\n startDate: moment(vm.parameters.startDate).toDate(),\n endDate: moment(vm.parameters.endDate).toDate()\n }\n vm.beforeDatePicker = {\n startDate: moment(vm.parameters.startDate).subtract(1, 'quarter').startOf('quarter').toDate(),\n endDate: moment(vm.parameters.startDate).subtract(1, 'quarter').endOf('quarter').toDate()\n }\n vm.parameters.startDate = vm.afterDatePicker.startDate.toISOString().split('.')[0] + \"Z\";\n vm.parameters.endDate = vm.afterDatePicker.endDate.toISOString().split('.')[0] + \"Z\";\n } else if (vm.afterDatePicker && vm.afterDatePicker.startDate && vm.afterDatePicker.endDate) {\n vm.parameters.startDate = vm.afterDatePicker.startDate.toISOString().split('.')[0] + \"Z\";\n vm.parameters.endDate = vm.afterDatePicker.endDate.toISOString().split('.')[0] + \"Z\";\n }\n //if (vm.parameters.filterChips && vm.parameters.filterChips.length > 0) {\n vm.filterChips = ReportService.generateFilterChipsFromFilter(vm.parameters, vm.reportModules);\n //}\n }\n if ($location.search().logs) vm.showLogs = true;\n if ($location.search().url || $location.search().oid) {\n $state.go('app.report.data', {\n id: vm.reportId,\n url: $location.search().url,\n oid: $location.search().oid,\n query: $location.search().query\n });\n }\n }\n\n function search() {\n searchData();\n }\n\n function replicateReport($event) {\n ReportService.replicatePrompt($scope, $event, vm.report.id, user, vm.documentNickname);\n }\n\n function reevaluateReport($event) {\n ReportService.reevaluatePrompt($scope, $event, vm.report.id, user, vm.documentNickname);\n }\n\n function removeDocuments($event) {\n ReportService.deleteReportData($scope, $state, $event, vm.report, vm.parameters, vm.data.count);\n }\n\n function deleteReport($event) {\n if (vm.isFlatModeActive)\n ReportService.warning($scope, $event, $translate.instant(\"REPORT.ERRORS.ACTIVE_WEB_SOURCE_HEADER\"), $translate.instant(\"REPORT.ERRORS.ACTIVE_WEB_SOURCE_BODY\"));\n else\n ReportService.deleteReport($scope, $state, $event, vm.report);\n }\n\n //export starts\n function exportReport(type, $event) {\n ReportService.exportPrompt($scope, $event, vm.report.id, user, vm.parameters, type, vm.data.count);\n }\n\n //export ends\n\n //Key events starts\n angular.element($window).bind('keydown', function (e) {\n if (e.keyCode == 16) {\n vm.ctrlKeyPressing = true;\n vm.groupCtrlCount = vm.groupCtrlCount + 1;\n }\n });\n\n angular.element($window).bind('keyup', function (e) {\n if (e.keyCode == 16) {\n vm.ctrlKeyPressing = false;\n //vm.groupCtrlCount = Math.floor(Math.random() * 10000) + 1;\n //search();\n\n }\n });\n //Key events ends\n\n //Bookmarks starts\n function saveBookmark(title, event) {\n var request = {\n url: $location.search().query,\n title: title,\n reportId: vm.reportId\n };\n event.target.disabled = true;\n api.report.saveBookmark(request)\n .then(function (res) {\n vm.allBookmarks = res;\n vm.bookmarks = vm.allBookmarks.filter(function (k) { return k.userName != null });\n vm.generalBookmarks = vm.allBookmarks.filter(function (k) { return k.userName == null });\n vm.newBookmarkTitle = null;\n event.target.disabled = false;\n }, function (response) {\n console.log(response);\n event.target.disabled = false;\n })\n }\n\n //General ookmarks starts\n this.saveGeneralBookmark = function (title, event) {\n var request = {\n url: $location.search().query,\n title: title,\n reportId: vm.reportId\n };\n event.target.disabled = true;\n api.report.saveGeneralBookmark(request)\n .then(function (res) {\n vm.allBookmarks = res;\n vm.bookmarks = vm.allBookmarks.filter(function (k) { return k.userName != null });\n vm.generalBookmarks = vm.allBookmarks.filter(function (k) { return k.userName == null });\n vm.newBookmarkTitle = null;\n vm.newGeneralBookmarkTitle = null;\n event.target.disabled = false;\n }, function (response) {\n console.log(response);\n event.target.disabled = false;\n })\n }\n\n function deleteBookmark(id, event) {\n var request = {\n reportId: vm.reportId,\n id: id\n };\n event.target.disabled = true;\n api.report.deleteBookmark(request)\n .then(function (res) {\n vm.allBookmarks = res;\n vm.bookmarks = vm.allBookmarks.filter(function (k) { return k.userName != null });\n vm.generalBookmarks = vm.allBookmarks.filter(function (k) { return k.userName == null });\n event.target.disabled = false;\n }, function (response) {\n console.log(response);\n })\n }\n\n function goToBookmark(query) {\n $location.search('query', query);\n if ($location.search().query) {\n setQueryParameters();\n search();\n }\n }\n\n //Bookmarks ends\n\n vm.getAttributeAlias = function (tag) {\n if (tag.alias) {\n if ($translate.use() == \"tr\" && tag.alias.tr) return tag.alias.tr;\n if ($translate.use() == \"en\" && tag.alias.en) return tag.alias.en;\n }\n return vm.getFilteredFacetTitle(tag.title);\n }\n\n vm.getCategoryChipAlias = function (chip) {\n var title = chip.value;\n var category = getChipCat(chip);\n if (category && category.localVariables) {\n var localVariable = category.localVariables.filter(function (k) { return $translate.use() == k.language; })[0];\n if (localVariable) title = localVariable.value;\n }\n return title;\n }\n\n function getChipCat(chip) {\n var category;\n var categories = vm.categories.filter(function (k) { return k.name == chip.value; });\n if (chip.parentString) {\n category = categories.filter(function (k) { return k.parentModuleCategory != null && k.parentModuleCategory.name == chip.titleKey; })[0];\n } else {\n category = categories.filter(function (k) { return k.parentModuleCategory == null })[0]\n }\n return category;\n }\n\n //date component starts\n function refreshDatePickersFormat() {\n if (vm.afterDatePicker.startDate && vm.afterDatePicker.endDate) {\n var afterValue = getDatePickerValue(vm.afterDatePicker);\n var dateRanges = {};\n if (vm.languageDatePicker == 1)\n dateRanges = vm.dateRanges;\n else if (vm.languageDatePicker == 2)\n dateRanges = vm.dateRangesEn;\n Object.keys(dateRanges).forEach(function (k) {\n if (dateRanges[k][0].format('DD/MM/YYYY') == moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') && dateRanges[k][1].format('DD/MM/YYYY') == moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY')) {\n afterValue = k;\n }\n })\n if (afterValue) {\n $('#afterreportrange').val(afterValue);\n $('#afterreportrange2').val(afterValue);\n } else {\n $('#afterreportrange').val(moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY'));\n $('#afterreportrange2').val(moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY'));\n }\n }\n else {\n $('#afterreportrange').val('Tarih');\n $('#afterreportrange2').val('Tarih');\n }\n\n }\n\n function getDatePickerValue(picker) {\n var value = null;\n if (picker && picker.startDate && picker.endDate) {\n if (picker.startDate.getDate() == 1 && picker.startDate.getMonth() + 1 == 1 &&\n picker.endDate.getDate() == 31 && picker.endDate.getMonth() + 1 == 3 &&\n picker.startDate.getYear() == picker.endDate.getYear()) {\n value = \"Q1 (\" + picker.startDate.getFullYear() + \")\";\n } else if (picker.startDate.getDate() == 1 && picker.startDate.getMonth() + 1 == 4 &&\n picker.endDate.getDate() == 30 && picker.endDate.getMonth() + 1 == 6 &&\n picker.startDate.getYear() == picker.endDate.getYear()) {\n value = \"Q2 (\" + picker.startDate.getFullYear() + \")\";\n } else if (picker.startDate.getDate() == 1 && picker.startDate.getMonth() + 1 == 7 &&\n picker.endDate.getDate() == 30 && picker.endDate.getMonth() + 1 == 9 &&\n picker.startDate.getYear() == picker.endDate.getYear()) {\n value = \"Q3 (\" + picker.startDate.getFullYear() + \")\";\n } else if (picker.startDate.getDate() == 1 && picker.startDate.getMonth() + 1 == 10 &&\n picker.endDate.getDate() == 31 && picker.endDate.getMonth() + 1 == 12 &&\n picker.startDate.getYear() == picker.endDate.getYear()) {\n value = \"Q4 (\" + picker.startDate.getFullYear() + \")\";\n }\n }\n return value;\n }\n\n //date component ends\n\n function isNullArray(array) {\n if (!array || array.length < 1)\n return true;\n else\n return false;\n }\n\n vm.datePickerLanguage = {\n 'Mon': 'Pzt',\n 'Tue': 'Sal',\n 'Wed': 'Çar',\n 'Thu': 'Per',\n 'Fri': 'Cum',\n 'Sat': 'Cmt',\n 'Sun': 'Paz',\n 'This Week': 'Bu Hafta',\n \"January\": \"Ocak\",\n \"February\": \"Şubat\",\n \"March\": \"Mart\",\n \"April\": \"Nisan\",\n \"May\": \"Mayıs\",\n \"June\": \"Haziran\",\n \"July\": \"Temmuz\",\n \"August\": \"Ağustos\",\n \"September\": \"Eylül\",\n \"October\": \"Ekim\",\n \"November\": \"Kasım\",\n \"December\": \"Aralık\"\n };\n\n function buildToggler(navID) {\n return function () {\n // Component lookup should always be available since we are not using `ng-if`\n $mdSidenav(navID)\n .toggle()\n .then(function () {\n $log.debug(\"toggle \" + navID + \" is done\");\n });\n };\n }\n\n\n vm.categoryTextTooltip = \"\";\n vm.colors = ['blue-bg', 'blue-grey-bg', 'orange-bg', 'pink-bg', 'purple-bg'];\n vm.colors = [\n [\"#1f77b4\", \"#fff\"],\n [\"#aec7e8\", \"#000\"],\n [\"#ff7f0e\", \"#000\"],\n [\"#ffbb78\", \"#000\"],\n [\"#2ca02c\", \"#fff\"],\n [\"#98df8a\", \"#000\"],\n [\"#d62728\", \"#fff\"],\n [\"#ff9896\", \"#000\"],\n [\"#9467bd\", \"#000\"],\n [\"#c5b0d5\", \"#000\"],\n [\"#8c564b\", \"#fff\"],\n [\"#c49c94\", \"#000\"],\n [\"#e377c2\", \"#000\"],\n [\"#f7b6d2\", \"#000\"],\n [\"#7f7f7f\", \"#fff\"],\n [\"#c7c7c7\", \"#000\"],\n [\"#bcbd22\", \"#000\"],\n [\"#dbdb8d\", \"#000\"],\n [\"#17becf\", \"#000\"],\n [\"#9edae5\", \"#000\"]\n ];\n\n vm.dateRanges = {\n 'Bugün': [moment(), moment()],\n 'Dün': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],\n 'Son 7 Gün': [moment().subtract(6, 'days'), moment()],\n 'Son 30 Gün': [moment().subtract(29, 'days'), moment()],\n 'Bu Ay': [moment().startOf('month'), moment().endOf('month')],\n 'Geçen Ay': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')],\n 'Bu Yıl': [moment().startOf('year'), moment().endOf('year')],\n 'Geçen Yıl (Tümü)': [moment().startOf('year').subtract(1, 'y'), moment().endOf('year').subtract(1, 'y')],\n 'Bu Yıl (YTD)': [moment().startOf('year'), moment().endOf('day')],\n 'Geçen Yıl (YTD)': [moment().startOf('year').subtract(1, 'y'), moment().endOf('day').subtract(1, 'y')],\n 'Önceki Yıl (Tümü)': [moment().startOf('year').subtract(2, 'y'), moment().endOf('year').subtract(2, 'y')]\n } \n\n vm.dateRanges['Q1 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 0, 1)), moment(new Date(moment().year(), 2, 31))];\n vm.dateRanges['Q2 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 3, 1)), moment(new Date(moment().year(), 5, 30))];\n vm.dateRanges['Q3 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 6, 1)), moment(new Date(moment().year(), 8, 30))];\n vm.dateRanges['Q4 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 9, 1)), moment(new Date(moment().year(), 11, 31))];\n vm.dateRanges['Q1 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 0, 1)), moment(new Date(moment().year() - 1, 2, 31))];\n vm.dateRanges['Q2 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 3, 1)), moment(new Date(moment().year() - 1, 5, 30))];\n vm.dateRanges['Q3 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 6, 1)), moment(new Date(moment().year() - 1, 8, 30))];\n vm.dateRanges['Q4 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 9, 1)), moment(new Date(moment().year() - 1, 11, 31))];\n\n vm.dateRangesEn = {\n 'Today': [moment(), moment()],\n 'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],\n 'Last 7 Days': [moment().subtract(6, 'days'), moment()],\n 'Last 30 Days': [moment().subtract(29, 'days'), moment()],\n 'This Month': [moment().startOf('month'), moment().endOf('month')],\n 'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')],\n 'This Year': [moment().startOf('year'), moment().endOf('year')],\n 'Last Year (All)': [moment().startOf('year').subtract(1, 'y'), moment().endOf('year').subtract(1, 'y')],\n 'This Year (YTD)': [moment().startOf('year'), moment().endOf('day')],\n 'Last Year (YTD)': [moment().startOf('year').subtract(1, 'y'), moment().endOf('day').subtract(1, 'y')],\n 'Previous Year (All)': [moment().startOf('year').subtract(2, 'y'), moment().endOf('year').subtract(2, 'y')]\n } \n\n vm.dateRangesEn['Q1 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 0, 1)), moment(new Date(moment().year(), 2, 31))];\n vm.dateRangesEn['Q2 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 3, 1)), moment(new Date(moment().year(), 5, 30))];\n vm.dateRangesEn['Q3 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 6, 1)), moment(new Date(moment().year(), 8, 30))];\n vm.dateRangesEn['Q4 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 9, 1)), moment(new Date(moment().year(), 11, 31))];\n vm.dateRangesEn['Q1 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 0, 1)), moment(new Date(moment().year() - 1, 2, 31))];\n vm.dateRangesEn['Q2 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 3, 1)), moment(new Date(moment().year() - 1, 5, 30))];\n vm.dateRangesEn['Q3 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 6, 1)), moment(new Date(moment().year() - 1, 8, 30))];\n vm.dateRangesEn['Q4 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 9, 1)), moment(new Date(moment().year() - 1, 11, 31))];\n\n function createDateComponentTurkish(id, startDate, endDate) {\n $(id).daterangepicker({\n startDate: moment(startDate).toDate(),\n endDate: moment(endDate).toDate(),\n ranges: vm.dateRanges,\n opens: 'left',\n //alwaysShowCalendars: true,\n //autoUpdateInput: false,\n //ranges: createQuarters(),\n locale: {\n format: 'DD/MM/YYYY',\n applyLabel: \"Uygula\",\n cancelLabel: \"Vazgeç\",\n \"fromLabel\": \"Dan\",\n \"toLabel\": \"a\",\n \"customRangeLabel\": \"Seç\",\n \"daysOfWeek\": [\n \"Pz\",\n \"Pt\",\n \"Sl\",\n \"Çr\",\n \"Pr\",\n \"Cm\",\n \"Ct\"\n ],\n \"monthNames\": [\n \"Ocak\",\n \"Şubat\",\n \"Mart\",\n \"Nisan\",\n \"Mayıs\",\n \"Haziran\",\n \"Temmuz\",\n \"Ağustos\",\n \"Eylül\",\n \"Ekim\",\n \"Kasım\",\n \"Aralık\"\n ],\n \"firstDay\": 1\n }\n //ranges: createQuarters()\n }, refreshDatePickersFormat);\n }\n\n function createDateComponentEnglish(id, startDate, endDate) {\n $(id).daterangepicker({\n startDate: moment(startDate).toDate(),\n endDate: moment(endDate).toDate(),\n ranges: vm.dateRangesEn,\n opens: 'left',\n //alwaysShowCalendars: true,\n //autoUpdateInput: false,\n //ranges: createQuarters(),\n locale: {\n format: 'DD/MM/YYYY',\n applyLabel: \"Apply\",\n cancelLabel: \"Cancel\",\n \"fromLabel\": \"from\",\n \"toLabel\": \"to\",\n \"customRangeLabel\": \"Choose\",\n \"daysOfWeek\": [\n \"Sn\",\n \"Mn\",\n \"Tu\",\n \"Wn\",\n \"Th\",\n \"Fr\",\n \"St\"\n ],\n \"monthNames\": [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\"\n ],\n \"firstDay\": 1\n }\n //ranges: createQuarters()\n }, refreshDatePickersFormat);\n }\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.report')\n .controller('ReportDashboardTemplate3', ReportDashboardTemplate3);\n\n /** @ngInject */\n function ReportDashboardTemplate3($scope, $state, $translate, $stateParams, $log, api, $q, $settings, $$report, $mdSidenav, ReportService, ReportTemplate1ChartParserService, base64, ReportQueryParserService, user, $location, toastService, appSettings, $compile, $utils) {\n\n var vm = this;\n if (!$location.search().query && ReportService.getQuery($$report.id) != null) {\n $location.search('query', ReportService.getQuery($$report.id).query);\n }\n moment.locale('tr');\n vm.searching = false;\n vm.translate = $translate;\n vm.user = user;\n vm.isUserRestricted = vm.user.restricted;\n vm.report = $$report;\n vm.reportId = $stateParams.id;\n vm.sideNavEnabled = true;\n vm.reportFields = $$report.reportFields;\n vm.categories = $$report.moduleCategories;\n vm.activeSources = appSettings.activeSources;\n vm.isFlatModeActive = false;\n vm.userSettings = $settings.reportSettingsList ? $settings.reportSettingsList.filter(function (r) { return r.reportId == vm.report.id; })[0] : null;\n vm.reportSettings = $$report.reportSettings;\n vm.documentNickname = $translate.use() == \"tr\" ? vm.reportSettings.commonSettings.documentNicknameTr : vm.reportSettings.commonSettings.documentNicknameEn;\n vm.reportModules = $$report.reportModules;\n vm.reportModuleIds = vm.reportModules.map(function (k) {\n return k.moduleId;\n });\n vm.selectedDashboardTemplate = $stateParams.selectedDashboard ? $stateParams.selectedDashboard : $$report.selectedDashboard ? $$report.selectedDashboard : $$report.dashboardTemplate ? $$report.dashboardTemplate : 1;\n vm.languageDatePicker = $translate.use() === \"tr\" ? 1 : 2;\n vm.isDatePickerCreatorStarted = false;\n vm.noTrainedModule = !($$report.hasTrainedModule);\n vm.dashboardModuleId = $stateParams.dashboardModuleId;\n vm.dashboardClassificationModule = $stateParams.dashboardClassificationModule;\n vm.hasSentimentModule = vm.reportModules.filter(function (r) { return r.moduleTypeId == 5 | r.moduleTypeId == 7; }).length > 0;\n vm.allBookmarks = $$report.bookmarks;\n vm.bookmarks = vm.allBookmarks.filter(function (k) { return k.userName != null });\n vm.generalBookmarks = vm.allBookmarks.filter(function (k) { return k.userName == null });\n vm.bookmarkSidenav = buildToggler('right');\n vm.filterSidenav = buildToggler('main-sidenav');\n vm.filterChips = ReportService.getFilterChips(vm.report.id, vm.reportSettings.commonSettings.filterChips);\n vm.categoryAlieses = [];\n vm.afterDatePicker = {\n startDate: null,\n endDate: null\n };\n vm.categoryReportFields = [];\n vm.stringReportFields = [];\n vm.beforeDatePicker = {\n startDate: null,\n endDate: null\n };\n vm.rightBottomSettingsButton = {\n isOpen: false,\n selectedMode: 'md-scale'\n };\n vm.data = {\n facets: []\n };\n vm.allData = {\n facets: []\n };\n vm.paramSearchByDate = $stateParams.searchByDate == undefined ? 1 : $stateParams.searchByDate;\n vm.parameters = {\n query: null,\n date: null,\n startDate: null,\n endDate: null,\n searchByDate: vm.paramSearchByDate,\n sort: null,\n gap: null,\n row: 10,\n start: 0,\n filter: [],\n category: [],\n facet: [],\n feedback: null,\n assignment: null,\n highlight: false,\n defaultFacet: true,\n patternFilter: [],\n showSimilar: false\n };\n vm.formulaTable = {};\n vm.charts = {\n categoryTimeline: {},\n sentimentTimeline: {}\n }\n vm.numericReportFields = vm.reportFields.filter(function (f) {\n return ReportService.isNumericNominal(f.fieldType);\n });\n vm.radarChartFields = vm.reportFields.filter(function (f) {\n return (f.fieldName.startsWith(\"category_m\") && !f.fieldName.endsWith(\"_u_ss\")) || ReportService.isTextNominal(f.fieldType);\n });\n vm.selectedTimelineField = vm.numericReportFields[0];\n vm.results = null;\n vm.moreAndMoreCount = 1;\n vm.confusionSortItem = \"percent\";\n vm.matrixDataRefresh = false;\n vm.gaugeCategoryData = [];\n vm.radarChartData = {\n data: null,\n nickname: null,\n allDataNickname: null,\n sentiment: \"negative\",\n quantity: 5\n }\n vm.formulaTableXAxisLimit = 20;\n vm.searchTimeline = searchTimeline;\n vm.clickBreadCrumb = clickBreadCrumb;\n vm.padLeft = padLeft;\n vm.clickGaugeChartItem = clickGaugeChartItem;\n vm.selectedTimelineValue = null;\n vm.selectedOtherTimelineValue = null;\n vm.tableColumns = [];\n vm.tableRows = [];\n vm.filteredTableColumn = {};\n vm.lineChartData = [];\n vm.activeDashboardTemplates = vm.report.activeTemplates;\n vm.activeTemplateSize = 0;\n Object.keys(vm.activeDashboardTemplates).forEach(function (key) {\n if (vm.activeDashboardTemplates[key]) vm.activeTemplateSize = vm.activeTemplateSize + 1;\n })\n vm.showLogs = false;\n vm.addStopLabelGroup = addStopLabelGroup;\n vm.addSingleStopLabel = addSingleStopLabel;\n vm.addStopLabels = addStopLabels;\n vm.addStopWord = addStopWord;\n vm.removeStopLabels = removeStopLabels;\n vm.removeStopWords = removeStopWords;\n vm.stopLabelsToAdd = [];\n vm.stopLabelsToRemove = [];\n vm.stopWordsToRemove = [];\n\n vm.openSaveDefaultReportFiltersDialog = openSaveDefaultReportFiltersDialog;\n vm.groupCtrlCount = 3000;\n\n vm.language = $translate.use();\n setInterval(function () { vm.language = $translate.use(); }, 100);\n $scope.$watch('vm.language', function () {\n vm.documentNickname = $translate.use() == \"tr\" ? vm.reportSettings.commonSettings.documentNicknameTr : vm.reportSettings.commonSettings.documentNicknameEn;\n \n if ($$report.hasTrainedModule) {\n if ($translate.use() === \"tr\") {\n vm.languageDatePicker = 1;\n } else if ($translate.use() === \"en\") {\n vm.languageDatePicker = 2;\n }\n createDatePicker();\n setChartCategoryAliases();\n if (vm.gaugeCategoryData != null) {\n setGaugeChart(vm.gaugeCategoryData.apiResponse);\n }\n if (vm.confusions != null) {\n setConfusions(vm.confusions.apiResponse);\n }\n if (vm.radarChartData != null) {\n vm.radarChartData.data = calculateRadarChartData(vm.radarChartData.apiResponse);\n }\n }\n });\n\n function searchTimeline() {\n var start = Date.now();\n vm.searching = true;\n vm.formulaTableXAxisLimit = 20;\n vm.parameters.row = 0;\n vm.parameters.start = 0;\n vm.parameters.highlight = false;\n vm.selectedTimelineValue = null;\n vm.selectedOtherTimelineValue = null;\n vm.selectedStandartNormalCurveValue = null;\n /*\n if (moment(vm.afterDatePicker.endDate).diff(moment(vm.afterDatePicker.startDate), \"months\", true) <= 2) {\n vm.parameters.gap = \"1DAY\";\n } else {\n vm.parameters.gap = \"1MONTH\";\n }*/\n vm.parameters.gap = null;\n //if (vm.filterChips && vm.filterChips.length > 0) {\n //vm.parameters.filterChips = vm.filterChips;\n //} else {\n vm.parameters.filterChips = [];\n //}\n vm.filterChips = vm.filterChips.filter(function (item) {\n return item.type != 600;\n });\n if (vm.parameters.query && vm.parameters.query.length > 0) {\n var filterQueryChip = {\n key: \"content\",\n value: vm.parameters.query,\n type: 600,\n group: -1,\n operand: \"AND\",\n titleKey: \"Query\"\n }\n vm.filterChips.push(filterQueryChip);\n }\n findKeywords();\n setNormalFacetFilters();\n setCategoryFacetFilters();\n setFacetFieldsQuery();\n vm.parameters.facet = [];\n vm.parameters.defaultFacet = true;\n vm.parameters.facetSearch = null;\n vm.parameters.facetQueries = [];\n vm.parameters.periods = null;\n encodeFilters(vm.parameters);\n setFilteredFacets();\n var beforeQuery = JSON.parse(JSON.stringify(vm.parameters));\n if (!vm.beforeDatePicker || !vm.beforeDatePicker.startDate || !vm.beforeDatePicker.endDate) {\n vm.searching = false;\n vm.data.count = vm.report.dataCount;\n return;\n }\n beforeQuery.startDate = vm.beforeDatePicker.startDate.toISOString().split('.')[0] + \"Z\";\n beforeQuery.endDate = vm.beforeDatePicker.endDate.toISOString().split('.')[0] + \"Z\";\n beforeQuery.gap = null;\n if (vm.dashboardClassificationModule) {\n setBreadCrumbs();\n }\n if (vm.showLogs) {\n console.log(vm.parameters)\n console.log(beforeQuery)\n }\n \n $utils.googleAnalyticsSetAction(\"REPORT\", \"SCORE SEARCH\", JSON.stringify(vm.parameters) + \" / \" + JSON.stringify(beforeQuery));\n var searchPromises = [api.report.comparativeSearch(vm.report.id, vm.parameters), api.report.comparativeSearch(vm.report.id, beforeQuery)];\n $q.all(searchPromises).then(function (results) {\n $utils.googleAnalyticsSetTiming(\"Score Report Search Response\", vm.reportId, Date.now() - start);\n if (vm.showLogs) console.log(results)\n findFilteredTableColumn();\n vm.beforeResult = results[1];\n results = results[0];\n vm.results = results;\n Object.keys(vm.results).forEach(function (k) {\n results[k] = results[k] ? results[k] : results[\"result\"];\n vm.beforeResult[k] = vm.beforeResult[k] ? vm.beforeResult[k] : vm.beforeResult[\"result\"];\n })\n var afterResponse = results[\"result\"];\n var afterAllDataResponse = results[\"allData\"];\n vm.afterAllDataResponse = results[\"allData\"];\n vm.data.facets = afterResponse.facets;\n vm.allData.facets = afterAllDataResponse.facets;\n setupFacets(vm.allData, true);\n vm.data = setupFacets(vm.data);\n vm.data.documents = afterResponse.reportDocumentList;\n vm.data.count = afterResponse.count;\n vm.data.localVariables = afterResponse.localVariables;\n groupNerFacets()\n setGaugeChart(results[\"result\"])\n setConfusions(results[\"result\"]);\n vm.searching = false;\n vm.sideNavEnabled = true;\n var radarChartData = [];\n radarChartData.push(vm.targetChartData ? vm.targetChartData : results[\"result\"]);\n radarChartData.push(vm.allDataTargetChartData ? vm.allDataTargetChartData : results[\"allData\"]);\n vm.radarChartData.apiResponse = radarChartData;\n vm.radarChartData.data = calculateRadarChartData(radarChartData);\n vm.radarChartData.nickname = findNicknameForYField();\n vm.radarChartData.allDataNickname = vm.formulaTable.allDataNickname;\n calculateTableFields(vm.data);\n getLastSelectedChartValues();\n vm.setFormulaTimelineChart(0, vm.selectedTimelineValue, false);\n vm.setFormulaTimelineChart(1, vm.selectedOtherTimelineValue, false);\n //eliminateFacetFilteredValues()\n //setTimeout(function () { }, 15000);\n createDatePicker();\n jQuery(document).ready(checkContainer);\n vm.topScroll = 0;\n vm.leftScroll = 0;\n vm.dataCopy = JSON.parse(JSON.stringify(vm.data));\n vm.calculateStandartDistrubutionCurveData();\n vm.setStandartNormalCurveChart(vm.selectedStandartNormalCurveValue, false);\n measureTimings(start);\n }, function (error) {\n $log.error(error);\n vm.sideNavEnabled = true;\n })\n }\n\n function groupNerFacets() {\n var nerFacets = vm.data.facets.filter(function (k) { return k.key.startsWith('ner_') })\n vm.data.facets = vm.data.facets.filter(function (k) { return !k.key.startsWith('ner_') })\n if (nerFacets.length > 0) {\n var order = nerFacets[0].order;\n nerFacets.forEach(function (k) {\n if (k.order && Number(k.order) < Number(order)) {\n order = k.order;\n }\n })\n nerFacets.sort(function (a, b) {\n return a.order - b.order\n });\n vm.data.facets.push({\n \"key\": \"ner_\",\n \"title\": $translate.instant('SHARED.NAMEDENTITY'),\n \"facets\": nerFacets,\n \"group\": true,\n \"facetList\": [\"a\"],\n \"type\": 250,\n \"order\": order\n })\n sortFacets();\n }\n }\n\n function sortFacets() {\n vm.isOrderActive = vm.data.facets.filter(function (f) {\n return Number(f.order) > 1;\n }).length > 0;\n if (!vm.isOrderActive) {\n vm.data.facets.sort(function (a, b) {\n return a.type - b.type\n });\n } else {\n vm.data.facets.sort(function (a, b) {\n return Number(a.order) - Number(b.order)\n });\n }\n }\n\n function measureTimings(start) {\n if ($('#dashboard3').is(':visible')) { //if the container is visible on the page\n $utils.googleAnalyticsSetTiming('Score Report Page Load', vm.reportId, Date.now() - start)\n } else {\n setTimeout(function () { measureTimings(start) }, 200); //wait 50 ms, then try again\n }\n }\n\n function findKeywords() {\n vm.parameters.highlight = false;\n vm.keywords = [];\n api.report.keywords(vm.report.id, vm.parameters)\n .then(function (response) {\n var keywords = response.reportKeywords;\n vm.keywordDocumentLimit = response.keywordDocumentLimit;\n var parameters = JSON.parse(JSON.stringify(vm.parameters));\n keywords.forEach(function (k) {\n parameters.query = \"\\\"\" + k.text + \"\\\"\";\n k.parameters = base64.encode(JSON.stringify(parameters));\n k.reportId = vm.report.id;\n k.rightClickFunc = vm.addStopLabelGroup;\n })\n\n vm.keywords = keywords;\n },\n function (response) {\n $log.error(response);\n });\n }\n\n function findStopWords() {\n api.report.getStopWords(vm.report.id)\n .then(function (response) {\n vm.stopWords = response.map(function (f) { return f.word; });\n vm.getStopWordsProcessing = false;\n },\n function (response) {\n $log.error(response);\n });\n }\n\n function findStopLabels() {\n api.report.getStopLabels(vm.report.id)\n .then(function (r) {\n vm.stopLabels = r.map(function (f) { return f.name; });\n vm.getStopLabelsProcessing = false;\n },\n function (response) {\n $log.error(response);\n });\n }\n\n vm.findStopLabelsAndStopWords = function () {\n if (!vm.isFindStopLabelsAndStopWordsProcessDone) {\n vm.getStopWordsProcessing = true;\n vm.getStopLabelsProcessing = true;\n findStopWords();\n findStopLabels();\n }\n vm.isFindStopLabelsAndStopWordsProcessDone = true;\n }\n\n function addStopWord() {\n vm.stopWordToAdd = vm.stopWordToAdd != null ? vm.stopWordToAdd.trim() : vm.stopWordToAdd;\n if (vm.stopWordToAdd == null || vm.stopWordToAdd == \"\" || vm.stopWords.includes(vm.stopWordToAdd)) {\n if (vm.stopWordToAdd == \"\") toastService.serverError($translate.instant('REPORT.KEYWORD_CHART.EMPTY_STOPWORDS'));\n vm.stopWordToAdd = '';\n return;\n }\n vm.keywords = vm.keywords.filter(function (y) {\n var regexp = new RegExp('(\\\\s|^)' + vm.stopWordToAdd + \"(\\\\s|$)\", 'i')\n return !y.text.match(regexp);\n })\n vm.addStopWordProcessing = true;\n api.report.putStopWords(vm.report.id, [vm.stopWordToAdd])\n .then(function (res) {\n vm.addStopWordProcessing = false;\n }, function (err) {\n console.log(err);\n vm.addStopWordProcessing = false;\n })\n vm.stopWords.push(vm.stopWordToAdd);\n vm.stopWordToAdd = '';\n }\n\n function addSingleStopLabel() {\n vm.stopLabelToAdd = vm.stopLabelToAdd != null ? vm.stopLabelToAdd.trim() : vm.stopLabelToAdd;\n if (vm.stopLabelToAdd == null || vm.stopLabelToAdd == \"\" || vm.stopLabels.includes(vm.stopLabelToAdd)) {\n if (vm.stopLabelToAdd == \"\") toastService.serverError($translate.instant('REPORT.KEYWORD_CHART.EMPTY_STOPLABEL'));\n vm.stopLabelToAdd = '';\n return;\n }\n addStopLabelGroup([vm.stopLabelToAdd]);\n vm.stopLabelToAdd = '';\n }\n\n function addStopLabelGroup(texts) {\n vm.addStopLabelProcessing = true;\n api.report.postStopLabels(vm.report.id, texts)\n .then(function (res) {\n vm.addStopLabelProcessing = false;\n }, function (err) {\n console.log(err);\n vm.addStopLabelProcessing = false;\n })\n var deletedKeywordList = [];\n var deletedNoncategorizedKeywords = [];\n texts.forEach(function (x) {\n vm.stopLabels.push(x);\n if (vm.keywords.find(function (f) { return x.includes(f.text); }) != null)\n deletedKeywordList.push(vm.keywords.find(function (f) { return x.includes(f.text); }));\n });\n\n if (deletedKeywordList && deletedKeywordList.length > 0) {\n deletedKeywordList.forEach(function (x) { vm.deletedKeywords.push(x); });\n }\n vm.keywords = vm.keywords.filter(function (x) { return !texts.includes(x.text); });\n }\n\n function addStopLabels() {\n var toAdd = vm.stopLabelsToAdd.map(function (x) {\n return x.text;\n });\n if (toAdd.length == 0) {\n toastService.serverError($translate.instant('REPORT.KEYWORD_CHART.EMPTY_STOPLABEL'));\n return;\n }\n addStopLabelGroup(toAdd);\n vm.stopLabelsToAdd = [];\n }\n\n function removeStopLabels() {\n vm.stopLabels = vm.stopLabels.filter(function (item) {\n return vm.stopLabelsToRemove.indexOf(item) < 0;\n });\n if (vm.deletedKeywords && vm.deletedKeywords.length > 0) {\n vm.deletedKeywords.forEach(function (x) {\n if (vm.stopLabelsToRemove.includes(x.text)) {\n vm.keywords.push(x)\n }\n })\n vm.deletedKeywords = vm.deletedKeywords.filter(function (f) { return !vm.stopLabelsToRemove.includes(f.text); });\n }\n api.report.deleteStopLabels(vm.report.id, vm.stopLabelsToRemove)\n .then(function (response) {\n },\n function (response) {\n $log.error(response);\n });\n vm.stopLabelsToRemove = [];\n }\n\n function removeStopWords() {\n vm.stopWords = vm.stopWords.filter(function (item) {\n return vm.stopWordsToRemove.indexOf(item) < 0;\n });\n api.report.deleteStopWords(vm.report.id, vm.stopWordsToRemove)\n .then(function (response) {\n },\n function (response) {\n $log.error(response);\n });\n vm.stopWordsToRemove = [];\n }\n\n function encodeFilters(query) {\n var encodedFilters = base64.encode(JSON.stringify(query));\n $location.search('query', encodedFilters);\n ReportService.setQuery(vm.report.id, encodedFilters);\n }\n\n vm.facetMoreAndMore = function (item) {\n if (item.allFacets) {\n vm.moreAndMoreCount += 1;\n item.size = item.size + 10;\n if (item.facetList.length < item.size) item.showMoreAndMore = false;\n return;\n }\n\n vm.moreAndMoreLoading = true;\n vm.moreAndMoreCount += 1;\n item.size = item.size + 10;\n\n api.report.moreAndMoreSearch(vm.reportId, item.key, item.size-10, vm.parameters)\n .then(function (response) {\n if (response.length < 10) item.showMoreAndMore = false;\n item.facetList = item.facetList.concat(response);\n vm.moreAndMoreLoading = false;\n }, function (err) {\n $log.error(err);\n })\n }\n\n vm.exportExcel = function (type, tableName, name, fn, dl) {\n var elt = document.getElementById(tableName);\n var wb = XLSX.utils.table_to_book(elt, { sheet: \"Sheet JS\" });\n return dl ?\n XLSX.write(wb, { bookType: type, bookSST: true, type: 'base64' }) :\n XLSX.writeFile(wb, fn || (name + \".\" + (type || 'xlsx')));\n }\n\n function setChartCategoryAliases() {\n var categoryAliases = [];\n vm.categories.forEach(function (k) {\n var localVariable = k.localVariables.filter(function (m) { return m.language == $translate.use(); })[0];\n if (localVariable) {\n categoryAliases.push({\n aliasName: localVariable.value,\n categoryId: k.id,\n categoryName: k.name\n })\n }\n })\n vm.categoryAlieses = categoryAliases;\n }\n\n vm.getFilteredFacetTitle = function (title) {\n if (!vm.afterAllDataResponse) return title;\n var reportField = vm.reportFields.filter(function (a) {\n return a.fieldTitle == title;\n })[0]\n if (reportField) {\n var alias = vm.afterAllDataResponse.localVariables.filter(function (k) {\n return k.fieldName == reportField.fieldName;\n })\n if (alias[0] != null && alias[0].alias != null) {\n if ($translate.use() == \"tr\" && alias[0].alias.tr != null) return alias[0].alias.tr;\n else if ($translate.use() == \"en\" && alias[0].alias.en != null) return alias[0].alias.en;\n else return title;\n }\n }\n return title;\n }\n\n vm.getFieldHierarchyFieldTitle = function (key) {\n var reportField = vm.report.reportFields.filter(function (k) {\n return k.fieldName == key;\n })\n return reportField.length > 0 ? reportField[0].fieldTitle : \"\";\n }\n\n vm.getFacetValueAlias = function (title, value, type) {\n if (String(value).startsWith(\"id:\\\"\")) {\n var values = value.split(\"_\");\n if (values[1] != null) {\n return \"id:\\\"\" + values[1];\n }\n }\n if (vm.dataCopy == null) return value;\n var reportField = vm.reportFields.filter(function (a) {\n return a.fieldTitle == title;\n })[0]\n if (!reportField) {\n reportField = vm.reportFields.filter(function (a) {\n return a.fieldName == title;\n })[0]\n }\n if (reportField) {\n var localVariable = vm.dataCopy.localVariables.filter(function (k) {\n return k.fieldName == reportField.fieldName;\n })\n\n if (localVariable[0] != null && localVariable[0].valueAliases != null) {\n var valueLocalVariable = localVariable[0].valueAliases.filter(function (k) { return k.itemValue == value.toString(); })\n\n if (valueLocalVariable[0] != null) {\n if ($translate.use() == \"tr\" && valueLocalVariable[0].tr != null) return valueLocalVariable[0].tr;\n else if ($translate.use() == \"en\" && valueLocalVariable[0].en != null) return valueLocalVariable[0].en;\n else return value;\n }\n }\n }\n return value;\n }\n\n vm.getCategoryAlias = function (child) {\n var cat = child.category;\n if (!cat) return child.value;\n var title = cat.name;\n if (cat.localVariables) {\n var localVariable = cat.localVariables.filter(function (k) { return $translate.use() == k.language; })[0];\n if (localVariable) title = localVariable.value;\n }\n return title;\n }\n\n vm.getCategoryChipAlias = function (chip) {\n var title = chip.value;\n var category = getChipCat(chip);\n if (category && category.localVariables) {\n var localVariable = category.localVariables.filter(function (k) { return $translate.use() == k.language; })[0];\n if (localVariable) title = localVariable.value;\n }\n return title;\n }\n\n function getChipCat(chip) {\n var category;\n var categories = vm.categories.filter(function (k) { return k.name == chip.value; });\n if (chip.parentString) {\n category = categories.filter(function (k) { return k.parentModuleCategory != null && k.parentModuleCategory.name == chip.titleKey; })[0];\n } else {\n category = categories.filter(function (k) { return k.parentModuleCategory == null })[0]\n }\n return category;\n }\n\n function getIsFlatModeActive() {\n if (vm.activeSources.includes('WEBSOURCE')) {\n api.source.getReportTemplates(vm.report.id,0,1)\n .then(function (response) {\n if (response.content.length > 0) {\n vm.isFlatModeActive = true;\n }\n },\n function (response) {\n $log.error(response);\n });\n }\n }\n\n vm.exportFormulaTableExcel = function () {\n\n var createXLSLFormatObj = [];\n\n var xlsHeader = [\" \"];\n\n for (var i = 0; i < vm.tableColumns.length; i++) {\n xlsHeader.push(vm.tableColumns[i].title)\n }\n xlsHeader.push(\" \")\n for (var i = 0; i < vm.tableColumns.length; i++) {\n xlsHeader.push(vm.tableColumns[i].title+\" \")\n }\n\n var xlsRows = [];\n\n for (var i = 0; i < vm.tableRows.length; i++) {\n var obj = {};\n obj[\" \"] = vm.tableRows[i].value;\n $.each(vm.tableColumns, function (key, value) {\n obj[value.title] = vm.tableAfterValues[value.title] && vm.tableAfterValues[value.title][vm.tableRows[i].value] ? roundNumber(vm.tableAfterValues[value.title][vm.tableRows[i].value].value,2) : 0;\n });\n obj[\" \"] = \" \";\n $.each(vm.tableColumns, function (key, value) {\n obj[value.title + \" \"] = vm.tableBeforeValues[value.title] && vm.tableBeforeValues[value.title][vm.tableRows[i].value] ? vm.tableBeforeValues[value.title][vm.tableRows[i].value].value : 0;\n });\n xlsRows.push(obj);\n }\n\n $.each(vm.tableTotalAfterValues, function (key, value) {\n var obj = {};\n if (key == \"allData\") {\n obj[\" \"] = vm.formulaTable.allDataNickname ? vm.formulaTable.allDataNickname : $translate.instant('REPORT.DASHBOARD_TEMPLATE_3.GENERAL');\n } else {\n var reportField = vm.reportFields.filter(function (k) {\n return k.fieldName == key;\n })[0]\n //obj[\" \"] = reportField ? reportField.fieldTitle : \"\";\n obj[\" \"] = vm.getNameForTableTotalValues(key);\n }\n\n $.each(vm.tableColumns, function (columnkey, columnvalue) {\n obj[columnvalue.title] = value[columnvalue.title] ? value[columnvalue.title].value : 0;\n });\n obj[\" \"] = \" \";\n $.each(vm.tableColumns, function (columnkey, columnvalue) {\n obj[columnvalue.title + \" \"] = vm.tableTotalBeforeValues[key] && vm.tableTotalBeforeValues[key][columnvalue.title] ? vm.tableTotalBeforeValues[key][columnvalue.title].value : 0;\n });\n\n xlsRows.push(obj);\n });\n\n createXLSLFormatObj.push(xlsHeader);\n $.each(xlsRows, function (index, value) {\n var innerRowData = [];\n $.each(value, function (ind, val) {\n\n innerRowData.push(val);\n });\n createXLSLFormatObj.push(innerRowData);\n });\n\n /* File Name */\n var filename = \"Leaderboard.xlsx\";\n\n /* Sheet Name */\n var ws_name = \"ArtiwiseSheet\";\n\n if (typeof console !== 'undefined') console.log(new Date());\n var wb = XLSX.utils.book_new(),\n ws = XLSX.utils.aoa_to_sheet(createXLSLFormatObj);\n\n /* Add worksheet to workbook */\n XLSX.utils.book_append_sheet(wb, ws, ws_name);\n\n /* Write workbook and Download */\n if (typeof console !== 'undefined') console.log(new Date());\n XLSX.writeFile(wb, filename);\n if (typeof console !== 'undefined') console.log(new Date());\n }\n\n vm.downloadAmchart = function (id, element, elementt, name) {\n if (!document.getElementById(id) || (document.getElementById(id) && !document.getElementById(id).children[element])) return;\n if (document.getElementById(id).children[element].children[elementt].tagName != \"svg\") return;\n document.getElementById(id).children[element].children[elementt].style.fontSize = \"13px\";\n document.getElementById(id).children[element].children[elementt].style.fontFamily = \"'Roboto', 'Helvetica Neue', 'Arial', sans-serif\";\n saveSvgAsPng(document.getElementById(id).children[element].children[elementt], name);\n $utils.saveAudit(vm.reportId, \"REPORT\", \"DOWNLOAD_CHART_IMAGE\", vm.report.name + ' / ' + name);\n $utils.googleAnalyticsSetAction(\"Report\", \"Download Chart Image\", vm.report.name + ' / ' + name);\n }\n\n vm.printPage = function () {\n window.print();\n }\n\n function getLastSelectedChartValues() {\n if (vm.isTableColumnFiltered) {\n var values = vm.userSettings && vm.userSettings.columnFilteredValues ? vm.userSettings.columnFilteredValues : [];\n } else {\n var values = vm.userSettings && vm.userSettings.columnNotFilteredValues ? vm.userSettings.columnNotFilteredValues : [];\n }\n vm.selectedTimelineValue = vm.tableColumns[0];\n vm.selectedOtherTimelineValue = vm.tableColumns[1];\n vm.selectedStandartNormalCurveValue = vm.tableColumns[0] ? vm.tableColumns[0].title : null;\n vm.tableColumns.forEach(function (k) {\n if (k.title == values[0]) vm.selectedTimelineValue = k;\n if (k.title == values[1]) vm.selectedOtherTimelineValue = k;\n if (k.title == values[2]) vm.selectedStandartNormalCurveValue = k.title;\n })\n }\n\n vm.formulaTableSetHeightProb = function () {\n $('#allFormulaTableDiv').css('height', '500px');\n $('#formulaTableError').css('height', '500px');\n }\n\n vm.formulaTableRemoveHeightProb = function () {\n var styleObject = $('#allFormulaTableDiv').prop('style');\n if (styleObject) styleObject.removeProperty('height');\n var styleObject = $('#formulaTableError').prop('style');\n if (styleObject) styleObject.removeProperty('height');\n }\n\n function checkContainer() {\n if ($('#formulasecondtable').is(':visible') && $('#formulathirdtable').is(':visible') && $('#formulafirsttable').is(':visible')) { //if the container is visible on the page\n\n\n document.getElementById('formulasecondtable').addEventListener('scroll', function (event) {\n if (($('#formulasecondtable')[\"0\"].scrollHeight - $('#formulasecondtable')[\"0\"].scrollTop) < 700) {\n vm.formulaTableXAxisLimit += 10;\n }\n $('#formulafirsttable')[\"0\"].scrollTop = $('#formulasecondtable')[\"0\"].scrollTop;\n $('#formulathirdtable')[\"0\"].scrollTop = $('#formulasecondtable')[\"0\"].scrollTop;\n $('#formulathirdtable')[\"0\"].scrollLeft = $('#formulasecondtable')[\"0\"].scrollLeft;\n }, true /*Capture event*/);\n\n document.getElementById('formulathirdtable').addEventListener('scroll', function (event) {\n $('#formulafirsttable')[\"0\"].scrollTop = $('#formulathirdtable')[\"0\"].scrollTop;\n $('#formulasecondtable')[\"0\"].scrollTop = $('#formulathirdtable')[\"0\"].scrollTop;\n $('#formulasecondtable')[\"0\"].scrollLeft = $('#formulathirdtable')[\"0\"].scrollLeft;\n }, true /*Capture event*/);\n\n document.getElementById('formulafirsttable').addEventListener('scroll', function (event) {\n $('#formulafirsttable')[\"0\"].scrollTop = $('#formulafirsttable')[\"0\"].scrollTop;\n $('#formulasecondtable')[\"0\"].scrollTop = $('#formulafirsttable')[\"0\"].scrollTop;\n }, true /*Capture event*/);\n \n $('#formulasecondtable')[\"0\"].scrollTop = vm.topScroll;\n $('#formulasecondtable')[\"0\"].scrollLeft = vm.leftScroll;\n $('#formulathirdtable')[\"0\"].scrollTop = vm.topScroll;\n $('#formulathirdtable')[\"0\"].scrollLeft = vm.leftScroll;\n \n } else {\n setTimeout(checkContainer, 50); //wait 50 ms, then try again\n }\n }\n\n function findNicknameForYField() {\n var nickName = vm.formulaTable.fieldYNickname;\n if (vm.formulaTable) {\n var keys = Object.keys(vm.formulaTable.fieldHierarchy);\n for (var i = 0; i < keys.length; i++) {\n var keyFacetGroup = vm.results[\"result\"].facets.filter(function (k) { return k.key == keys[i]; })[0];\n if (keyFacetGroup && keyFacetGroup.nickName != null) {\n if (keyFacetGroup.key == vm.formulaTable.fieldY && keyFacetGroup.nickName == keyFacetGroup.title) {\n return vm.formulaTable.fieldYNickname;\n }\n return keyFacetGroup.nickName;\n }\n var valueFacetGroup = vm.results[\"result\"].facets.filter(function (k) { return k.key == vm.formulaTable.fieldHierarchy[keys[i]]; })[0];\n if (valueFacetGroup && valueFacetGroup.nickName != null) {\n return valueFacetGroup.nickName;\n }\n }\n }\n return nickName;\n }\n\n function roundNumber(num, scale) {\n if (!(\"\" + num).includes(\"e\")) {\n return +(Math.round(num + \"e+\" + scale) + \"e-\" + scale);\n } else {\n var arr = (\"\" + num).split(\"e\");\n var sig = \"\"\n if (+arr[1] + scale > 0) {\n sig = \"+\";\n }\n return +(Math.round(+arr[0] + \"e\" + sig + (+arr[1] + scale)) + \"e-\" + scale);\n }\n }\n \n vm.setFormulaTimelineChart = function (index, value, isSaveSettings) {\n if (isSaveSettings==true) {\n if (vm.isTableColumnFiltered) {\n var columnFilteredValues = vm.userSettings && vm.userSettings.columnFilteredValues ? vm.userSettings.columnFilteredValues : [];\n columnFilteredValues[index] = value ? value.title : null;\n $settings.saveUserSettings(\"columnFilteredValues\", columnFilteredValues, vm.report.id);\n } else {\n var columnNotFilteredValues = vm.userSettings && vm.userSettings.columnNotFilteredValues ? vm.userSettings.columnNotFilteredValues : [];\n columnNotFilteredValues[index] = value ? value.title : null;\n $settings.saveUserSettings(\"columnNotFilteredValues\", columnNotFilteredValues, vm.report.id);\n }\n }\n if (value == null) {\n return;\n }\n var selectedFormulaTableConnectedField = vm.formulaTable.connectedFieldValues.filter(function (k) {\n return k.fieldXValue == value.title;\n })[0]\n var filteredData = vm.results[\"result\"].facets.filter(function (k) {\n if (vm.isTableColumnFiltered) {\n return k.key == value.key;\n }\n return k.key == vm.formulaTable.fieldX+\",\"+selectedFormulaTableConnectedField.defaultXField;\n })[0]\n var allData = vm.results[\"allData\"].facets.filter(function (k) {\n if (vm.isTableColumnFiltered) {\n return k.key == value.key;\n }\n return k.key == vm.formulaTable.fieldX + \",\" +selectedFormulaTableConnectedField.defaultXField;\n })[0]\n if (!vm.isTableColumnFiltered) {\n if (filteredData) {\n filteredData.facetList = filteredData.facetList ? filteredData.facetList : [];\n filteredData = filteredData.facetList.filter(function (k) {\n return k.value == value.title\n })[0]\n }\n if (allData) {\n allData = allData.facetList.filter(function (k) {\n return k.value == value.title\n })[0]\n }\n }\n if (vm.results[\"result\"].count == vm.results[\"allData\"].count) {\n vm.lineChartData[index] = {\n allData: filteredData ? filteredData.dateFormulaValues : [],\n selectedTimelineValue: value.title,\n fieldYNickname: findNicknameForYField(),\n allDataNickname: vm.formulaTable.allDataNickname\n };\n } else {\n vm.lineChartData[index] = {\n result: filteredData ? filteredData.dateFormulaValues : [],\n allData: allData ? allData.dateFormulaValues : [],\n selectedTimelineValue: value.title,\n fieldYNickname: findNicknameForYField(),\n allDataNickname: vm.formulaTable.allDataNickname\n };\n }\n }\n\n vm.selectedStandartNormalCurveValue = \"\";\n\n vm.setStandartNormalCurveChart = function (value, isSaveSettings) {\n if (isSaveSettings==true) {\n if (vm.isTableColumnFiltered) {\n var columnFilteredValues = vm.userSettings && vm.userSettings.columnFilteredValues ? vm.userSettings.columnFilteredValues : [];\n columnFilteredValues[2] = value;\n $settings.saveUserSettings(\"columnFilteredValues\", columnFilteredValues, vm.report.id);\n } else {\n var columnNotFilteredValues = vm.userSettings && vm.userSettings.columnNotFilteredValues ? vm.userSettings.columnNotFilteredValues : [];\n columnNotFilteredValues[2] = value;\n $settings.saveUserSettings(\"columnNotFilteredValues\", columnNotFilteredValues, vm.report.id);\n }\n }\n var resultData = {};\n Object.keys(vm.tableAfterValues).forEach(function (key) {\n resultData[key] = {};\n Object.keys(vm.tableAfterValues[key]).forEach(function (key1) {\n resultData[key][vm.getFacetValueAlias(vm.formulaTable.fieldY, key1)] = vm.tableAfterValues[key][key1];\n });\n });\n vm.standartNormalCurveData = {\n data: vm.tableAllDataValues,\n resultData: resultData,\n value: value,\n isUserRestricted: vm.isUserRestricted,\n dataSize: Object.keys(vm.tableAllDataValues).length\n }\n }\n\n vm.isTableColumnFiltered = false;\n vm.selectableFormulaTableConnectedFields = [];\n vm.selectableFormulaTableConnectedFieldsNames = [];\n\n function findFilteredTableColumn() {\n vm.filteredTableColumn = {};\n vm.isTableColumnFiltered = false;\n\n if (vm.formulaTable && vm.formulaTable.connectedFieldValues) {\n vm.formulaTable.connectedFieldValues.forEach(function (m) {\n vm.filterChips.forEach(function (k) {\n if (m.fieldXValue == k.value && k.operand == \"AND\") {\n vm.isTableColumnFiltered = true;\n vm.filteredTableColumn = k;\n vm.selectableFormulaTableConnectedFields = m.fieldXConnectedFields;\n vm.selectableFormulaTableConnectedFields.forEach(function (k) {\n var reportField = vm.reportFields.filter(function (m) {\n return m.fieldName == k;\n })\n vm.selectableFormulaTableConnectedFieldsNames.push(reportField.fieldTitle);\n })\n }\n })\n })\n \n }\n \n }\n\n vm.filterFormulaTable = function (tableColumn) {\n if (!tableColumn.filterable) return;\n vm.data.facets.forEach(function (k) {\n if (k.key == vm.formulaTable.fieldX) {\n var child = k.facetList.filter(function (n) {\n return n.value == tableColumn.title;\n })[0]\n var chip = vm.filterChips.filter(function (m) { return m.key == k.title && child.value == m.value })[0];\n if (chip) return;\n if (child) {\n vm.toggleFacetFilter(child, k);\n vm.searchTimeline();\n }\n }\n })\n }\n\n vm.lastSortedFormulaTableColumn = \"\";\n vm.isSorting = false;\n\n vm.sortFormulaTable = function (column) {\n vm.isSorting = true;\n vm.topScroll = $('#formulasecondtable')[\"0\"].scrollTop;\n vm.leftScroll = $('#formulasecondtable')[\"0\"].scrollLeft;\n if (vm.formulaTable.fieldY) {\n var sortOrder = 1;\n var rows = vm.results[\"result\"].facets.filter(function (f) {\n return f.key === vm.formulaTable.fieldY;\n })[0];\n\n if (vm.lastSortedFormulaTableColumn == column.title) {\n sortOrder = -1;\n vm.lastSortedFormulaTableColumn = \"\";\n } else {\n vm.lastSortedFormulaTableColumn = column.title;\n }\n\n rows.facetList.sort(function (a, b) {\n var valueA = vm.tableAfterValues[column.title][a.value] ? vm.tableAfterValues[column.title][a.value].value : 0;\n var valueB = vm.tableAfterValues[column.title][b.value] ? vm.tableAfterValues[column.title][b.value].value : 0;\n var result = (valueA < valueB) ? 1 : (valueA > valueB) ? -1 : (a.value < b.value) ? -1 : (a.value > b.value) ? 1 : 0;\n return (result * sortOrder);\n })\n calculateTableFields(vm.results[\"result\"]);\n }\n \n setTimeout(function () {\n vm.isSorting = false;\n jQuery(document).ready(checkContainer);\n }, 10);\n }\n\n\n function calculateTableFields(data) {\n vm.tableColumns = [];\n vm.tableRows = [];\n vm.tableAfterValues = {}\n vm.tableBeforeValues = {}\n vm.tableTotalAfterValues = {}\n vm.tableTotalBeforeValues = {}\n if (vm.formulaTable.fieldY) {\n var rows = data.facets.filter(function (f) {\n return f.key === vm.formulaTable.fieldY;\n })[0];\n if (rows) {\n rows.facetList.forEach(function (k) {\n vm.tableRows.push({\n value: k.value\n })\n })\n }\n }\n if (vm.isTableColumnFiltered) {\n var filteredFormulaTableValue = vm.formulaTable.connectedFieldValues.filter(function (k) { return k.fieldXValue == vm.filteredTableColumn.value; })[0];\n var existTableColumnFacetGroup = data.facets.filter(function (k) { return k.key == vm.formulaTable.fieldX })[0];\n filteredFormulaTableValue.fieldXConnectedFields.forEach(function (k) {\n var facet = vm.reportFields.filter(function (m) {\n return m.fieldName == k;\n })[0]\n var existTableColumnFacetGroup = data.facets.filter(function (m) { return m.key == k })[0];\n if (facet) {\n if (existTableColumnFacetGroup) {\n if (existTableColumnFacetGroup.facetList.length > 0) {\n vm.tableColumns.push({\n title: facet.fieldTitle,\n key: k,\n filterable: false\n })\n }\n }\n }\n })\n Object.keys(vm.results).forEach(function (key) {\n if (key != \"result\") {\n for (var i = 0; i < vm.tableColumns.length; i++) {\n var valueAfterFacet = vm.results[key].facets.filter(function (k) {\n return k.key == vm.formulaTable.fieldY + \",\" + vm.tableColumns[i].key;\n })[0]\n if (valueAfterFacet) {\n valueAfterFacet.facetList.sort(function (a, b) {\n return b.formulaValue - a.formulaValue;\n })\n }\n }\n }\n });\n for (var i = 0; i < vm.tableColumns.length; i++) {\n var valueAfterFacet = data.facets.filter(function (k) {\n return k.key == vm.formulaTable.fieldY + \",\" + vm.tableColumns[i].key;\n })[0]\n var valueBeforeFacet = vm.beforeResult[\"result\"].facets.filter(function (k) {\n return k.key == vm.formulaTable.fieldY + \",\" + vm.tableColumns[i].key;\n })[0]\n\n Object.keys(vm.results).forEach(function (key) {\n if (key != \"result\") {\n var valueTotalAfterFacet = vm.results[key].facets.filter(function (k) {\n return k.key == vm.tableColumns[i].key;\n })[0]\n if (valueTotalAfterFacet) {\n vm.tableTotalAfterValues[key] = vm.tableTotalAfterValues[key] ? vm.tableTotalAfterValues[key] : {};\n vm.tableTotalAfterValues[key][vm.tableColumns[i].title] = vm.tableTotalAfterValues[key][vm.tableColumns[i].title] ? vm.tableTotalAfterValues[key][vm.tableColumns[i].title] : {};\n vm.tableTotalAfterValues[key][vm.tableColumns[i].title].value = valueTotalAfterFacet.formulaValue ? roundNumber(valueTotalAfterFacet.formulaValue,2): 0;\n }\n }\n });\n Object.keys(vm.beforeResult).forEach(function (key) {\n if (key != \"result\") {\n var valueTotalBeforeFacet = vm.beforeResult[key].facets.filter(function (k) {\n return k.key == vm.tableColumns[i].key;\n })[0]\n if (valueTotalBeforeFacet) {\n vm.tableTotalBeforeValues[key] = vm.tableTotalBeforeValues[key] ? vm.tableTotalBeforeValues[key] : {};\n vm.tableTotalBeforeValues[key][vm.tableColumns[i].title] = vm.tableTotalBeforeValues[key][vm.tableColumns[i].title] ? vm.tableTotalBeforeValues[key][vm.tableColumns[i].title] : {};\n vm.tableTotalBeforeValues[key][vm.tableColumns[i].title].value = valueTotalBeforeFacet.formulaValue ? roundNumber(valueTotalBeforeFacet.formulaValue,2) : 0;\n }\n }\n });\n\n var count = 0;\n var lastValue = null;\n if (valueAfterFacet) {\n for (var j = 0; j < valueAfterFacet.facetList.length; j++) {\n vm.tableAfterValues[vm.tableColumns[i].title] = vm.tableAfterValues[vm.tableColumns[i].title] ? vm.tableAfterValues[vm.tableColumns[i].title] : {};\n vm.tableAfterValues[vm.tableColumns[i].title][valueAfterFacet.facetList[j].value] = vm.tableAfterValues[vm.tableColumns[i].title][valueAfterFacet.facetList[j].value] ? vm.tableAfterValues[vm.tableColumns[i].title][valueAfterFacet.facetList[j].value] : {};\n vm.tableAfterValues[vm.tableColumns[i].title][valueAfterFacet.facetList[j].value].value = valueAfterFacet.facetList[j].formulaValue ? valueAfterFacet.facetList[j].formulaValue : 0;\n vm.tableAfterValues[vm.tableColumns[i].title][valueAfterFacet.facetList[j].value].text = valueAfterFacet.facetList[j].formulaValue ? roundNumber(valueAfterFacet.facetList[j].formulaValue, 2).toString() : 0;\n Object.keys(vm.results).forEach(function (key) {\n if (key != \"result\") {\n var valueOtherFacet = vm.results[key].facets.filter(function (k) {\n return k.key == vm.formulaTable.fieldY + \",\" + vm.tableColumns[i].key;\n })[0]\n for (var l = 0; l < valueOtherFacet.facetList.length; l++) {\n if (lastValue != valueOtherFacet.facetList[l].formulaValue) {\n count = l + 1;\n }\n lastValue = valueOtherFacet.facetList[l].formulaValue;\n if (valueAfterFacet.facetList[j].value == valueOtherFacet.facetList[l].value) {\n var name = key;\n if (name == \"allData\") name = vm.formulaTable.allDataNickname ? vm.formulaTable.allDataNickname : $translate.instant('REPORT.DASHBOARD_TEMPLATE_3.GENERAL');\n var filterField = vm.reportFields.filter(function (k){\n return k.fieldName == key;\n })[0]\n if (filterField) name = filterField.fieldTitle;\n vm.tableAfterValues[vm.tableColumns[i].title][valueAfterFacet.facetList[j].value].text += \" ( \" + name + \": \" + count + \". )\"\n }\n }\n }\n });\n }\n }\n if (valueBeforeFacet) {\n for (var j = 0; j < valueBeforeFacet.facetList.length; j++) {\n vm.tableBeforeValues[vm.tableColumns[i].title] = vm.tableBeforeValues[vm.tableColumns[i].title] ? vm.tableBeforeValues[vm.tableColumns[i].title] : {};\n vm.tableBeforeValues[vm.tableColumns[i].title][valueBeforeFacet.facetList[j].value] = vm.tableBeforeValues[vm.tableColumns[i].title][valueBeforeFacet.facetList[j].value] ? vm.tableBeforeValues[vm.tableColumns[i].title][valueBeforeFacet.facetList[j].value] : {};\n vm.tableBeforeValues[vm.tableColumns[i].title][valueBeforeFacet.facetList[j].value].value = valueBeforeFacet.facetList[j].formulaValue ? roundNumber(valueBeforeFacet.facetList[j].formulaValue,2) : 0;\n }\n }\n }\n } else {\n if (vm.formulaTable) {\n var existTableColumnFacetGroup = data.facets.filter(function (k) { return k.key == vm.formulaTable.fieldX })[0];\n vm.formulaTable.connectedFieldValues.forEach(function (k) {\n if (existTableColumnFacetGroup) {\n var existTableColumnFacet = existTableColumnFacetGroup.facetList.filter(function (m) { return m.value == k.fieldXValue });\n if (existTableColumnFacet.length > 0) {\n vm.tableColumns.push({\n title: k.fieldXValue,\n key: k.defaultXField,\n filterable: true\n })\n }\n } else {\n vm.tableColumns.push({\n title: k.fieldXValue,\n key: k.defaultXField,\n filterable: true\n })\n }\n })\n }\n Object.keys(vm.results).forEach(function (key) {\n if (key != \"result\") {\n for (var i = 0; i < vm.tableColumns.length; i++) {\n var valueAfterFacet = vm.results[key].facets.filter(function (k) {\n return k.key == vm.formulaTable.fieldX + \",\" + vm.formulaTable.fieldY + \",\" + vm.tableColumns[i].key;\n })[0]\n if (valueAfterFacet) {\n valueAfterFacet.facetList = valueAfterFacet.facetList ? valueAfterFacet.facetList : [];\n valueAfterFacet = valueAfterFacet.facetList.filter(function (m) {\n return m.value == vm.tableColumns[i].title;\n })[0]\n }\n \n if (valueAfterFacet) {\n valueAfterFacet.subs.sort(function (a, b) {\n return b.formulaValue - a.formulaValue;\n })\n }\n }\n }\n });\n for (var i = 0; i < vm.tableColumns.length; i++) {\n var valueAfterFacet = data.facets.filter(function (k) {\n return k.key == vm.formulaTable.fieldX + \",\" + vm.formulaTable.fieldY + \",\" + vm.tableColumns[i].key;\n })[0]\n if (valueAfterFacet) {\n valueAfterFacet.facetList = valueAfterFacet.facetList ? valueAfterFacet.facetList : [];\n valueAfterFacet = valueAfterFacet.facetList.filter(function (m) {\n return m.value == vm.tableColumns[i].title;\n })[0]\n }\n \n var valueBeforeFacet = vm.beforeResult[\"result\"].facets.filter(function (k) {\n return k.key == vm.formulaTable.fieldX + \",\" + vm.formulaTable.fieldY + \",\" + vm.tableColumns[i].key;\n })[0]\n if (valueBeforeFacet) {\n valueBeforeFacet.facetList = valueBeforeFacet.facetList ? valueBeforeFacet.facetList : [];\n valueBeforeFacet = valueBeforeFacet.facetList.filter(function (m) {\n return m.value == vm.tableColumns[i].title;\n })[0]\n }\n\n Object.keys(vm.results).forEach(function (key) {\n if (key != \"result\") {\n var valueTotalAfterFacet = vm.results[key].facets.filter(function (k) {\n return k.key == vm.formulaTable.fieldX + \",\" + vm.tableColumns[i].key;\n })[0]\n if (valueTotalAfterFacet) {\n valueTotalAfterFacet.facetList = valueTotalAfterFacet.facetList ? valueTotalAfterFacet.facetList : [];\n valueTotalAfterFacet = valueTotalAfterFacet.facetList.filter(function (m) {\n return m.value == vm.tableColumns[i].title;\n })[0]\n }\n if (valueTotalAfterFacet) {\n vm.tableTotalAfterValues[key] = vm.tableTotalAfterValues[key] ? vm.tableTotalAfterValues[key] : {};\n vm.tableTotalAfterValues[key][vm.tableColumns[i].title] = vm.tableTotalAfterValues[key][vm.tableColumns[i].title] ? vm.tableTotalAfterValues[key][vm.tableColumns[i].title] : {};\n vm.tableTotalAfterValues[key][vm.tableColumns[i].title].value = valueTotalAfterFacet.formulaValue ? roundNumber(valueTotalAfterFacet.formulaValue,2) : 0;\n }\n }\n });\n Object.keys(vm.beforeResult).forEach(function (key) {\n if (key != \"result\") {\n var valueTotalBeforeFacet = vm.beforeResult[key].facets.filter(function (k) {\n return k.key == vm.formulaTable.fieldX + \",\" + vm.tableColumns[i].key;\n })[0]\n if (valueTotalBeforeFacet) {\n valueTotalBeforeFacet.facetList = valueTotalBeforeFacet.facetList ? valueTotalBeforeFacet.facetList : [];\n valueTotalBeforeFacet = valueTotalBeforeFacet.facetList.filter(function (m) {\n return m.value == vm.tableColumns[i].title;\n })[0]\n }\n if (valueTotalBeforeFacet) {\n vm.tableTotalBeforeValues[key] = vm.tableTotalBeforeValues[key] ? vm.tableTotalBeforeValues[key] : {};\n vm.tableTotalBeforeValues[key][vm.tableColumns[i].title] = vm.tableTotalBeforeValues[key][vm.tableColumns[i].title] ? vm.tableTotalBeforeValues[key][vm.tableColumns[i].title] : {};\n vm.tableTotalBeforeValues[key][vm.tableColumns[i].title].value = valueTotalBeforeFacet.formulaValue ? roundNumber(valueTotalBeforeFacet.formulaValue,2) : 0;\n }\n }\n });\n var count = 0;\n var lastValue = null;\n if (valueAfterFacet) {\n for (var j = 0; j < valueAfterFacet.subs.length; j++) {\n vm.tableAfterValues[vm.tableColumns[i].title] = vm.tableAfterValues[vm.tableColumns[i].title] ? vm.tableAfterValues[vm.tableColumns[i].title] : {};\n vm.tableAfterValues[vm.tableColumns[i].title][valueAfterFacet.subs[j].value] = vm.tableAfterValues[vm.tableColumns[i].title][valueAfterFacet.subs[j].value] ? vm.tableAfterValues[vm.tableColumns[i].title][valueAfterFacet.subs[j].value] : {};\n vm.tableAfterValues[vm.tableColumns[i].title][valueAfterFacet.subs[j].value].value = valueAfterFacet.subs[j].formulaValue ? valueAfterFacet.subs[j].formulaValue : 0;\n vm.tableAfterValues[vm.tableColumns[i].title][valueAfterFacet.subs[j].value].text = valueAfterFacet.subs[j].formulaValue ? roundNumber(valueAfterFacet.subs[j].formulaValue,2).toString() : 0;\n \n Object.keys(vm.results).forEach(function (key) {\n if (key != \"result\") {\n var valueOtherFacet = vm.results[key].facets.filter(function (k) {\n return k.key == vm.formulaTable.fieldX + \",\" + vm.formulaTable.fieldY + \",\" + vm.tableColumns[i].key;\n })[0]\n if (valueOtherFacet) {\n valueOtherFacet = valueOtherFacet.facetList.filter(function (m) {\n return m.value == vm.tableColumns[i].title;\n })[0]\n }\n if (valueOtherFacet) {\n for (var l = 0; l < valueOtherFacet.subs.length; l++) {\n if (lastValue != valueOtherFacet.subs[l].formulaValue) {\n count = l + 1;\n }\n lastValue = valueOtherFacet.subs[l].formulaValue;\n if (valueAfterFacet.subs[j].value == valueOtherFacet.subs[l].value) {\n var name = key;\n if (name == \"allData\") name = vm.formulaTable.allDataNickname ? vm.formulaTable.allDataNickname : $translate.instant('REPORT.DASHBOARD_TEMPLATE_3.GENERAL');\n var filterField = vm.reportFields.filter(function (k) {\n return k.fieldName == key;\n })[0]\n if (filterField) name = filterField.fieldTitle;\n vm.tableAfterValues[vm.tableColumns[i].title][valueAfterFacet.subs[j].value].text += \" ( \" + name + \": \" + (count) + \". )\"\n }\n }\n }\n }\n });\n }\n }\n if (valueBeforeFacet) {\n for (var j = 0; j < valueBeforeFacet.subs.length; j++) {\n vm.tableBeforeValues[vm.tableColumns[i].title] = vm.tableBeforeValues[vm.tableColumns[i].title] ? vm.tableBeforeValues[vm.tableColumns[i].title] : {};\n vm.tableBeforeValues[vm.tableColumns[i].title][valueBeforeFacet.subs[j].value] = vm.tableBeforeValues[vm.tableColumns[i].title][valueBeforeFacet.subs[j].value] ? vm.tableBeforeValues[vm.tableColumns[i].title][valueBeforeFacet.subs[j].value] : {};\n vm.tableBeforeValues[vm.tableColumns[i].title][valueBeforeFacet.subs[j].value].value = valueBeforeFacet.subs[j].formulaValue ? roundNumber(valueBeforeFacet.subs[j].formulaValue,2) : 0;\n }\n }\n }\n }\n }\n\n vm.calculateStandartDistrubutionCurveData = function () {\n vm.tableAllDataValues = {}\n\n if (vm.isTableColumnFiltered) {\n for (var i = 0; i < vm.tableColumns.length; i++) {\n var valueAfterFacet = vm.results['allData'].facets.filter(function (k) {\n return k.key == vm.formulaTable.fieldY + \",\" + vm.tableColumns[i].key;\n })[0]\n if (valueAfterFacet) {\n for (var j = 0; j < valueAfterFacet.facetList.length; j++) {\n vm.tableAllDataValues[vm.tableColumns[i].title] = vm.tableAllDataValues[vm.tableColumns[i].title] ? vm.tableAllDataValues[vm.tableColumns[i].title] : {};\n vm.tableAllDataValues[vm.tableColumns[i].title][vm.getFacetValueAlias(vm.formulaTable.fieldY, valueAfterFacet.facetList[j].value)] = vm.tableAllDataValues[vm.tableColumns[i].title][vm.getFacetValueAlias(vm.formulaTable.fieldY, valueAfterFacet.facetList[j].value)] ? vm.tableAllDataValues[vm.tableColumns[i].title][valueAfterFacet.facetList[j].value] : {};\n vm.tableAllDataValues[vm.tableColumns[i].title][vm.getFacetValueAlias(vm.formulaTable.fieldY, valueAfterFacet.facetList[j].value)].value = valueAfterFacet.facetList[j].formulaValue ? valueAfterFacet.facetList[j].formulaValue : 0;\n vm.tableAllDataValues[vm.tableColumns[i].title][vm.getFacetValueAlias(vm.formulaTable.fieldY, valueAfterFacet.facetList[j].value)].text = valueAfterFacet.facetList[j].formulaValue ? roundNumber(valueAfterFacet.facetList[j].formulaValue, 2).toString() : 0;\n }\n }\n }\n } else {\n for (var i = 0; i < vm.tableColumns.length; i++) {\n var valueAfterFacet = vm.results['allData'].facets.filter(function (k) {\n return k.key == vm.formulaTable.fieldX + \",\" + vm.formulaTable.fieldY + \",\" + vm.tableColumns[i].key;\n })[0]\n if (valueAfterFacet) {\n valueAfterFacet = valueAfterFacet.facetList.filter(function (m) {\n return m.value == vm.tableColumns[i].title;\n })[0]\n }\n if (valueAfterFacet) {\n for (var j = 0; j < valueAfterFacet.subs.length; j++) {\n vm.tableAllDataValues[vm.tableColumns[i].title] = vm.tableAllDataValues[vm.tableColumns[i].title] ? vm.tableAllDataValues[vm.tableColumns[i].title] : {};\n vm.tableAllDataValues[vm.tableColumns[i].title][vm.getFacetValueAlias(vm.formulaTable.fieldY, valueAfterFacet.subs[j].value)] = vm.tableAllDataValues[vm.tableColumns[i].title][vm.getFacetValueAlias(vm.formulaTable.fieldY, valueAfterFacet.subs[j].value)] ? vm.tableAllDataValues[vm.tableColumns[i].title][valueAfterFacet.subs[j].value] : {};\n vm.tableAllDataValues[vm.tableColumns[i].title][vm.getFacetValueAlias(vm.formulaTable.fieldY, valueAfterFacet.subs[j].value)].value = valueAfterFacet.subs[j].formulaValue ? valueAfterFacet.subs[j].formulaValue : 0;\n vm.tableAllDataValues[vm.tableColumns[i].title][vm.getFacetValueAlias(vm.formulaTable.fieldY, valueAfterFacet.subs[j].value)].text = valueAfterFacet.subs[j].formulaValue ? roundNumber(valueAfterFacet.subs[j].formulaValue, 2).toString() : 0;\n }\n }\n }\n }\n }\n\n function calculateRadarChartData(data) {\n if (data == null) return [];\n var result = [];\n if (data[0].facets) {\n var filteredData = data[0].facets.filter(function (c) {\n return c.key == $stateParams.dashboardModuleId;\n });\n } else {\n var filteredData = [data[0]];\n }\n if (data[1].facets) {\n var allData = data[1].facets.filter(function (c) {\n return c.key == $stateParams.dashboardModuleId;\n });\n } else {\n allData = [data[1]];\n }\n\n if (filteredData.length == 0 || allData.length == 0) return;\n for (var j = 0; j < filteredData[0].facetList.length; j++) {\n for (var i = 0; i < allData[0].facetList.length; i++) {\n if (filteredData[0].facetList[j].value == allData[0].facetList[i].value) {\n\n allData[0].facetList[i].positive = allData[0].facetList[i].positive ? allData[0].facetList[i].positive : 0;\n allData[0].facetList[i].negative = allData[0].facetList[i].negative ? allData[0].facetList[i].negative : 0;\n allData[0].facetList[i].neutral = allData[0].facetList[i].neutral ? allData[0].facetList[i].neutral : 0;\n allData[0].facetList[i].insensitive = allData[0].facetList[i].insensitive ? allData[0].facetList[i].insensitive : 0;\n\n filteredData[0].facetList[j].positive = filteredData[0].facetList[j].positive ? filteredData[0].facetList[j].positive : 0;\n filteredData[0].facetList[j].negative = filteredData[0].facetList[j].negative ? filteredData[0].facetList[j].negative : 0;\n filteredData[0].facetList[j].neutral = filteredData[0].facetList[j].neutral ? filteredData[0].facetList[j].neutral : 0;\n filteredData[0].facetList[j].insensitive = filteredData[0].facetList[j].insensitive ? filteredData[0].facetList[j].insensitive : 0;\n var alias = vm.categoryAlieses.filter(function (k) { return k.categoryId == filteredData[0].facetList[j].categoryId })[0];\n var item = filteredData[0].facetList[j].value;\n if (alias) {\n item = alias.aliasName\n }\n if (filteredData[0].count == allData[0].count) {\n result.push({\n item: item,//filteredData[0].facetList[j].value,\n allData: (allData[0].facetList[i][vm.radarChartData.sentiment] / (allData[0].facetList[i].positive + allData[0].facetList[i].negative + allData[0].facetList[i].neutral + allData[0].facetList[i].insensitive)) * 100\n })\n } else {\n result.push({\n item: item,//filteredData[0].facetList[j].value,\n filteredData: (filteredData[0].facetList[j][vm.radarChartData.sentiment] / (filteredData[0].facetList[j].positive + filteredData[0].facetList[j].negative + filteredData[0].facetList[j].neutral + filteredData[0].facetList[j].insensitive)) * 100,\n allData: (allData[0].facetList[i][vm.radarChartData.sentiment] / (allData[0].facetList[i].positive + allData[0].facetList[i].negative + allData[0].facetList[i].neutral + allData[0].facetList[i].insensitive)) * 100\n })\n }\n }\n }\n }\n\n result = result.sort(function (a, b) {\n return b.filteredData - a.filteredData || b.allData - a.allData;\n });\n\n result = result.slice(0, 5);\n return result;\n }\n\n vm.changeRadarChartDataSentiment = function () {\n var radarChartData = [];\n radarChartData.push(vm.targetChartData ? vm.targetChartData : vm.results[\"result\"]);\n radarChartData.push(vm.allDataTargetChartData ? vm.allDataTargetChartData : vm.results[\"allData\"]);\n vm.radarChartData.data = calculateRadarChartData(radarChartData);\n }\n\n vm.getNameForTableTotalValues = function (value) {\n var keyFacetGroup = vm.results[\"result\"].facets.filter(function (k) { return k.key == value; })[0];\n if (keyFacetGroup && keyFacetGroup.nickName != null) {\n return keyFacetGroup.nickName;\n }\n var filterField = vm.reportFields.filter(function (k) {\n return k.fieldName == value;\n })[0]\n if (filterField) {\n return filterField.fieldTitle;\n } else {\n return value;\n }\n }\n\n vm.formulaTableColorValue = function (a, b) {\n var value1 = a ? a : 0;\n var value2 = b ? b : 0;\n if ((value1 - value2) > 0) {\n return 1;\n } else if (((value1 - value2) < 0)) {\n return 2;\n } else {\n return 3;\n }\n }\n\n vm.toggleFacetFilter = function (child, item, $event) {\n var chip = vm.filterChips.filter(function (m) { return m.key == item.title && child.value == m.value })[0];\n if (chip) return;\n if (!vm.sideNavEnabled) return;\n /*\n if (JSON.stringify(vm.filterChips).length + JSON.stringify(ReportQueryParserService.setNormalFacetFilters(vm.filterChips)).length > 1700) {\n toastService.serverError($translate.instant('REPORT.ERRORS.FILTER_LIMIT'))\n return;\n }*/\n var flag = false;\n for (var i = 0; i < vm.filterChips.length; i++) {\n if (vm.filterChips[i].key == child.fieldName && vm.filterChips[i].value == child.value) flag=true;\n }\n if (flag) return;\n if (ReportService.isThisFieldType(300, item.type) || item.type == 700 || item.type == 200) {\n if (!vm.ctrlKeyPressing) {\n //var keyValue = generateKeyValuePairFilter(child.fieldName, child.value);\n var filterChip = {\n key: item.title,\n value: child.value,\n type: item.type,\n group: -1,\n operand: \"AND\",\n titleKey: item.title\n }\n vm.filterChips.push(filterChip);\n\n var foundedFilters = vm.filterChips.filter(function (chip) {\n return chip.key == item.title;\n });\n if (foundedFilters && foundedFilters.length > 1) {\n //var group = Math.floor(Math.random() * 10000) + 1;\n vm.groupCtrlCount = vm.groupCtrlCount + 1;\n foundedFilters.forEach(function (chip) {\n chip.group = vm.groupCtrlCount; //group;\n chip.operand = \"OR\";\n });\n }\n //search();\n\n // searchDateRanges();\n }\n if (vm.ctrlKeyPressing) {\n var filterCtrlChip = {\n key: item.title,\n value: child.value,\n type: item.type,\n group: vm.groupCtrlCount,\n operand: \"OR\",\n titleKey: item.title\n }\n vm.filterChips.push(filterCtrlChip);\n }\n item.facetList = item.facetList.filter(function (c) { return c !== child; });\n }\n\n if (item.type >= 100 && item.type < 200) {\n if (!vm.ctrlKeyPressing) {\n vm.sideNavEnabled = false;\n var level = null;\n if (item.key === vm.dashboardModuleId) {\n level = findChartLevel();\n }\n if (child.parentString) {\n var foundedSameLevelFilter = vm.filterChips.filter(function (chip) { return chip.key == item.key && chip.parentString && chip.parentString.split(\"->\").length == child.parentString.split(\"->\").length; })[0];\n if (foundedSameLevelFilter)\n level = level - 1;\n } else {\n var foundedSameLevelFilter = vm.filterChips.filter(function (chip) { return chip.key == item.key && typeof chip.parentString === 'undefined' && typeof child.parentString === 'undefined'; })[0];\n if (foundedSameLevelFilter)\n level = level - 1;\n }\n var catFilterChip = {\n key: item.key,\n value: child.value,\n type: 100,\n group: -1,\n operand: \"AND\",\n parentString: child.parentString,\n titleKey: item.title,\n level: level,\n aspectSentiment: child.sentimentFilter ? child.sentimentFilter : \"\"\n }\n vm.filterChips.push(catFilterChip);\n searchTimeline();\n } else {\n var catCtrlFilterChip = {\n key: item.key,\n value: child.value,\n type: 100,\n group: vm.groupCtrlCount,\n operand: \"OR\",\n parentString: child.parentString,\n titleKey: item.title\n }\n vm.filterChips.push(catCtrlFilterChip);\n }\n item.facetList = item.facetList.filter(function (c) { return c !== child; });\n }\n setFilteredFacets();\n }\n\n vm.sidenavQueryFunc = function() {\n if (vm.sidenavQuery == \"\") {\n vm.data = JSON.parse(JSON.stringify(vm.dataCopy));\n vm.parameters.facetSearch = null;\n } else {\n vm.parameters.facetSearch = vm.sidenavQuery;\n vm.sidenavQueryFuncLoading = true;\n api.report.comparativeSearch(vm.report.id, vm.parameters)\n .then(function (response) {\n vm.data.facets = response.result.facets;\n vm.sidenavQueryFuncLoading = false;\n vm.data.facetSize = 10;\n vm.data.facets.forEach(function (f) {\n f[\"size\"] = 10;\n f[\"showMoreAndMore\"] = f.facetList && f.facetList.length >= 10 ? true : false;\n f[\"allFacets\"] = f.facetList && f.facetList.length > 10 ? true : false;\n });\n\n }, function (err) {\n $log.error(err);\n })\n }\n }\n\n function eliminateFacetFilteredValues() {\n if (vm.parameters.filterChips && vm.parameters.filterChips.length > 0) {\n vm.parameters.filterChips.forEach(function (filteredValue) {\n var facet = vm.data.facets.filter(function (facet) { return facet.title === filteredValue.titleKey; })[0];\n if (facet && facet.facetList) {\n facet.facetList = facet.facetList.filter(function (item) { return item.value !== filteredValue.value; });\n }\n })\n }\n }\n\n function openSaveDefaultReportFiltersDialog($event){\n ReportService.showSaveReportFiltersDialog($scope, $event, vm.filterChips, vm.report.id);\n }\n\n vm.filteredFacets = {};\n\n function setFilteredFacets() {\n vm.filteredFacets = {};\n for (var i = 0; i < vm.filterChips.length; i++) {\n if (vm.filteredFacets[vm.filterChips[i].titleKey] != null) {\n vm.filteredFacets[vm.filterChips[i].titleKey].push(vm.filterChips[i]);\n } else {\n var childs = [];\n childs.push(vm.filterChips[i]);\n vm.filteredFacets[vm.filterChips[i].titleKey] = childs;\n }\n }\n }\n\n vm.removeDocuments = function($event) {\n ReportService.deleteReportData($scope, $state, $event, vm.report, vm.parameters, vm.data.count);\n }\n\n vm.reevaluateReport = function($event) {\n ReportService.reevaluatePrompt($scope, $event, vm.report.id, user, vm.documentNickname);\n }\n\n vm.deleteReport = function($event) {\n if (vm.isFlatModeActive)\n ReportService.warning($scope, $event, $translate.instant(\"REPORT.ERRORS.ACTIVE_WEB_SOURCE_HEADER\"), $translate.instant(\"REPORT.ERRORS.ACTIVE_WEB_SOURCE_BODY\"));\n else\n ReportService.deleteReport($scope, $state, $event, vm.report);\n }\n\n vm.uploadReportFeedback = function($event) {\n ReportService.uploadFeedbackPrompt($scope, $event, vm.report.id);\n }\n\n vm.exportReport = function(type, $event) {\n ReportService.exportPrompt($scope, $event, vm.report.id, user, vm.parameters, type, vm.data.count);\n }\n\n //Bookmarks starts\n vm.saveBookmark = function(title, event) {\n var request = {\n url: $location.search().query,\n title: title,\n reportId: vm.reportId\n };\n event.target.disabled = true;\n api.report.saveBookmark(request)\n .then(function (res) {\n vm.allBookmarks = res;\n vm.bookmarks = vm.allBookmarks.filter(function (k) { return k.userName != null });\n vm.generalBookmarks = vm.allBookmarks.filter(function (k) { return k.userName == null });\n vm.newBookmarkTitle = null;\n event.target.disabled = false;\n }, function (response) {\n console.log(response);\n event.target.disabled = false;\n })\n }\n\n //General ookmarks starts\n this.saveGeneralBookmark = function (title, event) {\n var request = {\n url: $location.search().query,\n title: title,\n reportId: vm.reportId\n };\n event.target.disabled = true;\n api.report.saveGeneralBookmark(request)\n .then(function (res) {\n vm.allBookmarks = res;\n vm.bookmarks = vm.allBookmarks.filter(function (k) { return k.userName != null });\n vm.generalBookmarks = vm.allBookmarks.filter(function (k) { return k.userName == null });\n vm.newBookmarkTitle = null;\n vm.newGeneralBookmarkTitle = null;\n event.target.disabled = false;\n }, function (response) {\n console.log(response);\n event.target.disabled = false;\n })\n }\n\n vm.deleteBookmark = function(id, event) {\n var request = {\n reportId: vm.reportId,\n id: id\n };\n event.target.disabled = true;\n api.report.deleteBookmark(request)\n .then(function (res) {\n vm.allBookmarks = res;\n vm.bookmarks = vm.allBookmarks.filter(function (k) { return k.userName != null });\n vm.generalBookmarks = vm.allBookmarks.filter(function (k) { return k.userName == null });\n event.target.disabled = false;\n }, function (response) {\n console.log(response);\n })\n }\n\n vm.goToBookmark = function(query) {\n $location.search('query', query);\n if ($location.search().query) {\n setQueryParameters();\n searchTimeline();\n }\n }\n\n vm.getAttributeAlias = function (tag) {\n if (tag.alias) {\n if ($translate.use() == \"tr\" && tag.alias.tr) return tag.alias.tr;\n if ($translate.use() == \"en\" && tag.alias.en) return tag.alias.en;\n }\n return vm.getFilteredFacetTitle(tag.title);\n }\n\n //Bookmarks ends\n\n function findChartLevel() {\n if (!vm.filterChips || vm.filterChips.length == 0) return 1;\n var foundedChips = vm.filterChips.filter(function (c) {\n return c.level >= 0;\n });\n if (foundedChips && foundedChips.length > 0) {\n foundedChips.sort(function (c1, c2) {\n return c1.level - c2.level;\n });\n return foundedChips[foundedChips.length - 1].level + 1;\n }\n return 1;\n }\n\n function findRecurisiveFacetByValue(facets, value, parent, currentParent) {\n if (!value || !facets || facets.length <= 0) return null;\n for (var i in facets) {\n var f = facets[i];\n if (f.value === value && parent == currentParent) {\n return f;\n } else {\n var p = f.value;\n if (currentParent)\n p = currentParent + \"->\" + f.value;\n var m = findRecurisiveFacetByValue(f.subs, value, parent, p);\n if (m)\n return m;\n }\n }\n return null;\n }\n\n vm.removeFacetFilter = function(item) {\n vm.filterChips = vm.filterChips.filter(function (f) {\n return f != item;\n });\n\n if (item.type == 600) {\n vm.parameters.query = null;\n }\n if (item.level && item.level > 0) {\n var removingFilters = vm.filterChips.filter(function (f) {\n return f.level > item.level;\n });\n if (removingFilters && removingFilters.length > 0) {\n removingFilters.forEach(function (r) {\n vm.filterChips = vm.filterChips.filter(function (f) {\n return f != r;\n });\n })\n }\n }\n searchTimeline();\n }\n\n function setNormalFacetFilters() {\n var filters = ReportQueryParserService.setNormalFacetFilters(vm.filterChips);\n if (filters && filters.length > 0) {\n vm.parameters.filter = filters;\n } else {\n vm.parameters.filter = null;\n }\n }\n\n function setCategoryFacetFilters() {\n var filters = ReportQueryParserService.setCategoryFacetFilters(vm.filterChips);\n if (filters && filters.length > 0) {\n vm.parameters.category = filters;\n } else {\n vm.parameters.category = null;\n }\n }\n\n function setFacetFieldsQuery() {\n \n var fields = vm.reportFields.filter(function (rf) {\n return ReportService.isThisFieldType(300, rf.fieldType);\n });\n fields.forEach(function (f) {\n if (!vm.parameters[\"facet\"]) vm.parameters[\"facet\"] = [];\n if (vm.parameters[\"facet\"].indexOf(f.fieldTitle) == -1)\n vm.parameters[\"facet\"].push(f.fieldTitle);\n })\n var classificationModules = vm.reportModules.filter(function (rm) {\n return rm.moduleTypeId == 1\n });\n if (classificationModules && classificationModules.length > 0) {\n classificationModules.forEach(function (m) {\n if (!vm.parameters[\"facet\"]) vm.parameters[\"facet\"] = [];\n var value = \"\\\"moduleid:\" + m.moduleId + \"\\\"\";\n if (vm.parameters[\"facet\"].indexOf(value) == -1)\n vm.parameters[\"facet\"].push(value);\n })\n }\n var sentimentField = vm.reportFields.filter(function (rf) {\n return rf.fieldType == 200;\n })[0];\n if (sentimentField) {\n if (!vm.parameters[\"facet\"]) vm.parameters[\"facet\"] = [];\n if (vm.parameters[\"facet\"].indexOf(sentimentField.fieldTitle) == -1)\n vm.parameters[\"facet\"].push(sentimentField.fieldTitle);\n }\n }\n\n\n function clickBreadCrumb(breadCrumb) {\n var removingFilters = vm.filterChips.filter(function (f) {\n return f.level > breadCrumb.level;\n });\n if (removingFilters && removingFilters.length > 0) {\n removingFilters.forEach(function (f) {\n vm.filterChips = vm.filterChips.filter(function (filter) {\n return filter != f;\n });\n })\n }\n searchTimeline();\n }\n\n function setBreadCrumbs() {\n vm.breadCrumbs = [{\n value: vm.dashboardClassificationModule.module.name,\n level: -1\n }];\n var tempLevels = vm.filterChips.filter(function (f) {\n return f.level >= 0 && f.key == vm.dashboardModuleId;\n });\n if (tempLevels && tempLevels.length > 0) {\n var foundedLevels = [];\n var eliminateSameModuleAndLevel = [];\n tempLevels.forEach(function (l) {\n var founded = eliminateSameModuleAndLevel.filter(function (item) { return item == l.level; })[0];\n if (!founded) {\n eliminateSameModuleAndLevel.push(l.level);\n foundedLevels.push(l);\n }\n })\n foundedLevels.sort(function (f1, f2) {\n return f1.level - f2.level;\n });\n var p = foundedLevels.filter(function (f) { return !f.parentString; })[0]\n if (!p && foundedLevels.length > 0) {\n var t = foundedLevels[0];\n foundedLevels.push({\n key: t.key,\n group: t.group,\n level: t.level - 1,\n operand: \"AND\",\n type: t.type,\n value: t.titleKey\n });\n }\n foundedLevels.sort(function (f1, f2) {\n return f1.level - f2.level;\n });\n foundedLevels.forEach(function (f) {\n vm.breadCrumbs.push(f);\n });\n }\n }\n\n function setGaugeChart(response) {\n if (vm.dashboardClassificationModule && response) {\n vm.gaugeCategoryData = ReportTemplate1ChartParserService.parseGaugeChart(response, vm.dashboardModuleId, vm.categoryAlieses, vm.targetChartData ? vm.targetChartData : null);\n if (!vm.gaugeCategoryData || vm.gaugeCategoryData.length == 0)\n vm.gaugeChartNoDataAvailable = true;\n else\n vm.gaugeChartNoDataAvailable = false;\n if (!vm.gaugeCategoryData) {\n vm.gaugeCategoryData = {}\n }\n vm.gaugeCategoryData.apiResponse = response;\n }\n }\n\n function setConfusions(response) {\n if (vm.dashboardClassificationModule && response) {\n vm.confusions = ReportTemplate1ChartParserService.parseSentimentConfusions(response, vm.dashboardModuleId, vm.targetChartData ? vm.targetChartData : null, vm.hasSentimentModule, vm.categoryAlieses);\n if (!vm.confusions) {\n vm.confusions = {}\n }\n vm.confusions.apiResponse = response;\n var total = {\n code: \"TOTAL\",\n name: $translate.instant('REPORT.DASHBOARD_TEMPLATE_2.CONFIG.TOTAL')\n }\n\n if (vm.confusions.columns) {\n total.items = JSON.parse(JSON.stringify(vm.confusions.columns))\n } else {\n total.items = [];\n }\n\n total.items.forEach(function (k) { k.percent = 0; k.value = 0; });\n\n if (vm.confusions.rows && vm.confusions.rows.length > 0) {\n for (var i = 0; i < vm.confusions.rows.length; i++) {\n for (var j = 0; j < vm.confusions.rows[i].items.length; j++) {\n total.items[j].value = total.items[j].value + vm.confusions.rows[i].items[j].value;\n }\n }\n for (var i = 0; i < total.items.length; i++) {\n total.items[i].percent = total.items[i].value / total.items[total.items.length-1].value;\n }\n vm.sortConfusions({ name: \"TOTAL\" });\n vm.confusions.rows.sort(function (a, b) { return a.order - b.order; });\n vm.confusions.rows.push(total);\n }\n\n }\n }\n\n vm.numberWithCommas = function (x) {\n return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n }\n\n function dynamicSort(property, value) {\n var sortOrder = 1;\n if (property[0] === \"-\") {\n sortOrder = -1;\n property = property.substr(1);\n }\n return function (a, b) {\n var first = a.items.filter(function (k) { return k.name == value });\n var second = b.items.filter(function (k) { return k.name == value });\n var result = (first[0][property] < second[0][property]) ? -1 : (first[0][property] > second[0][property]) ? 1 : 0;\n return result * sortOrder;\n }\n }\n\n vm.sortConfusions = function (column) {\n var param = \"-\" + vm.confusionSortItem;\n\n if (vm.lastConfusionSort != null && column.name == vm.lastConfusionSort.name) {\n param = vm.confusionSortItem;\n vm.lastConfusionSort = null;\n } else {\n vm.lastConfusionSort = column;\n }\n vm.confusions.rows = vm.confusions.rows.sort(dynamicSort(param, column.name));\n }\n\n function padLeft(number, length) {\n var n = number.toString();\n while (n.length < length) n = '0' + n;\n return n;\n }\n\n function clickGaugeChartItem(item, lastBreadCrumb, gaugeCategoryData) {\n vm.gaugeBarRefresh = !vm.gaugeBarRefresh;\n if (gaugeCategoryData) {\n var lastBreadCrumb = gaugeCategoryData.find(function (x) { return x.category == lastBreadCrumb.value; });\n if (lastBreadCrumb && (!lastBreadCrumb.facet.subs || lastBreadCrumb.facets.subs.length == 0)) {\n return;\n }\n }\n if (!item || !item.facet) return;\n var level = findChartLevel();\n var parentCat = vm.breadCrumbs[vm.breadCrumbs.length - 1];\n if (!parentCat || parentCat.value == item.category || (item.facet && item.facet.parentString && item.facet.parentString === parentCat.parentString)) return;\n var pString = null;\n if (parentCat.level == -1) {\n pString = null;\n } else if (parentCat.parentString) {\n pString = parentCat.parentString + '->' + parentCat.value;\n } else {\n pString = parentCat.value;\n }\n var catFilterChip = {\n key: vm.dashboardModuleId,\n value: item.facet.value,\n type: 100,\n group: -1,\n operand: \"AND\",\n parentString: pString,\n titleKey: parentCat.value,\n level: level\n }\n vm.filterChips.push(catFilterChip);\n searchTimeline();\n //searchDateRanges();\n }\n\n function setupFacets(response, isAllData) {\n\n vm.targetChartData = null;\n if (isAllData) vm.allDataTargetChartData = null;\n response.facetSize = 10;\n response.facets.forEach(function (f) {\n f[\"size\"] = 10;\n f[\"showMoreAndMore\"] = f.facetList && f.facetList.length >= 10 ? true : false;\n f[\"allFacets\"] = f.facetList && f.facetList.length > 10 || vm.reportModuleIds.includes(f.key) ? true : false;\n })\n \n /*var normalCategoryFilters = vm.filterChips.filter(function (c) {\n return c.type == 100;\n });*/\n var normalCategoryFilters = [];\n vm.filterChips.forEach(function (c) {\n if (c.type == 100 && c.operand == \"AND\" && normalCategoryFilters.filter(function (f) { return f.level == c.level && f.operand == \"AND\"; }).length == 0) {\n normalCategoryFilters.push(c);\n }\n });\n if (normalCategoryFilters && normalCategoryFilters.length > 0) {\n var level = findChartLevel();\n normalCategoryFilters.forEach(function (c) {\n var foundedFacets = response.facets.filter(function (f) {\n return f.key === c.key\n });\n if (foundedFacets && foundedFacets.length > 0) {\n var facet = foundedFacets[0];\n var result = findRecurisiveFacetByValue(facet.facetList, c.value, c.parentString ? c.parentString : null, null);\n if (result && result.subs && result.subs.length > 0) {\n result.subs.forEach(function (s) {\n s[\"parentString\"] = c.parentString ? c.parentString + \"->\" + c.value : c.value;\n })\n if (c.group == -1 && level - 1 == c.level && result && result.subs && result.subs.length > 0) {\n vm.targetChartData = {\n key: facet.key,\n title: result.value,\n type: facet.type + 10,\n size: 10,\n count: result.count,\n facetList: result.subs,\n parentString: c.parentString ? c.parentString + \"->\" + c.value : c.value\n };\n if (isAllData) vm.allDataTargetChartData = vm.targetChartData;\n } else if (c.group == -1 && level - 1 == c.level && result) {\n var foundedFilter = normalCategoryFilters.filter(function (cat) {\n return cat.level == level - 2;\n })[0];\n }\n var alias = {};\n var chipCat = getChipCat(c);\n if (chipCat && chipCat.localVariables) {\n chipCat.localVariables.forEach(function (k) {\n alias[k.language] = k.value;\n })\n }\n if (!isAllData) {\n response.facets.push({\n order: facet.order,\n key: facet.key,\n title: result.value,\n type: facet.type + 10,\n size: 10,\n count: result.count,\n facetList: result.subs,\n parentString: c.parentString ? c.parentString + \"->\" + c.value : c.value,\n alias: alias\n });\n }\n } else if (c.group == -1 && level - 1 == c.level) {\n var foundedTarget = response.facets.filter(function (x) {\n return result.parentString && x.parentString && x.parentString == result.parentString;\n })[0];\n if (foundedTarget) {\n foundedTarget = JSON.parse(JSON.stringify(foundedTarget));\n if (foundedTarget.subs && foundedTarget.subs.length > 0) {\n foundedTarget.facetList = foundedTarget.facetList.filter(function (ss) {\n return ss.value === result.value;\n });\n }\n vm.targetChartData = foundedTarget;\n if (isAllData) vm.allDataTargetChartData = vm.targetChartData;\n }\n }\n }\n })\n }\n\n sortFacets();\n\n if (!isAllData) {\n if (normalCategoryFilters && normalCategoryFilters.length > 0) {\n normalCategoryFilters.forEach(function (cFilter) {\n var foundedFacet = response.facets.filter(function (f) {\n return f.key == cFilter.key && cFilter.titleKey == f.title;\n })[0];\n if (foundedFacet)\n response.facets = response.facets.filter(function (f) {\n return f != foundedFacet;\n });\n })\n }\n }\n return response;\n }\n\n vm.resetFilters = function() {\n vm.filteredFacets = {};\n vm.patternFilters = {};\n vm.filterChips = [];\n vm.parameters.query = null;\n searchTimeline();\n }\n\n vm.changeDashboard = function(oldDashboard) {\n if (vm.selectedDashboardTemplate != oldDashboard) {\n $state.current.params[\"selectedDashboard\"] = vm.selectedDashboardTemplate;\n $settings.saveUserSettings(\"template\", vm.selectedDashboardTemplate, vm.report.id);\n $state.go($state.current, { selectedDashboard: vm.selectedDashboardTemplate }, { reload: true })\n }\n }\n\n function buildToggler(navID) {\n return function () {\n // Component lookup should always be available since we are not using `ng-if`\n $mdSidenav(navID)\n .toggle()\n .then(function () {\n $log.debug(\"toggle \" + navID + \" is done\");\n });\n };\n }\n\n function findFormulaTableValues() {\n vm.reportFields.forEach(function (reportField) {\n if (ReportService.isThisFieldType(300, reportField.fieldType)) vm.categoryReportFields.push(reportField);\n if (ReportService.isTextNominal(reportField.fieldType)) vm.stringReportFields.push(reportField);\n })\n api.settings.findFormulaTableSettings(vm.reportId)\n .then(function (response) {\n vm.isFormulaTableSettingsValid = true;\n vm.formulaTable = response;\n if (!vm.formulaTable || !vm.formulaTable.fieldX || !vm.formulaTable.fieldY || !vm.formulaTable.fieldYNickname || vm.formulaTable.connectedFieldValues.length == 0) {\n vm.isFormulaTableSettingsValid = false;\n }\n },\n function (response) {\n $log.error(response);\n });\n }\n\n function setQueryParameters() {\n if ($location.search().query) {\n vm.parameters = JSON.parse(base64.decode($location.search().query));\n if (vm.parameters && vm.parameters.startDate && vm.parameters.endDate) {\n vm.afterDatePicker = {\n startDate: moment(vm.parameters.startDate).toDate(),\n endDate: moment(vm.parameters.endDate).toDate()\n }\n vm.beforeDatePicker = {\n startDate: !vm.beforeDatePicker.startDate ? moment(vm.parameters.startDate).subtract(1, 'y').toDate() : vm.beforeDatePicker.startDate,\n endDate: !vm.beforeDatePicker.endDate ? moment(vm.parameters.endDate).subtract(1, 'y').toDate() : vm.beforeDatePicker.endDate\n }\n vm.parameters.startDate = vm.afterDatePicker.startDate.toISOString().split('.')[0] + \"Z\";\n vm.parameters.endDate = vm.afterDatePicker.endDate.toISOString().split('.')[0] + \"Z\";\n }\n vm.filterChips = ReportService.generateFilterChipsFromFilter(vm.parameters, vm.reportModules);\n }\n if ($location.search().logs) vm.showLogs = true;\n if ($location.search().url || $location.search().oid) {\n $state.go('app.report.data', {\n id: vm.reportId,\n url: $location.search().url,\n oid: $location.search().oid,\n query: $location.search().query\n });\n }\n }\n\n function init() {\n //setDate();\n //setTimeout(function () { createDatePickers(); }, 2000);\n //searchTimeline();\n setChartCategoryAliases();\n findFormulaTableValues();\n setQueryParameters();\n initializeDateRangesAndSearch();\n $utils.saveAudit(vm.reportId, \"REPORT\", \"OPEN\", vm.report.name + \" / Score Report\");\n getIsFlatModeActive();\n $utils.googleAnalyticsSetPageview(\"/report/\" + vm.reportId + \"/overview\");\n $utils.googleAnalyticsSetScreenView(\"Score Report\");\n }\n init();\n\n //DATE PICKER FUNCTIONS START\n function setDate() {\n vm.afterDatePicker = {\n startDate: vm.report.dates && vm.report.dates.startDate ? moment(vm.report.dates.startDate).toDate() : null,\n //endDate: vm.report.dates && vm.report.dates.endDate ? moment(vm.report.dates.endDate).add(1, 'days').toDate() : null\n endDate: vm.report.dates && vm.report.dates.endDate ? moment(vm.report.dates.endDate).startOf('day').add(1, 'days').add(-1, 'seconds').toDate() : null\n };\n if (vm.afterDatePicker && vm.afterDatePicker.startDate && vm.afterDatePicker.endDate) {\n vm.parameters.startDate = vm.afterDatePicker.startDate.toISOString().split('.')[0] + \"Z\";\n vm.parameters.endDate = vm.afterDatePicker.endDate.toISOString().split('.')[0] + \"Z\";\n }\n }\n\n function initializeDateRangesAndSearch() {\n var promises = [api.report.settings.findReportDefaultDateSettings(vm.report.id)];\n $q.all(promises).then(function (results) {\n var defaultDate;\n if (results[0]) {\n var r = results[0];\n defaultDate = {\n period: { type: r.periodType },\n beforeDatePeriod: { type: r.beforeDatePeriodType, startDate: r.beforeDatePeriodStartDate, endDate: r.beforeDatePeriodEndDate },\n afterDatePeriod: { type: r.afterDatePeriodType, startDate: r.afterDatePeriodStartDate, endDate: r.afterDatePeriodEndDate }\n };\n }\n initDateRanges(defaultDate);\n encodeFilters(vm.parameters);\n searchTimeline();\n }, function (error) {\n $log.error(error);\n })\n }\n\n function initDateRanges(defaultDate) {\n if (defaultDate.period.type != null || (defaultDate.beforeDatePeriod.startDate != null && defaultDate.beforeDatePeriod.endDate != null && defaultDate.afterDatePeriod.startDate != null && defaultDate.afterDatePeriod.endDate != null)) {//if defaults are set for dates on db\n if (vm.userSettings && !vm.userSettings.defaultDateUpdated && vm.userSettings.afterDate) {\n if (vm.userSettings.afterDate.startDate)\n vm.afterDatePicker.startDate = moment(vm.userSettings.afterDate.startDate).toDate();\n if (vm.userSettings.afterDate.endDate)\n vm.afterDatePicker.endDate = moment(vm.userSettings.afterDate.endDate).toDate();\n\n } else {\n var afterStartDate;\n var afterEndDate;\n if (defaultDate.afterDatePeriod.type == 'presentPeriod') {\n afterStartDate = moment(new Date()).startOf(defaultDate.period.type).toDate();\n afterEndDate = setPeriodEndDate(afterStartDate, defaultDate.period.type);\n } else if (defaultDate.afterDatePeriod.type == 'completedLastPeriod') {\n afterStartDate = moment(new Date()).subtract(1, defaultDate.period.type).startOf(defaultDate.period.type).toDate();\n afterEndDate = setPeriodEndDate(afterStartDate, defaultDate.period.type);\n } else if (defaultDate.afterDatePeriod.type == 'chooseDate') {\n afterStartDate = moment(defaultDate.afterDatePeriod.startDate);\n afterEndDate = moment(defaultDate.afterDatePeriod.endDate);\n } else {//default: lastPeriodWithData\n afterStartDate = moment(vm.report.dates.endDate).startOf(defaultDate.period.type).toDate();\n afterEndDate = setPeriodEndDate(afterStartDate, defaultDate.period.type);\n }\n vm.afterDatePicker = {\n startDate: afterStartDate,\n endDate: afterEndDate\n };\n }\n if (vm.userSettings && !vm.userSettings.defaultDateUpdated && vm.userSettings.beforeDate) {\n if (vm.userSettings.beforeDate.startDate)\n vm.beforeDatePicker.startDate = moment(vm.userSettings.beforeDate.startDate).toDate();\n if (vm.userSettings.beforeDate.endDate)\n vm.beforeDatePicker.endDate = moment(vm.userSettings.beforeDate.endDate).toDate();\n } else {\n var beforeStartDate;\n var beforeEndDate;\n if (defaultDate.beforeDatePeriod.type == 'chooseDate') {\n beforeStartDate = moment(defaultDate.beforeDatePeriod.startDate);\n beforeEndDate = moment(defaultDate.beforeDatePeriod.endDate);\n } else {\n if (defaultDate.afterDatePeriod.type == 'chooseDate') {\n if (defaultDate.beforeDatePeriod.type == 'lastYear') {\n beforeStartDate = moment(vm.afterDatePicker.startDate).subtract(1, 'year').toDate();\n beforeEndDate = moment(vm.afterDatePicker.endDate).subtract(1, 'year').toDate();\n } else {//default: lastPeriod\n beforeEndDate = moment(vm.afterDatePicker.startDate).toDate();\n beforeStartDate = moment(vm.afterDatePicker.startDate).subtract(moment(vm.afterDatePicker.endDate).diff(moment(vm.afterDatePicker.startDate), 'days'), 'days').toDate();\n }\n } else {\n if (defaultDate.beforeDatePeriod.type == 'lastYear') {\n beforeStartDate = moment(vm.afterDatePicker.startDate).subtract(1, 'year').toDate();\n beforeEndDate = setPeriodEndDate(beforeStartDate, defaultDate.period.type);\n } else {//default: lastPeriod\n beforeStartDate = moment(vm.afterDatePicker.startDate).subtract(1, defaultDate.period.type).toDate();\n beforeEndDate = setPeriodEndDate(beforeStartDate, defaultDate.period.type);\n }\n }\n }\n vm.beforeDatePicker = {\n startDate: beforeStartDate,\n endDate: beforeEndDate\n };\n }\n if (vm.userSettings && vm.userSettings.defaultDateUpdated) {\n //addTemplateReportCookie('defaultDateUpdated', false)\n $settings.saveUserSettings(\"defaultDateUpdated\", false, vm.report.id);\n //addTemplateReportCookie('beforeDate', { 'startDate': vm.beforeDatePicker.startDate, 'endDate': vm.beforeDatePicker.endDate })\n $settings.saveUserSettings(\"beforeDate\", { 'startDate': vm.beforeDatePicker.startDate, 'endDate': vm.beforeDatePicker.endDate }, vm.report.id);\n //addTemplateReportCookie('afterDate', { 'startDate': vm.afterDatePicker.startDate, 'endDate': vm.afterDatePicker.endDate })\n $settings.saveUserSettings(\"afterDate\", { 'startDate': vm.afterDatePicker.startDate, 'endDate': vm.afterDatePicker.endDate }, vm.report.id);\n }\n } else {\n if (!vm.report.dates || !vm.report.dates.startDate || !vm.report.dates.endDate) return;\n var newestDocumentDate = vm.report.dates.endDate;\n if (newestDocumentDate && !vm.parameters.startDate && !vm.parameters.endDate) {\n /*\n newestDocumentDate = moment(new Date(newestDocumentDate));\n vm.currentQuarter = newestDocumentDate.quarter();\n if (vm.userSettings && vm.userSettings.afterDate) {\n if (vm.userSettings.afterDate.startDate)\n vm.afterDatePicker.startDate = moment(vm.userSettings.afterDate.startDate).toDate();\n if (vm.userSettings.afterDate.endDate)\n vm.afterDatePicker.endDate = moment(vm.userSettings.afterDate.endDate).toDate();\n } else {\n vm.afterDatePicker = {\n startDate: newestDocumentDate.clone().quarter(vm.currentQuarter).startOf('quarter').toDate(),\n endDate: newestDocumentDate.clone().quarter(vm.currentQuarter).endOf('quarter').toDate()\n };\n }\n if (vm.userSettings && vm.userSettings.beforeDate) {\n if (vm.userSettings.beforeDate.startDate)\n vm.beforeDatePicker.startDate = moment(vm.userSettings.beforeDate.startDate).toDate();\n if (vm.userSettings.beforeDate.endDate)\n vm.beforeDatePicker.endDate = moment(vm.userSettings.beforeDate.endDate).toDate();\n } else {\n vm.beforeDatePicker = {\n startDate: newestDocumentDate.clone().subtract(1, 'quarter').startOf('quarter').toDate(),\n endDate: newestDocumentDate.clone().subtract(1, 'quarter').endOf('quarter').toDate()\n };\n }\n */\n\n vm.afterDatePicker.startDate = moment().startOf('year').toDate();\n vm.afterDatePicker.endDate = moment().endOf('day').toDate();\n vm.beforeDatePicker.startDate = moment().startOf('year').subtract(1, 'y').toDate();\n vm.beforeDatePicker.endDate = moment().endOf('day').subtract(1, 'y').toDate();\n }\n }\n\n vm.parameters.startDate = vm.afterDatePicker.startDate.toISOString().split('.')[0] + \"Z\";\n vm.parameters.endDate = vm.afterDatePicker.endDate.toISOString().split('.')[0] + \"Z\";\n\n function setPeriodEndDate(startDate, period) {\n if (period == 'year') {\n return moment(startDate).clone().add(moment.duration({ Y: 1 })).toDate()\n } else if (period == 'month') {\n return moment(startDate).clone().add(moment.duration({ M: 1 })).toDate()\n } else if (period == 'quarter') {\n return moment(startDate).clone().add(moment.duration({ M: 3 })).toDate()\n } else {// default is quarter\n return moment(startDate).clone().add(moment.duration({ M: 3 })).toDate()\n }\n }\n\n //createDatePickers();\n createDatePicker();\n }\n\n function createDateTypes() {\n vm.dateTypes = [{\n id: 1,\n name: $translate.instant('REPORT.CONTENT_DATE')\n },\n {\n id: 2,\n name: $translate.instant('SHARED.ORDER.UPDATED_DATE')\n },\n {\n id: 3,\n name: $translate.instant('SHARED.ORDER.CREATED_DATE')\n }]\n var l = \"
\" +\n \"\" +\n \"
\";\n $(\".datetype\").remove();\n $(\".drp-buttons\").prepend($compile(l)($scope));\n\n vm.parameters.searchByDate = vm.paramSearchByDate;\n\n if ($(\".datetype\")[($(\".datetype\").length - 2).toString()]) $(\".datetype\")[($(\".datetype\").length - 2).toString()].hidden = true;\n }\n\n function createDatePickers() {\n createDateComponentTurkish('#beforereportrange', vm.beforeDatePicker.startDate, vm.beforeDatePicker.endDate);\n createDateComponentTurkish('#afterreportrange', vm.afterDatePicker.startDate, vm.afterDatePicker.endDate);\n createDateComponentEnglish('#beforereportrange2', vm.beforeDatePicker.startDate, vm.beforeDatePicker.endDate);\n createDateComponentEnglish('#afterreportrange2', vm.afterDatePicker.startDate, vm.afterDatePicker.endDate);\n \n if (($('#beforereportrange').length && $('#afterreportrange').length)) {\n $('input[id=\"beforereportrange\"]').on('apply.daterangepicker', function (ev, picker) {\n vm.beforeDatePicker = {\n startDate: picker.startDate.toDate(),\n endDate: picker.endDate.toDate()\n };\n //addTemplateReportCookie(\"beforeDate\", vm.beforeDatePicker);\n $settings.saveUserSettings(\"beforeDate\", vm.beforeDatePicker, vm.report.id);\n changeDate();\n searchTimeline();\n });\n $('input[id=\"beforereportrange\"]').on('hide.daterangepicker', function (ev, picker) {\n refreshDatePickersFormat();\n });\n\n $('input[id=\"afterreportrange\"]').on('apply.daterangepicker', function (ev, picker) {\n vm.afterDatePicker = {\n startDate: picker.startDate.toDate(),\n endDate: picker.endDate.toDate()\n };\n vm.beforeDatePicker = {\n startDate: moment(vm.afterDatePicker.startDate).subtract(1, 'y').toDate(),\n endDate: moment(vm.afterDatePicker.endDate).subtract(1, 'y').toDate()\n };\n if ($('#beforereportrange').is(':visible')) {\n $('input[id=\"beforereportrange\"]').data('daterangepicker').setStartDate(vm.beforeDatePicker.startDate);\n $('input[id=\"beforereportrange\"]').data('daterangepicker').setEndDate(vm.beforeDatePicker.endDate);\n }\n if ($('#afterreportrange3').is(':visible')) {\n $('input[id=\"afterreportrange3\"]').data('daterangepicker').setStartDate(vm.afterDatePicker.startDate);\n $('input[id=\"afterreportrange3\"]').data('daterangepicker').setEndDate(vm.afterDatePicker.endDate); \n }\n \n //addTemplateReportCookie(\"afterDate\", vm.afterDatePicker);\n $settings.saveUserSettings(\"afterDate\", vm.afterDatePicker, vm.report.id);\n changeDate();\n $('input[id=\"beforereportrange\"]').click();\n });\n $('input[id=\"afterreportrange\"]').on('hide.daterangepicker', function (ev, picker) {\n refreshDatePickersFormat();\n });\n } \n\n if (($('#beforereportrange2').length && $('#afterreportrange2').length)) {\n $('input[id=\"beforereportrange2\"]').on('apply.daterangepicker', function (ev, picker) {\n vm.beforeDatePicker = {\n startDate: picker.startDate.toDate(),\n endDate: picker.endDate.toDate()\n };\n //addTemplateReportCookie(\"beforeDate\", vm.beforeDatePicker);\n $settings.saveUserSettings(\"beforeDate\", vm.beforeDatePicker, vm.report.id);\n changeDate();\n searchTimeline();\n });\n $('input[id=\"beforereportrange2\"]').on('hide.daterangepicker', function (ev, picker) {\n refreshDatePickersFormat();\n });\n\n $('input[id=\"afterreportrange2\"]').on('apply.daterangepicker', function (ev, picker) {\n vm.afterDatePicker = {\n startDate: picker.startDate.toDate(),\n endDate: picker.endDate.toDate()\n };\n vm.beforeDatePicker = {\n startDate: moment(vm.afterDatePicker.startDate).subtract(1, 'y').toDate(),\n endDate: moment(vm.afterDatePicker.endDate).subtract(1, 'y').toDate()\n };\n if ($('#beforereportrange2').is(':visible')) {\n $('input[id=\"beforereportrange2\"]').data('daterangepicker').setStartDate(vm.beforeDatePicker.startDate);\n $('input[id=\"beforereportrange2\"]').data('daterangepicker').setEndDate(vm.beforeDatePicker.endDate);\n }\n if ($('#afterreportrange4').is(':visible')) {\n $('input[id=\"afterreportrange4\"]').data('daterangepicker').setStartDate(vm.afterDatePicker.startDate);\n $('input[id=\"afterreportrange4\"]').data('daterangepicker').setEndDate(vm.afterDatePicker.endDate); \n }\n //addTemplateReportCookie(\"afterDate\", vm.afterDatePicker);\n $settings.saveUserSettings(\"afterDate\", vm.afterDatePicker, vm.report.id);\n changeDate();\n $('input[id=\"beforereportrange2\"]').click();\n });\n $('input[id=\"afterreportrange2\"]').on('hide.daterangepicker', function (ev, picker) {\n refreshDatePickersFormat();\n });\n }\n createDateTypes();\n refreshDatePickersFormat();\n }\n\n function createDatePickers2() {\n createDateComponentTurkish('#afterreportrange3', vm.afterDatePicker.startDate, vm.afterDatePicker.endDate);\n createDateComponentEnglish('#afterreportrange4', vm.afterDatePicker.startDate, vm.afterDatePicker.endDate);\n $('input[id=\"afterreportrange3\"]').on('apply.daterangepicker', function (ev, picker) {\n vm.afterDatePicker = {\n startDate: picker.startDate.toDate(),\n endDate: picker.endDate.toDate()\n };\n vm.beforeDatePicker = {\n startDate: moment(vm.afterDatePicker.startDate).subtract(1, 'y').toDate(),\n endDate: moment(vm.afterDatePicker.endDate).subtract(1, 'y').toDate()\n };\n if ($('#beforereportrange').is(':visible')) {\n $('input[id=\"beforereportrange\"]').data('daterangepicker').setStartDate(vm.beforeDatePicker.startDate);\n $('input[id=\"beforereportrange\"]').data('daterangepicker').setEndDate(vm.beforeDatePicker.endDate);\n }\n if ($('#afterreportrange').is(':visible')) {\n $('input[id=\"afterreportrange\"]').data('daterangepicker').setStartDate(vm.afterDatePicker.startDate);\n $('input[id=\"afterreportrange\"]').data('daterangepicker').setEndDate(vm.afterDatePicker.endDate); \n }\n //addTemplateReportCookie(\"afterDate\", vm.afterDatePicker);\n $settings.saveUserSettings(\"afterDate\", vm.afterDatePicker, vm.report.id);\n changeDate();\n searchTimeline();\n /*\n if ($('#beforereportrange').is(':visible')) {\n $('input[id=\"beforereportrange\"]').click();\n } else {\n searchTimeline();\n }*/\n });\n $('input[id=\"afterreportrange3\"]').on('hide.daterangepicker', function (ev, picker) {\n refreshDatePickersFormat();\n });\n $('input[id=\"afterreportrange4\"]').on('apply.daterangepicker', function (ev, picker) {\n vm.afterDatePicker = {\n startDate: picker.startDate.toDate(),\n endDate: picker.endDate.toDate()\n };\n vm.beforeDatePicker = {\n startDate: moment(vm.afterDatePicker.startDate).subtract(1, 'y').toDate(),\n endDate: moment(vm.afterDatePicker.endDate).subtract(1, 'y').toDate()\n };\n if ($('#beforereportrange2').is(':visible')) {\n $('input[id=\"beforereportrange2\"]').data('daterangepicker').setStartDate(vm.beforeDatePicker.startDate);\n $('input[id=\"beforereportrange2\"]').data('daterangepicker').setEndDate(vm.beforeDatePicker.endDate);\n }\n if ($('#beforereportrange2').is(':visible')) {\n $('input[id=\"afterreportrange2\"]').data('daterangepicker').setStartDate(vm.afterDatePicker.startDate);\n $('input[id=\"afterreportrange2\"]').data('daterangepicker').setEndDate(vm.afterDatePicker.endDate); \n }\n //addTemplateReportCookie(\"afterDate\", vm.afterDatePicker);\n $settings.saveUserSettings(\"afterDate\", vm.afterDatePicker, vm.report.id);\n changeDate();\n searchTimeline();\n /*\n if ($('#beforereportrange2').is(':visible')) {\n $('input[id=\"beforereportrange2\"]').click();\n } else {\n searchTimeline();\n }*/\n });\n $('input[id=\"afterreportrange4\"]').on('hide.daterangepicker', function (ev, picker) {\n refreshDatePickersFormat();\n });\n createDateTypes();\n refreshDatePickersFormat();\n }\n\n function createDatePicker() {\n if (($('#beforereportrange').is(':visible') && $('#afterreportrange').is(':visible') && vm.languageDatePicker == 1) || ($('#beforereportrange2').is(':visible') && $('#afterreportrange2').is(':visible') && vm.languageDatePicker == 2)) { //if the container is visible on the page\n createDatePickers();\n } else {\n setTimeout(createDatePickers, 50); //wait 50 ms, then try again\n }\n if (($('#afterreportrange3').is(':visible') && vm.languageDatePicker == 1) || ($('#afterreportrange4').is(':visible') && vm.languageDatePicker == 2)) { //if the container is visible on the page\n createDatePickers2();\n } else {\n setTimeout(createDatePickers2, 50); //wait 50 ms, then try again\n }\n }\n\n function changeDate() {\n vm.parameters.startDate = vm.afterDatePicker.startDate.toISOString().split('.')[0] + \"Z\";\n vm.parameters.endDate = vm.afterDatePicker.endDate.toISOString().split('.')[0] + \"Z\";\n if (vm.parameters.startDate === vm.parameters.endDate) {\n vm.parameters.endDate = moment(vm.parameters.endDate).add(1, 'days').toDate().toISOString().split('.')[0] + \"Z\"\n }\n refreshDatePickersFormat();\n }\n\n vm.clearDate = function () {\n vm.afterDatePicker = {\n startDate: null,\n endDate: null\n };\n vm.parameters.startDate = null;\n vm.parameters.endDate = null;\n searchTimeline();\n $('#afterreportrange').val('Tarih');\n $('#afterreportrange2').val('Tarih');\n }\n\n function getDatePickerValue(picker) {\n var value = null;\n if (picker && picker.startDate && picker.endDate) {\n if (picker.startDate.getDate() == 1 && picker.startDate.getMonth() + 1 == 1 &&\n picker.endDate.getDate() == 31 && picker.endDate.getMonth() + 1 == 3 &&\n picker.startDate.getYear() == picker.endDate.getYear()) {\n value = \"Q1 (\" + picker.startDate.getFullYear() + \")\";\n } else if (picker.startDate.getDate() == 1 && picker.startDate.getMonth() + 1 == 4 &&\n picker.endDate.getDate() == 30 && picker.endDate.getMonth() + 1 == 6 &&\n picker.startDate.getYear() == picker.endDate.getYear()) {\n value = \"Q2 (\" + picker.startDate.getFullYear() + \")\";\n } else if (picker.startDate.getDate() == 1 && picker.startDate.getMonth() + 1 == 7 &&\n picker.endDate.getDate() == 30 && picker.endDate.getMonth() + 1 == 9 &&\n picker.startDate.getYear() == picker.endDate.getYear()) {\n value = \"Q3 (\" + picker.startDate.getFullYear() + \")\";\n } else if (picker.startDate.getDate() == 1 && picker.startDate.getMonth() + 1 == 10 &&\n picker.endDate.getDate() == 31 && picker.endDate.getMonth() + 1 == 12 &&\n picker.startDate.getYear() == picker.endDate.getYear()) {\n value = \"Q4 (\" + picker.startDate.getFullYear() + \")\";\n }\n }\n return value;\n }\n\n function refreshDatePickersFormat() {\n var afterValue = getDatePickerValue(vm.afterDatePicker);\n var beforeValue = getDatePickerValue(vm.beforeDatePicker);\n var dateRanges = {};\n if (vm.languageDatePicker == 1)\n dateRanges = vm.dateRanges;\n else if (vm.languageDatePicker == 2)\n dateRanges = vm.dateRangesEn;\n\n Object.keys(dateRanges).forEach(function (k) {\n if (dateRanges[k][0].format('DD/MM/YYYY') == moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') && dateRanges[k][1].format('DD/MM/YYYY') == moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY')) {\n afterValue = k;\n }\n if (dateRanges[k][0].format('DD/MM/YYYY') == moment(vm.beforeDatePicker.startDate).format('DD/MM/YYYY') && dateRanges[k][1].format('DD/MM/YYYY') == moment(vm.beforeDatePicker.endDate).format('DD/MM/YYYY')) {\n beforeValue = k;\n }\n })\n if (afterValue) {\n $('#afterreportrange').val(afterValue);\n $('#afterreportrange2').val(afterValue);\n $('#afterreportrange3').val(afterValue);\n $('#afterreportrange4').val(afterValue);\n } else {\n $('#afterreportrange').val(moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY'));\n $('#afterreportrange2').val(moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY'));\n $('#afterreportrange3').val(moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY'));\n $('#afterreportrange4').val(moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY'));\n }\n if (beforeValue) {\n $('#beforereportrange').val(beforeValue);\n $('#beforereportrange2').val(beforeValue);\n } else {\n $('#beforereportrange').val(moment(vm.beforeDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.beforeDatePicker.endDate).format('DD/MM/YYYY'));\n $('#beforereportrange2').val(moment(vm.beforeDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.beforeDatePicker.endDate).format('DD/MM/YYYY'));\n }\n \n }\n\n vm.dateRanges = {\n 'Bugün': [moment(), moment()],\n 'Dün': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],\n 'Son 7 Gün': [moment().subtract(6, 'days'), moment()],\n 'Son 30 Gün': [moment().subtract(29, 'days'), moment()],\n 'Bu Ay': [moment().startOf('month'), moment().endOf('month')],\n 'Geçen Ay': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')],\n 'Bu Yıl': [moment().startOf('year'), moment().endOf('year')],\n 'Geçen Yıl (Tümü)': [moment().startOf('year').subtract(1, 'y'), moment().endOf('year').subtract(1, 'y')],\n 'Bu Yıl (YTD)': [moment().startOf('year'), moment().endOf('day')],\n 'Geçen Yıl (YTD)': [moment().startOf('year').subtract(1, 'y'), moment().endOf('day').subtract(1, 'y')],\n 'Önceki Yıl (Tümü)': [moment().startOf('year').subtract(2, 'y'), moment().endOf('year').subtract(2, 'y')]\n }\n\n vm.dateRanges['Q1 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 0, 1)), moment(new Date(moment().year(), 2, 31))];\n vm.dateRanges['Q2 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 3, 1)), moment(new Date(moment().year(), 5, 30))];\n vm.dateRanges['Q3 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 6, 1)), moment(new Date(moment().year(), 8, 30))];\n vm.dateRanges['Q4 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 9, 1)), moment(new Date(moment().year(), 11, 31))];\n vm.dateRanges['Q1 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 0, 1)), moment(new Date(moment().year() - 1, 2, 31))];\n vm.dateRanges['Q2 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 3, 1)), moment(new Date(moment().year() - 1, 5, 30))];\n vm.dateRanges['Q3 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 6, 1)), moment(new Date(moment().year() - 1, 8, 30))];\n vm.dateRanges['Q4 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 9, 1)), moment(new Date(moment().year() - 1, 11, 31))];\n\n vm.dateRangesEn = {\n 'Today': [moment(), moment()],\n 'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],\n 'Last 7 Days': [moment().subtract(6, 'days'), moment()],\n 'Last 30 Days': [moment().subtract(29, 'days'), moment()],\n 'This Month': [moment().startOf('month'), moment().endOf('month')],\n 'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')],\n 'This Year': [moment().startOf('year'), moment().endOf('year')],\n 'Last Year (All)': [moment().startOf('year').subtract(1, 'y'), moment().endOf('year').subtract(1, 'y')],\n 'This Year (YTD)': [moment().startOf('year'), moment().endOf('day')],\n 'Last Year (YTD)': [moment().startOf('year').subtract(1, 'y'), moment().endOf('day').subtract(1, 'y')],\n 'Previous Year (All)': [moment().startOf('year').subtract(2, 'y'), moment().endOf('year').subtract(2, 'y')]\n } \n\n vm.dateRangesEn['Q1 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 0, 1)), moment(new Date(moment().year(), 2, 31))];\n vm.dateRangesEn['Q2 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 3, 1)), moment(new Date(moment().year(), 5, 30))];\n vm.dateRangesEn['Q3 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 6, 1)), moment(new Date(moment().year(), 8, 30))];\n vm.dateRangesEn['Q4 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 9, 1)), moment(new Date(moment().year(), 11, 31))];\n vm.dateRangesEn['Q1 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 0, 1)), moment(new Date(moment().year() - 1, 2, 31))];\n vm.dateRangesEn['Q2 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 3, 1)), moment(new Date(moment().year() - 1, 5, 30))];\n vm.dateRangesEn['Q3 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 6, 1)), moment(new Date(moment().year() - 1, 8, 30))];\n vm.dateRangesEn['Q4 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 9, 1)), moment(new Date(moment().year() - 1, 11, 31))];\n\n function createDateComponentTurkish(id, startDate, endDate) {\n $(id).daterangepicker({\n startDate: moment(startDate).toDate(),\n endDate: moment(endDate).toDate(),\n ranges: vm.dateRanges,\n opens: 'left',\n //alwaysShowCalendars: true,\n locale: {\n format: 'DD/MM/YYYY',\n applyLabel: \"Uygula\",\n cancelLabel: \"Vazgeç\",\n \"fromLabel\": \"Dan\",\n \"toLabel\": \"a\",\n \"customRangeLabel\": \"Seç\",\n \"daysOfWeek\": [\n \"Pz\",\n \"Pt\",\n \"Sl\",\n \"Çr\",\n \"Pr\",\n \"Cm\",\n \"Ct\"\n ],\n \"monthNames\": [\n \"Ocak\",\n \"Şubat\",\n \"Mart\",\n \"Nisan\",\n \"Mayıs\",\n \"Haziran\",\n \"Temmuz\",\n \"Ağustos\",\n \"Eylül\",\n \"Ekim\",\n \"Kasım\",\n \"Aralık\"\n ],\n \"firstDay\": 1\n }\n }, refreshDatePickersFormat);\n }\n\n function createDateComponentEnglish(id, startDate, endDate) {\n $(id).daterangepicker({\n startDate: moment(startDate).toDate(),\n endDate: moment(endDate).toDate(),\n ranges: vm.dateRangesEn,\n opens: 'left',\n //alwaysShowCalendars: true,\n locale: {\n format: 'DD/MM/YYYY',\n applyLabel: \"Apply\",\n cancelLabel: \"Cancel\",\n \"fromLabel\": \"from\",\n \"toLabel\": \"to\",\n \"customRangeLabel\": \"Choose\",\n \"daysOfWeek\": [\n \"Sn\",\n \"Mn\",\n \"Tu\",\n \"Wn\",\n \"Th\",\n \"Fr\",\n \"St\"\n ],\n \"monthNames\": [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\"\n ],\n \"firstDay\": 1\n }\n }, refreshDatePickersFormat);\n }\n //DATE PICKER FUNCTIONS END\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.report')\n .controller('ReportDashboardTemplate2', ReportDashboardTemplate2);\n\n /** @ngInject */\n function ReportDashboardTemplate2($rootScope, $scope, $state, $translate, $window, $q,\n $stateParams, $log, api, ReportService, ReportTemplate1_2ChartParserService, ReportQueryParserService, $$report, $location, $mdSidenav, base64, user, toastService, $utils, $settings, appSettings, $compile) {\n var vm = this;\n if (!$location.search().query && ReportService.getQuery($$report.id) != null) {\n $location.search('query', ReportService.getQuery($$report.id).query);\n }\n moment.locale('tr');\n vm.translate = $translate;\n vm.noTrainedModule = !($$report.hasTrainedModule);\n vm.sideNavEnabled = true;\n vm.reportFields = $$report.reportFields;\n vm.reportModules = $$report.reportModules;\n vm.reportModuleIds = vm.reportModules.map(function (k) {\n return k.moduleId;\n });\n vm.activeSources = appSettings.activeSources;\n vm.queueActive = appSettings.queueActive;\n vm.isFlatModeActive = false;\n vm.selectedDashboardTemplate = $stateParams.selectedDashboard ? $stateParams.selectedDashboard : $$report.selectedDashboard ? $$report.selectedDashboard: $$report.dashboardTemplate ? $$report.dashboardTemplate : 1;\n vm.report = $$report;\n vm.comparationPeriodActive = vm.report.periodSearchActive;\n vm.defaultTemporalSentimentOption = vm.report.temporalSentimentOption;\n vm.categoryAlieses = []; //$$report.categoryAliases;\n vm.dashboardClassificationModule = $stateParams.dashboardClassificationModule;\n //vm.reportCookie = $cookies.get(\"reports\") ? JSON.parse($cookies.get(\"reports\")).filter(function (r) { return r.id == vm.report.id; })[0] : null;\n vm.userSettings = $settings.reportSettingsList ? $settings.reportSettingsList.filter(function (r) { return r.reportId == vm.report.id; })[0] : null;\n vm.reportSettings = $$report.reportSettings;\n vm.settings = $settings;\n vm.documentNickname = $translate.use() == \"tr\" ? vm.reportSettings.commonSettings.documentNicknameTr : vm.reportSettings.commonSettings.documentNicknameEn;\n //vm.reportsXmatrixs = $cookies.get(\"reportsXmatrixs\") ? JSON.parse($cookies.get(\"reportsXmatrixs\")).filter(function (r) { return r.id == vm.report.id; })[0] : null;\n //vm.reportsXmatrixs = vm.reportSettings && vm.reportSettings.reportsXmatrixs ? vm.reportSettings.reportsXmatrixs : null;\n //vm.reportsYmatrixs = $cookies.get(\"reportsYmatrixs\") ? JSON.parse($cookies.get(\"reportsYmatrixs\")).filter(function (r) { return r.id == vm.report.id; })[0] : null;\n //vm.reportsYmatrixs = vm.reportSettings && vm.reportSettings.reportsYmatrixs ? vm.reportSettings.reportsYmatrixs : null;\n vm.categories = $$report.moduleCategories;\n vm.allBookmarks = $$report.bookmarks;\n vm.bookmarks = vm.allBookmarks.filter(function (k) { return k.userName != null });\n vm.generalBookmarks = vm.allBookmarks.filter(function (k) { return k.userName == null });\n vm.hasSentimentModule = vm.reportModules.filter(function(r){return r.moduleTypeId ==5 | r.moduleTypeId ==7; }).length>0;\n vm.temporalCategoryChartFlexValue = 50;\n\n vm.defaultDate = {\n period:{type:null},\n beforeDatePeriod:{type:null,startDate:null,endDate:null},\n afterDatePeriod:{type:null,startDate:null,endDate:null}\n };\n\n if(!vm.hasSentimentModule){\n vm.temporalCategoryChartFlexValue = 100;\n }\n vm.user = user;\n //vm.breadCrumbs = [vm.dashboardClassificationModule.name];\n vm.breadCrumbs = [];\n vm.dashboardModuleId = $stateParams.dashboardModuleId;\n user.moduleWorkspace = vm.report.workspaceId;\n $rootScope.selectedWorkspaceId = vm.report.workspaceId;\n vm.reportId = $stateParams.id;\n vm.languageDatePicker = $translate.use() === \"tr\" ? 1 : 2;\n vm.isDatePickerCreatorStarted = false;\n \n vm.targetChartData = null;\n vm.targetChartTimelineData = null;\n vm.targetChartBeforeData = null;\n vm.paramSearchByDate = $stateParams.searchByDate == undefined ? 1 : $stateParams.searchByDate;\n vm.parameters = {\n query: null,\n facetQueries: [],\n date: null,\n startDate: null,\n endDate: null,\n searchByDate: vm.paramSearchByDate,\n sort: null,\n gap: null,\n row: 10,\n start: 0,\n filter: [],\n category: [],\n facet: [],\n feedback: null,\n assignment: null,\n highlight: false,\n defaultFacet: true,\n patternFilter: [],\n showSimilar: false\n };\n vm.data = {\n facets: []\n };\n vm.beforeData = {\n facets: []\n };\n vm.filterChips = ReportService.getFilterChips(vm.reportId, vm.reportSettings.commonSettings.filterChips);\n vm.patternFilters = ReportService.getPatternFilters(vm.reportId);\n vm.bubbleChartData = {\n items: []\n };\n vm.currentQuarter = -1;\n vm.afterDatePicker = {\n startDate: null,\n endDate: null\n };\n\n vm.beforeDatePicker = {\n startDate: null,\n endDate: null\n };\n\n vm.keywords = [];\n vm.deletedKeywords = [];\n vm.keywordDocumentLimit = 100;\n //vm.charts.bubble.data = [];\n vm.activeDashboardTemplates = vm.report.activeTemplates;\n vm.activeTemplateSize = 0;\n Object.keys(vm.activeDashboardTemplates).forEach(function (key) {\n if (vm.activeDashboardTemplates[key]) vm.activeTemplateSize = vm.activeTemplateSize + 1;\n })\n vm.dashboardFilterItem1 = null;\n vm.dashboardFilterItem2 = null;\n vm.dashboardFilterItem3 = null;\n vm.dashboardFacets1 = [];\n vm.dashboardFacets2 = [];\n vm.dashboardFacets3 = [];\n vm.filter1SelectedItem = {};\n vm.searchFilter1Text = null;\n vm.filter2SelectedItem = null;\n vm.searchFilter2Text = null;\n vm.filter3SelectedItem = null;\n vm.searchFilter3Text = null;\n vm.isOrderActive = false;\n vm.matrixXfield = null;\n vm.matrixYfield = null;\n vm.matrixDataRefresh = false;\n vm.multiplierValue = vm.reportSettings.dashboardSettings.comparisonReportModel ? vm.reportSettings.dashboardSettings.comparisonReportModel.multiplierValue : 1;\n vm.multiplierValue = vm.multiplierValue ? vm.multiplierValue : 1;\n vm.multiplierCoefficient = vm.multiplierValue == 1 ? 1 : (vm.multiplierValue / 100);\n vm.matrixFields = {\n data: [],\n fetching: false\n }\n vm.removeMatrixXValue = removeMatrixXValue;\n vm.removeMatrixYValue = removeMatrixYValue;\n vm.searchMatrixData = searchMatrixData;\n\n vm.groupCtrlCount = 2000; //Math.floor(Math.random() * 10000) + 1;\n vm.orBundle = [];\n \n vm.dateFormat = dateFormat;\n vm.sidenavQuery = null;\n vm.sidenavQueryFunc = sidenavQueryFunc;\n vm.openSaveDefaultReportFiltersDialog = openSaveDefaultReportFiltersDialog;\n vm.addStopWordProcessing = false;\n vm.addStopLabelProcessing = false;\n vm.stopWords = [];\n vm.stopLabels = [];\n vm.saveReportSettingsProcessing = false;\n vm.showLogs = false;\n\n vm.search = search;\n vm.toggleFacetFilter = toggleFacetFilter;\n vm.removeFacetFilter = removeFacetFilter;\n vm.resetFilters = resetFilters;\n vm.exportReport = exportReport;\n vm.removeDocuments = removeDocuments;\n vm.reevaluateReport = reevaluateReport;\n vm.deleteReport = deleteReport;\n vm.filterValueSearch = filterValueSearch;\n vm.clickBreadCrumb = clickBreadCrumb;\n vm.clickBubbleChartItem = clickBubbleChartItem;\n vm.changeDashboard = changeDashboard;\n vm.setPatternFilter = setPatternFilter;\n vm.removePatternFilter = removePatternFilter;\n vm.addStopLabelGroup = addStopLabelGroup;\n vm.addSingleStopLabel = addSingleStopLabel;\n vm.addStopLabels = addStopLabels;\n vm.addStopWord = addStopWord;\n vm.removeStopLabels = removeStopLabels;\n vm.removeStopWords = removeStopWords;\n vm.stopLabelsToAdd = [];\n vm.stopLabelsToRemove = [];\n vm.stopWordsToRemove = [];\n\n //methods bookmarks\n vm.saveBookmark = saveBookmark;\n vm.deleteBookmark = deleteBookmark;\n vm.goToBookmark = goToBookmark;\n vm.uploadReportFeedback = uploadReportFeedback;\n\n //methods date\n vm.changeDate = changeDate;\n vm.clearDate = clearDate;\n\n //category data compare variables\n vm.selectedVisibleCategory = null;\n vm.visibleCategories = [];\n vm.selectedNonVisibleCategory = null;\n vm.nonVisibleCategories = [];\n vm.saveCategoryDataCompareSettingsProcessing = false;\n vm.categoryDataCompareThreshold = 0;\n\n //category data compare setting functions\n vm.addVisibleCategory = addVisibleCategory;\n vm.deleteVisibleCategory = deleteVisibleCategory;\n vm.addNonVisibleCategory = addNonVisibleCategory;\n vm.deleteNonVisibleCategory = deleteNonVisibleCategory;\n vm.saveCategoryDataCompareSettings = saveCategoryDataCompareSettings;\n vm.getCategoryDataCompareSettings = getCategoryDataCompareSettings;\n vm.addToNonVisibleCategory = addToNonVisibleCategory;\n\n function addToNonVisibleCategory(ev, category) {\n var promises = [ReportService.addNonVisibleChangeCategory($scope, $state, ev, category)];\n $q.all(promises).then(function (results) {\n if (results[0]) {\n vm.selectedNonVisibleCategory = category;\n vm.selectedNonVisibleCategory.id = category.categoryId;\n addNonVisibleCategory();\n saveCategoryDataCompareSettings();\n }\n }, function (error) {\n $log.error(error);\n\n })\n }\n\n function addVisibleCategory() {\n vm.visibleCategories = vm.visibleCategories.filter(function (k) { return k.id != vm.selectedVisibleCategory.id });\n vm.visibleCategories.push(vm.selectedVisibleCategory);\n }\n\n function deleteVisibleCategory(category) {\n vm.visibleCategories = vm.visibleCategories.filter(function (k) { return k.id != category.id });\n }\n\n function addNonVisibleCategory() {\n vm.nonVisibleCategories = vm.nonVisibleCategories.filter(function (k) { return k.id != vm.selectedNonVisibleCategory.id });\n vm.nonVisibleCategories.push(vm.selectedNonVisibleCategory);\n }\n\n function deleteNonVisibleCategory(category) {\n vm.nonVisibleCategories = vm.nonVisibleCategories.filter(function (k) { return k.id != category.id });\n }\n\n function saveCategoryDataCompareSettings() {\n vm.saveCategoryDataCompareSettingsProcessing = true;\n\n var categoryDataCompareSetting = {\n threshold: vm.categoryDataCompareThreshold,\n visibleCategoryIds: vm.visibleCategories.map(function (k) { return k.id }),\n nonVisibleCategoryIds: vm.nonVisibleCategories.map(function (k) { return k.id })\n }\n\n api.settings.saveCategoryDataCompareSettings(categoryDataCompareSetting, vm.reportId)\n .then(function (response) {\n vm.categoryDataCompareResponse = categoryDataCompareSetting;\n vm.saveCategoryDataCompareSettingsProcessing = false;\n setCategorySentimentVarianceData(vm.beforeResponse, vm.afterResponse);\n },\n function (response) {\n $log.error(response);\n });\n }\n\n function getCategoryDataCompareSettings() {\n api.settings.getCategoryDataCompareSettings(vm.reportId)\n .then(function (response) {\n vm.categoryDataCompareResponse = response;\n vm.categoryDataCompareThreshold = response.threshold;\n vm.visibleCategories = vm.categories.filter(function (k) { return response.visibleCategoryIds.includes(k.id) })\n vm.nonVisibleCategories = vm.categories.filter(function (k) { return response.nonVisibleCategoryIds.includes(k.id) })\n },\n function (response) {\n $log.error(response);\n });\n }\n\n vm.flipCategoryDataCompareChart = function (to) {\n if (to == 'toBack') {\n $('#category-data-compare').css({ \"min-height\": \"600px\" });\n } else if (to == 'toFront') {\n $('#category-data-compare').css({ \"min-height\": \"\" });\n }\n }\n\n //methods facet\n //vm.filterSidenavFacet = filterSidenavFacet;\n \n vm.ctrlKeyPressing = false;\n vm.bookmarkSidenav = buildToggler('right');\n vm.filterSidenav = buildToggler('main-sidenav');\n vm.rightBottomSettingsButton = {\n isOpen: false,\n selectedMode: 'md-scale'\n };\n vm.moreAndMoreCount = 1;\n\n vm.changeCategorySentimentVarianceVisibility = function(option){//to avoid empty chart (make at least one option visible)\n var visibility = vm.charts.categorySentimentVariance.visibility;\n if(option == 'positive'){\n if(visibility.positive && !visibility.negative){\n visibility.negative = true;\n }\n visibility.positive = !visibility.positive;\n }else if(option == 'negative'){\n if(visibility.negative && !visibility.positive){\n visibility.positive = true;\n }\n visibility.negative = !visibility.negative;\n }\n vm.charts.categorySentimentVariance.visibility = visibility;\n }\n\n vm.changeCategorySentimentVarianceUseRatio = function(){\n if(vm.charts.categorySentimentVariance.data.useRatio === undefined){\n vm.charts.categorySentimentVariance.data.useRatio = true;\n }else{\n vm.charts.categorySentimentVariance.data.useRatio = !vm.charts.categorySentimentVariance.data.useRatio;\n }\n $settings.saveUserSettings(\"temporalSentimentUseRatio\", vm.charts.categorySentimentVariance.data.useRatio, vm.report.id);\n\n calculateCategoryDataCompareWidths();\n }\n\n function changeDashboard(oldDashboard){\n if(vm.selectedDashboardTemplate != oldDashboard){\n $state.current.params[\"selectedDashboard\"] = vm.selectedDashboardTemplate;\n //addTemplateReportCookie('template',vm.selectedDashboardTemplate);\n $settings.saveUserSettings(\"template\", vm.selectedDashboardTemplate, vm.report.id);\n $state.go($state.current, {selectedDashboard:vm.selectedDashboardTemplate}, {reload: true})\n }\n }\n\n function initializeDashboardParameters() {\n vm.dataset = [];\n vm.subdatasets = [];\n vm.rootsentiment = [];\n vm.rootfacet = {};\n vm.dashboardFacets = [];\n vm.keywords = [];\n vm.searching = true;\n ///\n vm.isFacetLevel0 = true;\n vm.facetBefore = {\n 'list': [],\n 'count': 0\n };\n vm.facetAfter = {\n 'list': [],\n 'count': 0\n };\n ///\n vm.positiveBeforePercent = 0;\n vm.positiveAfterPercent = 0;\n vm.negativeBeforePercent = 0;\n vm.negativeAfterPercent = 0;\n vm.totalAfterCount = 0;\n vm.totalBeforeCount = 0;\n vm.sentimentVariance = {\n totalVarianceCount: 0,\n totalVarianceList: [],\n positiveVarianceCount: 0,\n positiveVarianceList: [],\n negativeVarianceCount: 0,\n negativeVarianceList: []\n };\n vm.datasetCount = 0;\n }\n\n function uploadReportFeedback($event) {\n ReportService.uploadFeedbackPrompt($scope, $event, vm.report.id);\n }\n\n function addFilterChip(item) {\n var filterChip = {\n key: item.fieldName,\n value: item.value,\n type: 300,\n group: -1,\n operand: \"AND\",\n titleKey: item.fieldName\n }\n vm.filterChips.push(filterChip);\n }\n\n vm.language = $translate.use();\n setInterval(function () { vm.language = $translate.use(); }, 100);\n\n $scope.$watch('vm.language', function () {\n vm.documentNickname = $translate.use() == \"tr\" ? vm.reportSettings.commonSettings.documentNicknameTr : vm.reportSettings.commonSettings.documentNicknameEn;\n if ($$report.hasTrainedModule) {\n setChartCategoryAliases();\n setQueryParameters();\n if ($translate.use() === \"tr\") {\n vm.languageDatePicker = 1;\n initializeDateRangesAndSearch();\n } else if ($translate.use() === \"en\") {\n vm.languageDatePicker = 2;\n initializeDateRangesAndSearch();\n }\n setSentimentTimelineChart(getRangeResponseByTrendDate(vm.catTrendDate));\n setMultiBarChart(vm.charts.multiBar.apiResponse);\n }\n /*api.report.checkTrain(vm.reportId)\n .then(function (response) {\n if (response.valid) {\n setQueryParameters();\n if ($translate.use() === \"tr\") {\n vm.languageDatePicker = 1;\n initializeDateRangesAndSearch();\n } else if ($translate.use() === \"en\") {\n vm.languageDatePicker = 2;\n initializeDateRangesAndSearch();\n }\n setSentimentTimelineChart(vm.charts.sentimentTimeline.apiResponse);\n setMultiBarChart(vm.charts.multiBar.apiResponse);\n }\n }, function (err) {\n console.log(err);\n });*/\n });\n\n $scope.$watch('vm.dashboardFilterItem1', function (newValue) {\n if (vm.dashboardFacets1 && vm.dashboardFacets1.facetList && newValue) {\n //vm.dashboardFacets1.children = vm.dashboardFacets1.children.filter(function (c) { return c.name !== newValue.name; });\n vm.dashboardFilterItem1 = null;\n toggleFacetFilter(newValue,vm.dashboardFacets1);\n vm.searchFilter1Text = null;\n }\n });\n $scope.$watch('vm.dashboardFilterItem3', function (newValue) {\n if (vm.dashboardFacets3 && vm.dashboardFacets3.facetList && newValue) {\n //vm.dashboardFacets3.children = vm.dashboardFacets3.children.filter(function (c) { return c.name !== newValue.name; });\n vm.dashboardFilterItem3 = null;\n toggleFacetFilter(newValue,vm.dashboardFacets3);\n vm.searchFilter3Text = null;\n }\n });\n $scope.$watch('vm.dashboardFilterItem2', function (newValue) {\n if (vm.dashboardFacets2 && vm.dashboardFacets2.facetList && newValue) {\n //vm.dashboardFacets2.children = vm.dashboardFacets2.children.filter(function (c) { return c.name !== newValue.name; });\n vm.dashboardFilterItem2 = null;\n toggleFacetFilter(newValue,vm.dashboardFacets2);\n //addFilterChip(newValue);\n //vm.dashboardFacets2.facetList = vm.dashboardFacets2.facetList.filter(function(child){ return child != newValue;}) \n vm.searchFilter2Text = null;\n }\n });\n\n $scope.$on(\"$destroy\", function () {\n //setTimeout(function () { }, 2000);\n d3.selectAll('.nvtooltip').style('opacity', 0);\n });\n\n function filterValueSearch(query, data) {\n var results = query ? data.filter(createFilterFor(query)) : data;\n return results;\n }\n\n /**\n * Create filter function for a query string\n */\n function createFilterFor(query) {\n var lowercaseQuery = angular.lowercase(query);\n return function filterFn(item) {\n return (angular.lowercase(item.name).indexOf(lowercaseQuery) === 0);\n };\n }\n\n function setChartCategoryAliases() {\n var categoryAliases = [];\n vm.categories.forEach(function (k) {\n var localVariable = k.localVariables.filter(function (m) { return m.language == $translate.use(); })[0];\n if (localVariable) {\n categoryAliases.push({\n aliasName: localVariable.value,\n categoryId: k.id,\n categoryName: k.name\n })\n }\n })\n vm.categoryAlieses = categoryAliases;\n }\n\n vm.getFilteredFacetTitle = function (title) {\n if (!vm.afterResponse) return title;\n var reportField = vm.reportFields.filter(function (a) {\n return a.fieldTitle == title;\n })[0]\n if (reportField) {\n var alias = vm.afterResponse.localVariables.filter(function (k) {\n return k.fieldName == reportField.fieldName;\n })\n if (alias[0] != null && alias[0].alias != null) {\n if ($translate.use() == \"tr\" && alias[0].alias.tr != null) return alias[0].alias.tr;\n else if ($translate.use() == \"en\" && alias[0].alias.en != null) return alias[0].alias.en;\n else return title;\n }\n }\n return title;\n }\n\n vm.getFacetValueAlias = function (title, value) {\n if (String(value).startsWith(\"id:\\\"\")) {\n var values = value.split(\"_\");\n if (values[1] != null) {\n return \"id:\\\"\" + values[1];\n }\n }\n if (vm.dataCopy == null) return value;\n var reportField = vm.reportFields.filter(function (a) {\n return a.fieldTitle == title;\n })[0]\n if (reportField) {\n var localVariable = vm.dataCopy.localVariables.filter(function (k) {\n return k.fieldName == reportField.fieldName;\n })\n\n if (localVariable[0] != null && localVariable[0].valueAliases != null) {\n var valueLocalVariable = localVariable[0].valueAliases.filter(function (k) { return k.itemValue == value.toString(); })\n\n if (valueLocalVariable[0] != null) {\n if ($translate.use() == \"tr\" && valueLocalVariable[0].tr != null) return valueLocalVariable[0].tr;\n else if ($translate.use() == \"en\" && valueLocalVariable[0].en != null) return valueLocalVariable[0].en;\n else return value;\n }\n }\n }\n return value;\n }\n\n vm.getCategoryAlias = function (child) {\n var cat = child.category;\n if (!cat) return child.value;\n var title = cat.name;\n if (cat.localVariables) {\n var localVariable = cat.localVariables.filter(function (k) { return $translate.use() == k.language; })[0];\n if (localVariable) title = localVariable.value;\n }\n return title;\n }\n\n vm.getCategoryChipAlias = function (chip) {\n var title = chip.value;\n var category = getChipCat(chip);\n if (category && category.localVariables) {\n var localVariable = category.localVariables.filter(function (k) { return $translate.use() == k.language; })[0];\n if (localVariable) title = localVariable.value;\n }\n return title;\n }\n\n function getChipCat(chip) {\n var category;\n var categories = vm.categories.filter(function (k) { return k.name == chip.value; });\n if (chip.parentString) {\n category = categories.filter(function (k) { return k.parentModuleCategory != null && k.parentModuleCategory.name == chip.titleKey; })[0];\n } else {\n category = categories.filter(function (k) { return k.parentModuleCategory == null })[0]\n }\n return category;\n }\n \n function sidenavQueryFunc() {\n if (vm.sidenavQuery == \"\") {\n vm.data = JSON.parse(JSON.stringify(vm.dataCopy));\n vm.parameters.facetSearch = null;\n } else {\n vm.parameters.facetSearch = vm.sidenavQuery;\n vm.sidenavQueryFuncLoading = true;\n api.report.search(vm.report.id, vm.parameters)\n .then(function (response) {\n vm.data.facets = response.facets;\n vm.sidenavQueryFuncLoading = false;\n vm.data.facetSize = 10;\n vm.data.facets.forEach(function (f) {\n f[\"size\"] = 10;\n f[\"showMoreAndMore\"] = f.facetList && f.facetList.length >= 10 ? true : false;\n f[\"allFacets\"] = f.facetList && f.facetList.length > 10 ? true : false;\n });\n\n }, function (err) {\n $log.error(err);\n })\n }\n }\n\n function openSaveDefaultReportFiltersDialog($event){\n ReportService.showSaveReportFiltersDialog($scope, $event, vm.filterChips, vm.report.id);\n }\n\n vm.printPage = function() {\n window.print();\n }\n\n vm.downloadChart = function (id, element, name) {\n if (document.getElementById(id).children[element].tagName != \"svg\") return;\n saveSvgAsPng(document.getElementById(id).children[element], name);\n $utils.saveAudit(vm.reportId, \"REPORT\", \"DOWNLOAD_CHART_IMAGE\", vm.report.name + ' / ' + name);\n $utils.googleAnalyticsSetAction(\"Report\", \"Download Chart Image\", vm.report.name + ' / ' + name);\n }\n\n vm.downloadD3Chart = function (chartCode) {\n window.charts[chartCode].exporting.filePrefix = chartCode;\n window.charts[chartCode].exporting.export(\"png\");\n $utils.saveAudit(vm.reportId, \"REPORT\", \"DOWNLOAD_CHART_IMAGE\", null);\n }\n\n vm.downloadAmchart = function (id, element, elementt, name) {\n if (!document.getElementById(id) || (document.getElementById(id) && !document.getElementById(id).children[element])) return;\n if (document.getElementById(id).children[element].children[elementt].tagName != \"svg\") return;\n document.getElementById(id).children[element].children[elementt].style.fontSize = \"13px\";\n document.getElementById(id).children[element].children[elementt].style.fontFamily = \"'Roboto', 'Helvetica Neue', 'Arial', sans-serif\";\n saveSvgAsPng(document.getElementById(id).children[element].children[elementt], name);\n $utils.saveAudit(vm.reportId, \"REPORT\", \"DOWNLOAD_CHART_IMAGE\", vm.report.name + ' / ' + name);\n $utils.googleAnalyticsSetAction(\"Report\", \"Download Chart Image\", vm.report.name + ' / ' + name);\n }\n\n vm.filteredFacets = {};\n\n function setFilteredFacets() {\n vm.filteredFacets = {};\n for (var i = 0; i < vm.filterChips.length; i++) {\n if (vm.filteredFacets[vm.filterChips[i].titleKey] != null) {\n vm.filteredFacets[vm.filterChips[i].titleKey].push(vm.filterChips[i]);\n } else {\n var childs = [];\n childs.push(vm.filterChips[i]);\n vm.filteredFacets[vm.filterChips[i].titleKey] = childs;\n }\n }\n }\n\n function setMainDashboardFilters() {\n refreshChildrenOfReportFields();\n var foundedDashboardFacet1 = vm.reportFields.filter(function (r) {\n return r.dashboardFieldOrder == 1;\n })[0];\n if(foundedDashboardFacet1){\n var foundedFacet1 = vm.data.facets.filter(function (f) {\n return f.title === foundedDashboardFacet1.fieldTitle;\n })[0];\n if (foundedFacet1) {\n vm.dashboardFacets1 = foundedFacet1;\n }\n }\n var foundedDashboardFacet2 = vm.reportFields.filter(function (r) {\n return r.dashboardFieldOrder == 2;\n })[0];\n if(foundedDashboardFacet2){\n var foundedFacet2 = vm.data.facets.filter(function (f) {\n return f.title === foundedDashboardFacet2.fieldTitle;\n })[0];\n if (foundedFacet2) {\n vm.dashboardFacets2 = foundedFacet2;\n }\n }\n var foundedDashboardFacet3 = vm.reportFields.filter(function (r) {\n return r.dashboardFieldOrder == 3;\n })[0];\n if(foundedDashboardFacet3){\n var foundedFacet3 = vm.data.facets.filter(function (f) {\n return f.title === foundedDashboardFacet3.fieldTitle;\n })[0];\n if (foundedFacet3) {\n vm.dashboardFacets3 = foundedFacet3;\n }\n }\n }\n\n function toggleFacetFilter(child, item, $event) {\n if (!vm.sideNavEnabled) return;\n /*\n if (JSON.stringify(vm.filterChips).length + JSON.stringify(ReportQueryParserService.setNormalFacetFilters(vm.filterChips)).length > 1700) {\n toastService.serverError($translate.instant('REPORT.ERRORS.FILTER_LIMIT'))\n return;\n }*/\n if (ReportService.isThisFieldType(300, item.type) || item.type == 700 || item.type == 800 || item.type == 200) {\n if (!vm.ctrlKeyPressing) {\n //var keyValue = generateKeyValuePairFilter(child.fieldName, child.value);\n var filterChip = {\n key: item.title,\n value: child.value,\n type: item.type,\n group: -1,\n operand: \"AND\",\n titleKey: item.title\n }\n vm.filterChips.push(filterChip);\n var foundedFilters = vm.filterChips.filter(function(chip){\n return chip.key == item.title;\n });\n if(foundedFilters && foundedFilters.length > 1){\n //var group = Math.floor(Math.random() * 10000) + 1;\n vm.groupCtrlCount = vm.groupCtrlCount + 1;\n foundedFilters.forEach(function(chip){\n chip.group = vm.groupCtrlCount; //group;\n chip.operand = \"OR\";\n });\n }\n //search();\n\n // searchDateRanges();\n }\n if (vm.ctrlKeyPressing) {\n var filterCtrlChip = {\n key: item.title,\n value: child.value,\n type: item.type,\n group: vm.groupCtrlCount,\n operand: \"OR\",\n titleKey: item.title\n }\n vm.filterChips.push(filterCtrlChip);\n }\n item.facetList = item.facetList.filter(function(c){ return c !== child;});\n }\n\n if (item.type >= 100 && item.type < 200) {\n if (!vm.ctrlKeyPressing) {\n vm.sideNavEnabled = false;\n var level = null;\n if (item.key === vm.dashboardModuleId) {\n level = findChartLevel();\n }\n if(child.parentString){\n var foundedSameLevelFilter = vm.filterChips.filter(function(chip) {return chip.key == item.key && chip.parentString && chip.parentString.split(\"->\").length == child.parentString.split(\"->\").length;})[0];\n if(foundedSameLevelFilter)\n level = level - 1;\n }else{\n var foundedSameLevelFilter = vm.filterChips.filter(function(chip) {return chip.key == item.key && typeof chip.parentString === 'undefined' && typeof child.parentString === 'undefined';})[0];\n if(foundedSameLevelFilter)\n level = level - 1;\n }\n var catFilterChip = {\n key: item.key,\n value: child.value,\n type: 100,\n group: -1,\n operand: \"AND\",\n parentString: child.parentString,\n titleKey: item.title,\n level: level,\n aspectSentiment: child.sentimentFilter ? child.sentimentFilter : \"\" \n }\n vm.filterChips.push(catFilterChip);\n search();\n } else {\n var catCtrlFilterChip = {\n key: item.key,\n value: child.value,\n type: 100,\n group: vm.groupCtrlCount,\n operand: \"OR\",\n parentString: child.parentString,\n titleKey: item.title\n }\n vm.filterChips.push(catCtrlFilterChip);\n }\n item.facetList = item.facetList.filter(function(c){ return c !== child;});\n }\n setFilteredFacets();\n }\n\n function findChartLevel() {\n if (!vm.filterChips || vm.filterChips.length == 0) return 1;\n var foundedChips = vm.filterChips.filter(function (c) {\n return c.level >= 0;\n });\n if (foundedChips && foundedChips.length > 0) {\n foundedChips.sort(function (c1, c2) {\n return c1.level - c2.level;\n });\n return foundedChips[foundedChips.length - 1].level + 1;\n }\n return 1;\n }\n\n vm.saveReportSettings = function () {\n vm.saveReportSettingsProcessing = true;\n api.settings.saveReportSettings(vm.reportSettings, vm.reportId)\n .then(function (response) {\n vm.saveReportSettingsProcessing = false;\n toastService.serverError($translate.instant('REPORT.SETTINGS.SAVE_COMPLETED'));\n vm.multiplierValue = vm.reportSettings.dashboardSettings.comparisonReportModel.multiplierValue;\n vm.multiplierValue = vm.multiplierValue ? vm.multiplierValue : 1;\n vm.multiplierCoefficient = vm.multiplierValue == 1 ? 1 : (vm.multiplierValue / 100);\n setCategorySentimentVarianceData(vm.beforeResponse, vm.afterResponse);\n },\n function (response) {\n $log.error(response);\n });\n }\n\n vm.searchWhenPeriodSelection = function () {\n vm.isDatePickerCreatorStarted = false;\n setQueryParameters();\n var datePeriods = vm.selectedPeriod.split(\" / \");\n var afterYear = parseInt(datePeriods[1].substring(3, 7));\n var afterQuarter = parseInt(datePeriods[1].substring(1, 2));\n var ranges = vm.dateRanges['Q' + afterQuarter + ' (' + afterYear + ')'];\n vm.afterDatePicker.startDate = ranges[0].toDate();\n vm.afterDatePicker.endDate = ranges[1].toDate();\n vm.parameters.startDate = vm.afterDatePicker.startDate.toISOString().split('.')[0] + \"Z\";\n vm.parameters.endDate = vm.afterDatePicker.endDate.toISOString().split('.')[0] + \"Z\";\n var beforeYear = parseInt(datePeriods[0].substring(3, 7));\n var beforeQuarter = parseInt(datePeriods[0].substring(1, 2));\n ranges = vm.dateRanges['Q' + beforeQuarter + ' (' + beforeYear + ')'];\n vm.beforeDatePicker.startDate = ranges[0].toDate();\n vm.beforeDatePicker.endDate = ranges[1].toDate();\n createDatePicker();\n search();\n }\n\n function removeFacetFilter(item) {\n vm.filterChips = vm.filterChips.filter(function (f) {\n return f != item;\n });\n\n if(item.type == 600){\n vm.parameters.query = null;\n }\n if (item.level && item.level > 0) {\n var removingFilters = vm.filterChips.filter(function (f) {\n return f.level > item.level;\n });\n if (removingFilters && removingFilters.length > 0) {\n removingFilters.forEach(function (r) {\n vm.filterChips = vm.filterChips.filter(function (f) {\n return f != r;\n });\n })\n }\n }\n if (vm.filterChips.length == 0) {\n vm.targetChartBeforeData = null;\n vm.targetChartData = null;\n }\n search();\n\n }\n\n function clickBreadCrumb(breadCrumb) {\n var removingFilters = vm.filterChips.filter(function (f) {\n return f.level > breadCrumb.level;\n });\n if (removingFilters && removingFilters.length > 0) {\n removingFilters.forEach(function (f) {\n vm.filterChips = vm.filterChips.filter(function (filter) {\n return filter != f;\n });\n })\n }\n search();\n\n //searchDateRanges();\n }\n\n function clickBubbleChartItem(item,lastBreadCrumb,targetChartData) {\n if(targetChartData && targetChartData.facetList){\n var lastBreadCrumb = targetChartData.facetList.find(function(x){ return x.value == lastBreadCrumb.value;}); \n if(lastBreadCrumb && (!lastBreadCrumb.subs || lastBreadCrumb.subs.length==0)){\n return;\n } \n }\n if (!item || !item.facet) return;\n var level = findChartLevel();\n var parentCat = vm.breadCrumbs[vm.breadCrumbs.length - 1];\n if (!parentCat || parentCat.value == item.category || (item.facet && item.facet.parentString && item.facet.parentString === parentCat.parentString)) return;\n var pString = null;\n if (parentCat.level == -1) {\n pString = null;\n } else if (parentCat.parentString) {\n pString = parentCat.parentString + '->' + parentCat.value;\n } else {\n pString = parentCat.value;\n }\n var catFilterChip = {\n key: vm.dashboardModuleId,\n value: item.facet.value,\n type: 100,\n group: -1,\n operand: \"AND\",\n parentString: pString,\n titleKey: parentCat.value,\n level: level\n }\n vm.filterChips.push(catFilterChip);\n search();\n\n //searchDateRanges();\n }\n\n function resetFilters() {\n vm.filteredFacets = {};\n vm.patternFilters = {};\n vm.filterChips = [];\n vm.parameters.query = null;\n vm.targetChartBeforeData = null;\n vm.targetChartData = null;\n search();\n\n // searchDateRanges();\n }\n\n function setPatternFilter(key, name) {\n if (vm.patternFilters[key] == '')\n delete vm.patternFilters[key];\n else {\n vm.patternFilters.chips = vm.patternFilters.chips || [];\n var chip = vm.patternFilters.chips.filter(function (item) { return item.key === key; })[0];\n if (chip)\n chip.value = vm.patternFilters[key];\n else\n vm.patternFilters.chips.push({ key: key, name: name, value: vm.patternFilters[key] });\n }\n }\n\n function removePatternFilter(key, name) {\n if (vm.patternFilters[key])\n delete vm.patternFilters[key];\n vm.patternFilters.chips = vm.patternFilters.chips.filter(function (item) {\n return item.key !== key;\n });\n if (vm.patternFilters.postKeys.indexOf(key) != -1)\n search();\n }\n\n function changeDate() {\n vm.parameters.startDate = vm.afterDatePicker.startDate.toISOString().split('.')[0] + \"Z\";\n vm.parameters.endDate = vm.afterDatePicker.endDate.toISOString().split('.')[0] + \"Z\";\n if (vm.parameters.startDate === vm.parameters.endDate) {\n vm.parameters.endDate = moment(vm.parameters.endDate).add(1, 'days').toDate().toISOString().split('.')[0] + \"Z\"\n }\n //$settings.saveUserSettings(\"afterDate\", { 'startDate': vm.parameters.startDate, 'endDate': vm.parameters.endDate }, vm.report.id);\n refreshDatePickersFormat();\n // searchDateRanges();\n }\n\n function clearDate() {\n vm.parameters.startDate = null;\n vm.parameters.endDate = null;\n vm.datePicker = {};\n $settings.saveUserSettings(\"afterDate\", { 'startDate': vm.parameters.startDate, 'endDate': vm.parameters.endDate }, vm.report.id);\n search();\n // searchDateRanges();\n }\n\n function searchMatrixData() {\n vm.matrixFields.data = [];\n vm.matrixFields.fetching = true;\n findMatrixFields();\n if (!vm.matrixXfield || !vm.matrixXfield.fieldTitle || !vm.matrixYfield || !vm.matrixYfield.fieldTitle) return;\n var copyParameters = JSON.parse(JSON.stringify(vm.parameters));\n var facet = \"\\\"\" + vm.matrixXfield.fieldTitle + \"\\\"|\\\"\" + vm.matrixYfield.fieldTitle + \"\\\"\";\n //var facetKey = vm.matrixXfield.fieldName + \",\" + vm.matrixYfield.fieldName;\n copyParameters.facet = [{ name: facet }];\n vm.parameters.row = 0;\n vm.parameters.start = 0;\n if (vm.filterChips && vm.filterChips.length > 0) {\n vm.parameters.filterChips = vm.filterChips;\n } else {\n vm.parameters.filterChips = [];\n }\n //var copyParamrters = JSON.parse(JSON.stringify(obj));\n copyParameters.defaultFacet = null;\n copyParameters.facetSearch = null;\n copyParameters.gap = null;\n api.report.search(vm.report.id, copyParameters)\n .then(function (response) {\n vm.matrixFields.data = ReportTemplate1_2ChartParserService.parseMatrixChart(response, facet, vm.selectedXMatrixs, vm.selectedYMatrixs);\n vm.matrixFields.fetching = false;\n if (vm.matrixFields.data != null) {\n vm.matrixFields.data.sort(\n function (a, b) {\n if (a.x === b.x) {\n return a.y > b.y ? 1 : -1;;\n }\n return a.x > b.x ? 1 : -1;\n });\n }\n }, function (error) {\n $log.error(error);\n })\n }\n\n function refreshChildrenOfReportFields(){\n vm.reportFields.filter(function (r) {\n return ReportService.isThisFieldType(300, r.fieldType);\n }).forEach(function (field) {\n var foundedFacets = vm.data.facets.filter(function (f) {\n return f.title === field.fieldTitle;\n })[0];\n if (foundedFacets) {\n field[\"children\"] = foundedFacets.facetList;\n }\n })\n }\n\n function findMatrixFields() {\n if (!isNullArray(vm.matrixXYFields)) return;\n vm.matrixXYFields = vm.reportFields.filter(function (r) {\n return ReportService.isThisFieldType(300, r.fieldType);\n });\n vm.matrixXYFields.forEach(function (field) {\n var foundedFacets = vm.data.facets.filter(function (f) {\n return f.title === field.fieldTitle;\n });\n if (foundedFacets && foundedFacets.length > 0) {\n foundedFacets = foundedFacets[0];\n field[\"children\"] = foundedFacets.facetList;\n }\n })\n\n if (vm.matrixXYFields.filter(function (r) {\n return r.horizontalComparisonField;\n }).length > 0) {\n vm.matrixXfield = vm.matrixXYFields.filter(function (r) {\n return r.horizontalComparisonField;\n })[0];\n }\n if (vm.userSettings && vm.userSettings.matrixXfield){\n var fieldName = vm.userSettings.matrixXfield;\n vm.matrixXfield = vm.matrixXYFields.filter(function (r) {\n return r.fieldName == fieldName;\n })[0];\n if (vm.userSettings != null && vm.userSettings.selectedXMatrixs != null) {\n vm.selectedXMatrixs = vm.userSettings.selectedXMatrixs;\n }\n }\n if (vm.matrixXYFields.filter(function (r) {\n return r.verticalComparisonField;\n }).length > 0) {\n vm.matrixYfield = vm.matrixXYFields.filter(function (r) {\n return r.verticalComparisonField;\n })[0];\n }\n if (vm.userSettings && vm.userSettings.matrixYfield){\n var fieldName = vm.userSettings.matrixYfield;\n vm.matrixYfield = vm.matrixXYFields.filter(function (r) {\n return r.fieldName == fieldName;\n })[0];\n if (vm.userSettings != null && vm.userSettings.selectedYMatrixs != null) {\n vm.selectedYMatrixs = vm.userSettings.selectedYMatrixs;\n }\n }\n var i = 0;\n if ((!vm.matrixXfield || vm.matrixXfield == null) && vm.matrixXYFields.length > i) {\n vm.matrixXfield = vm.matrixXYFields[i++];\n }\n if ((!vm.matrixYfield || vm.matrixYfield == null) && vm.matrixXYFields.length > i) {\n vm.matrixYfield = vm.matrixXYFields[i++];\n }\n }\n\n function removeMatrixXValue(item) {\n vm.selectedXMatrixs = vm.selectedXMatrixs.filter(function (i) {\n return i !== item;\n });\n vm.settings.saveUserSettings('selectedXMatrixs', vm.selectedYMatrixs, vm.report.id);\n }\n\n function removeMatrixYValue(item) {\n vm.selectedYMatrixs = vm.selectedYMatrixs.filter(function (i) {\n return i !== item;\n });\n vm.settings.saveUserSettings('selectedYMatrixs', vm.selectedYMatrixs, vm.report.id);\n }\n\n function showmenu(ev){\n ev.preventDefault(); \n var promises = [ReportService.addStopLabel($scope,$state,ev,ev.target.textContent)];\n $q.all(promises).then(function (results) {\n if(results[0]){\n addStopLabelGroup([ev.target.textContent]);\n }\n }, function (error) {\n $log.error(error);\n\n })\n }\n \n function hidemenu(ev){\n menu.style.top = '-200%';\n menu.style.left = '-200%';\n }\n\n function getIsFlatModeActive() {\n if (vm.activeSources.includes('WEBSOURCE')) {\n api.source.getReportTemplates(vm.report.id,0,1)\n .then(function (response) {\n if (response.content.length > 0) {\n vm.isFlatModeActive = true;\n }\n },\n function (response) {\n $log.error(response);\n });\n }\n }\n\n vm.getAttributeAlias = function (tag) {\n if (tag.alias) {\n if ($translate.use() == \"tr\" && tag.alias.tr) return tag.alias.tr;\n if ($translate.use() == \"en\" && tag.alias.en) return tag.alias.en;\n }\n return vm.getFilteredFacetTitle(tag.title);\n }\n\n function findKeywords() {\n vm.parameters.highlight = false;\n vm.keywords = [];\n api.report.keywords(vm.report.id, vm.parameters)\n .then(function (response) {\n var keywords = response.reportKeywords;\n vm.keywordDocumentLimit = response.keywordDocumentLimit;\n var parameters = JSON.parse(JSON.stringify(vm.parameters));\n keywords.forEach(function (k) {\n parameters.query = \"\\\"\" + k.text + \"\\\"\";\n k.parameters = base64.encode(JSON.stringify(parameters));\n k.reportId = vm.report.id;\n k.rightClickFunc = vm.addStopLabelGroup;\n })\n\n vm.keywords = keywords;\n },\n function (response) {\n $log.error(response);\n });\n }\n\n function setPatternFilters() {\n vm.parameters.patternFilter = [];\n vm.patternFilters.postKeys = [];\n var excludedKeys = ['postKeys', 'chips'];\n for (var key in vm.patternFilters) {\n if (excludedKeys.indexOf(key) == -1 && vm.patternFilters[key] && vm.patternFilters[key] != '') {\n var patternValue = \"\\\"\" + key + \"\\\":\\\"\" + vm.patternFilters[key] + \"\\\"\";\n vm.parameters.patternFilter.push(patternValue);\n vm.patternFilters.postKeys.push(key);\n }\n }\n ReportService.setPatternFilters(vm.reportId, vm.patternFilters);\n }\n\n function searchData() {\n var start = Date.now();\n vm.searching = true;\n if (moment(vm.afterDatePicker.endDate).diff(moment(vm.afterDatePicker.startDate), \"months\", true) <= 2) {\n vm.parameters.gap = \"1DAY\";\n } else {\n vm.parameters.gap = \"1MONTH\";\n }\n if (vm.queueActive)\n vm.parameters.gap = null;\n if (vm.charts) {\n if (vm.charts.sentimentTimeline)\n vm.charts.sentimentTimeline.data = [];\n if (vm.charts.categoryTimeline)\n vm.charts.categoryTimeline.data = [];\n if (vm.charts.multiBar)\n vm.charts.multiBar.data = [];\n }\n \n //if (vm.filterChips && vm.filterChips.length > 0) {\n //vm.parameters.filterChips = vm.filterChips;\n //} else {\n vm.parameters.filterChips = [];\n //}\n vm.filterChips = vm.filterChips.filter(function (item){\n return item.type != 600;\n });\n if(vm.parameters.query && vm.parameters.query.length > 0){\n var filterQueryChip = {\n key: \"content\",\n value: vm.parameters.query,\n type: 600,\n group: -1,\n operand: \"AND\",\n titleKey: \"Query\"\n }\n vm.filterChips.push(filterQueryChip);\n }\n setNormalFacetFilters();\n setCategoryFacetFilters();\n setFacetFieldsQuery();\n setPatternFilters();\n vm.parameters.facet = [];\n vm.parameters.defaultFacet = true;\n vm.parameters.facetSearch = null;\n encodeFilters(vm.parameters);\n if(vm.dashboardClassificationModule){\n setBreadCrumbs();\n }\n vm.parameters.row = 0;\n vm.parameters.start = 0;\n findKeywords();\n vm.parameters.facetQueries = [\"-content_len_i:*\"];\n var beforeQuery = JSON.parse(JSON.stringify(vm.parameters));\n if (!vm.beforeDatePicker || !vm.beforeDatePicker.startDate || !vm.beforeDatePicker.endDate){\n vm.searching = false;\n vm.data.count = vm.report.dataCount;\n return;\n }\n if(!vm.parameters.startDate){\n vm.parameters.startDate = vm.afterDatePicker.startDate.toISOString().split('.')[0] + \"Z\";\n }\n if(!vm.parameters.endDate){\n vm.parameters.endDate = vm.afterDatePicker.endDate.toISOString().split('.')[0] + \"Z\";\n }\n setPeriodParams(vm.parameters, beforeQuery);\n encodeFilters(vm.parameters);\n //addTemplateReportCookie('afterDate', { 'startDate': vm.parameters.startDate, 'endDate': vm.parameters.endDate })\n beforeQuery.startDate = vm.beforeDatePicker.startDate.toISOString().split('.')[0] + \"Z\";\n beforeQuery.endDate = vm.beforeDatePicker.endDate.toISOString().split('.')[0] + \"Z\";\n beforeQuery.defaultFacet = false;\n beforeQuery.onlyModuleFacets = true;\n beforeQuery.gap = null;\n if (vm.charts) {\n if (vm.charts.categorySentimentVariance)\n vm.charts.categorySentimentVariance.data = [];\n }\n setFacetParams(vm.parameters);\n setFacetParams(beforeQuery);\n setFilteredFacets();\n \n if (vm.showLogs) {\n console.log(vm.parameters)\n console.log(beforeQuery)\n }\n \n var searchPromises = [api.report.search(vm.report.id, vm.parameters), api.report.search(vm.report.id, beforeQuery)];\n $q.all(searchPromises).then(function (results) {\n $utils.googleAnalyticsSetTiming(\"Comparation Report Search Response\", vm.reportId, Date.now() - start);\n if (vm.showLogs) console.log(results)\n var afterResponse = results[0];\n var beforeResponse = results[1];\n vm.afterResponse = results[0];\n vm.beforeResponse = results[1];\n vm.data.facets = afterResponse.facets;\n setupFacets();\n groupNerFacets();\n vm.data.documents = afterResponse.reportDocumentList;\n vm.data.count = afterResponse.count;\n vm.data.localVariables = afterResponse.localVariables;\n searchMatrixData();\n setMainDashboardFilters();\n setMultiBarChart(afterResponse);\n setBubbleChart(afterResponse);\n vm.beforeData.facets = beforeResponse.facets;\n setupBeforeFacets();\n setCategorySentimentVarianceData(beforeResponse, afterResponse);\n setNotificationData(beforeResponse, afterResponse);\n vm.searching = false;\n vm.sideNavEnabled = true;\n vm.dataCopy = JSON.parse(JSON.stringify(vm.data));\n eliminateFacetFilteredValues();\n vm.timelineResult = results;\n if (!vm.queueActive && results[0].count > 0) {\n setupTimelineFacets(results[0].facets);\n setSentimentTimelineChart(results[0]);\n setCategoryTimelineChart(results[0], vm.catTrendType);\n }\n if (vm.queueActive && getRangeResponseByTrendDate(vm.catTrendDate) && getRangeResponseByTrendDate(vm.catTrendDate).count > 0) {\n setupTimelineFacets(getRangeResponseByTrendDate(vm.catTrendDate).facets);\n setSentimentTimelineChart(getRangeResponseByTrendDate(vm.catTrendDate), vm.catTrendDate);\n setCategoryTimelineChart(getRangeResponseByTrendDate(vm.catTrendDate), vm.catTrendType, vm.catTrendDate);\n }\n\n measureTimings(start);\n }, function (err) {\n $log.error(err);\n vm.searching=false;\n vm.sideNavEnabled = true;\n })\n }\n\n function setPeriodParams(afterQuery, beforeQuery) {\n if (vm.report.periodSearchActive) {\n var datePeriods = vm.selectedPeriod.split(\" / \");\n afterQuery.periods = datePeriods;\n beforeQuery.periods = datePeriods;\n\n var afterYear = parseInt(datePeriods[1].substring(3, 7));\n var afterQuarter = parseInt(datePeriods[1].substring(1, 2));\n var ranges = vm.dateRanges['Q' + afterQuarter + ' (' + afterYear + ')'];\n vm.afterDatePicker.startDate = ranges[0].toDate();\n vm.afterDatePicker.endDate = ranges[1].toDate();\n afterQuery.startDate = ranges[0].toDate().toISOString().split('.')[0] + \"Z\";\n afterQuery.endDate = ranges[1].toDate().toISOString().split('.')[0] + \"Z\";\n\n var beforeYear = parseInt(datePeriods[0].substring(3, 7));\n var beforeQuarter = parseInt(datePeriods[0].substring(1, 2));\n ranges = vm.dateRanges['Q' + beforeQuarter + ' (' + beforeYear + ')'];\n vm.beforeDatePicker.startDate = ranges[0].toDate();\n vm.beforeDatePicker.endDate = ranges[1].toDate();\n beforeQuery.startDate = ranges[0].toDate().toISOString().split('.')[0] + \"Z\";\n beforeQuery.endDate = ranges[1].toDate().toISOString().split('.')[0] + \"Z\";\n\n } else {\n afterQuery.periods = null;\n beforeQuery.periods = null;\n }\n }\n\n function groupNerFacets() {\n var nerFacets = vm.data.facets.filter(function (k) { return k.key.startsWith('ner_') })\n vm.data.facets = vm.data.facets.filter(function (k) { return !k.key.startsWith('ner_') })\n if (nerFacets.length > 0) {\n var order = nerFacets[0].order;\n nerFacets.forEach(function (k) {\n if (k.order && Number(k.order) < Number(order)) {\n order = k.order;\n }\n })\n nerFacets.sort(function (a, b) {\n return a.order - b.order\n });\n vm.data.facets.push({\n \"key\": \"ner_\",\n \"title\": $translate.instant('SHARED.NAMEDENTITY'),\n \"facets\": nerFacets,\n \"group\": true,\n \"facetList\": [\"a\"],\n \"type\": 250,\n \"order\": order\n })\n sortFacets(); \n }\n }\n\n function sortFacets() {\n vm.isOrderActive = vm.data.facets.filter(function (f) {\n return Number(f.order) > 1;\n }).length > 0;\n if (!vm.isOrderActive) {\n vm.data.facets.sort(function (a, b) {\n return a.type - b.type\n });\n } else {\n vm.data.facets.sort(function (a, b) {\n return Number(a.order) - Number(b.order)\n });\n }\n }\n\n function measureTimings(start) {\n if ($('#dashboard2').is(':visible')) { //if the container is visible on the page\n $utils.googleAnalyticsSetTiming('Comparation Report Page Load', vm.reportId, Date.now() - start)\n } else {\n setTimeout(function () { measureTimings(start) }, 200); //wait 50 ms, then try again\n }\n }\n\n function eliminateFacetFilteredValues(){\n if(vm.parameters.filterChips && vm.parameters.filterChips.length > 0){\n vm.parameters.filterChips.forEach(function(filteredValue){\n var facet = vm.data.facets.filter(function(facet){ return facet.title === filteredValue.titleKey; })[0];\n if(facet && facet.facetList){\n facet.facetList = facet.facetList.filter(function(item){ return item.value !== filteredValue.value;});\n }\n })\n }\n }\n\n function setFacetParams(parameters) {\n var facets = parameters.facet;\n if (!facets) return;\n var facetList = [];\n for (var i = 0; i < facets.length; i++) {\n facetList.push({\n name: facets[i]\n })\n }\n parameters.facet = facetList;\n }\n\n function findStopWords() {\n api.report.getStopWords(vm.report.id)\n .then(function (response) {\n vm.stopWords = response.map(function (f) { return f.word; });\n vm.getStopWordsProcessing = false;\n },\n function (response) {\n $log.error(response);\n });\n }\n\n function findTemporalSentimentUseRatio(){\n if (vm.userSettings != null && vm.userSettings.temporalSentimentUseRatio != null) {\n vm.temporalSentimentUseRatio = vm.userSettings.temporalSentimentUseRatio;\n }\n }\n\n\n function findStopLabels() {\n api.report.getStopLabels(vm.report.id)\n .then(function(r){\n vm.stopLabels = r.map(function (f) { return f.name; });\n vm.getStopLabelsProcessing = false;\n },\n function (response) {\n $log.error(response);\n });\n }\n\n vm.findStopLabelsAndStopWords = function () {\n if (!vm.isFindStopLabelsAndStopWordsProcessDone) {\n vm.getStopWordsProcessing = true;\n vm.getStopLabelsProcessing = true;\n findStopWords();\n findStopLabels();\n }\n vm.isFindStopLabelsAndStopWordsProcessDone = true;\n }\n\n vm.facetMoreAndMore = function (item) {\n if (item.allFacets) {\n vm.moreAndMoreCount += 1;\n item.size = item.size + 10;\n if (item.facetList.length < item.size) item.showMoreAndMore = false;\n return;\n }\n\n vm.moreAndMoreLoading = true;\n vm.moreAndMoreCount += 1;\n item.size = item.size + 10;\n\n api.report.moreAndMoreSearch(vm.reportId, item.key, item.size-10, vm.parameters)\n .then(function (response) {\n if (response.length < 10) item.showMoreAndMore = false;\n item.facetList = item.facetList.concat(response);\n vm.moreAndMoreLoading = false;\n }, function (err) {\n $log.error(err);\n })\n }\n\n function addStopWord(){\n vm.stopWordToAdd = vm.stopWordToAdd != null ? vm.stopWordToAdd.trim() : vm.stopWordToAdd;\n if (vm.stopWordToAdd == null || vm.stopWordToAdd == \"\" || vm.stopWords.includes(vm.stopWordToAdd)) {\n if (vm.stopWordToAdd == \"\") toastService.serverError($translate.instant('REPORT.KEYWORD_CHART.EMPTY_STOPWORDS'));\n vm.stopWordToAdd = '';\n return;\n }\n vm.keywords = vm.keywords.filter(function(y){\n var regexp = new RegExp('(\\\\s|^)'+vm.stopWordToAdd+ \"(\\\\s|$)\",'i')\n return !y.text.match(regexp);\n })\n vm.addStopWordProcessing = true;\n api.report.putStopWords(vm.report.id,[vm.stopWordToAdd])\n .then(function(res){\n vm.addStopWordProcessing = false;\n },function(err){\n console.log(err);\n vm.addStopWordProcessing = false;\n })\n vm.stopWords.push(vm.stopWordToAdd);\n vm.stopWordToAdd = '';\n }\n \n function addSingleStopLabel() {\n vm.stopLabelToAdd = vm.stopLabelToAdd != null ? vm.stopLabelToAdd.trim() : vm.stopLabelToAdd;\n if (vm.stopLabelToAdd == null || vm.stopLabelToAdd == \"\" || vm.stopLabels.includes(vm.stopLabelToAdd)) {\n if (vm.stopLabelToAdd == \"\") toastService.serverError($translate.instant('REPORT.KEYWORD_CHART.EMPTY_STOPLABEL'));\n vm.stopLabelToAdd = '';\n return;\n }\n addStopLabelGroup([vm.stopLabelToAdd]);\n vm.stopLabelToAdd = '';\n }\n\n function addStopLabelGroup(texts){\n vm.addStopLabelProcessing = true;\n api.report.postStopLabels(vm.report.id,texts)\n .then(function(res){\n vm.addStopLabelProcessing = false;\n },function(err){\n console.log(err);\n vm.addStopLabelProcessing = false;\n })\n var deletedKeywordList = [];\n var deletedNoncategorizedKeywords = [];\n texts.forEach(function (x) {\n vm.stopLabels.push(x);\n if (vm.keywords.find(function (f) { return x.includes(f.text); }) != null)\n deletedKeywordList.push(vm.keywords.find(function (f) { return x.includes(f.text); }));\n });\n\n if (deletedKeywordList && deletedKeywordList.length > 0) {\n deletedKeywordList.forEach(function (x) { vm.deletedKeywords.push(x); });\n }\n vm.keywords = vm.keywords.filter(function(x){return !texts.includes(x.text);});\n }\n\n function addStopLabels() {\n var toAdd = vm.stopLabelsToAdd.map(function (x) {\n return x.text;\n });\n if (toAdd.length == 0) {\n toastService.serverError($translate.instant('REPORT.KEYWORD_CHART.EMPTY_STOPLABEL'));\n return;\n }\n addStopLabelGroup(toAdd);\n vm.stopLabelsToAdd = [];\n }\n\n function removeStopLabels(){\n vm.stopLabels = vm.stopLabels.filter(function(item) {\n return vm.stopLabelsToRemove.indexOf(item)<0;\n });\n if (vm.deletedKeywords && vm.deletedKeywords.length > 0) {\n vm.deletedKeywords.forEach(function (x) {\n if (vm.stopLabelsToRemove.includes(x.text)) {\n vm.keywords.push(x)\n }\n })\n vm.deletedKeywords = vm.deletedKeywords.filter(function (f) { return !vm.stopLabelsToRemove.includes(f.text); });\n }\n api.report.deleteStopLabels(vm.report.id,vm.stopLabelsToRemove) \n .then(function (response) {\n },\n function (response) {\n $log.error(response);\n });\n vm.stopLabelsToRemove = [];\n }\n\n function removeStopWords(){\n vm.stopWords = vm.stopWords.filter(function(item) {\n return vm.stopWordsToRemove.indexOf(item)<0;\n });\n api.report.deleteStopWords(vm.report.id,vm.stopWordsToRemove)\n .then(function (response) {\n },\n function (response) {\n $log.error(response);\n });\n vm.stopWordsToRemove = [];\n }\n\n function encodeFilters(query) {\n var encodedFilters = base64.encode(JSON.stringify(query));\n $location.search('query', encodedFilters);\n ReportService.setQuery(vm.report.id,encodedFilters);\n }\n\n function setNormalFacetFilters() {\n var filters = ReportQueryParserService.setNormalFacetFilters(vm.filterChips);\n if (filters && filters.length > 0) {\n vm.parameters.filter = filters;\n } else {\n vm.parameters.filter = null;\n }\n }\n\n function setCategoryFacetFilters() {\n var filters = ReportQueryParserService.setCategoryFacetFilters(vm.filterChips);\n if (filters && filters.length > 0) {\n vm.parameters.category = filters;\n } else {\n vm.parameters.category = null;\n }\n }\n\n\n function setFacetFieldsQuery() {\n var fields = vm.reportFields.filter(function (rf) {\n return ReportService.isThisFieldType(300, rf.fieldType);\n });\n fields.forEach(function (f) {\n if (!vm.parameters[\"facet\"]) vm.parameters[\"facet\"] = [];\n if (vm.parameters[\"facet\"].indexOf(f.fieldTitle) == -1)\n vm.parameters[\"facet\"].push(f.fieldTitle);\n })\n var classificationModules = vm.reportModules.filter(function (rm) {\n return rm.moduleTypeId == 1\n });\n if (classificationModules && classificationModules.length > 0) {\n classificationModules.forEach(function (m) {\n if (!vm.parameters[\"facet\"]) vm.parameters[\"facet\"] = [];\n var value = \"\\\"moduleid:\" + m.moduleId + \"\\\"\";\n if (vm.parameters[\"facet\"].indexOf(value) == -1)\n vm.parameters[\"facet\"].push(value);\n })\n }\n var sentimentField = vm.reportFields.filter(function (rf) {\n return rf.fieldType == 200;\n })[0];\n if(sentimentField){\n if (!vm.parameters[\"facet\"]) vm.parameters[\"facet\"] = [];\n if (vm.parameters[\"facet\"].indexOf(sentimentField.fieldTitle) == -1)\n vm.parameters[\"facet\"].push(sentimentField.fieldTitle);\n }\n }\n\n function setupBeforeFacets() {\n var normalCategoryFilters = vm.filterChips.filter(function (c) {\n return c.type == 100 && c.key == vm.dashboardModuleId;\n });\n if (normalCategoryFilters && normalCategoryFilters.length > 0) {\n var level = findChartLevel();\n var result = null;\n normalCategoryFilters.forEach(function (c) {\n var foundedFacets = vm.beforeData.facets.filter(function (f) {\n return f.key === c.key\n });\n if (foundedFacets && foundedFacets.length > 0) {\n var facet = foundedFacets[0];\n result = findRecurisiveFacetByValue(facet.facetList, c.value, c.parentString ? c.parentString:null,null);\n if (result && result.subs && result.subs.length > 0) {\n result.subs.forEach(function (s) {\n s[\"parentString\"] = c.parentString ? c.parentString + \"->\" + c.value : c.value;\n });\n if (c.group == -1 && level - 1 == c.level && result && result.subs && result.subs.length > 0) {\n vm.targetChartBeforeData = {\n key: facet.key,\n title: result.value,\n type: facet.type + 10,\n size: 10,\n count: result.count,\n facetList: result.subs,\n parentString: c.parentString ? c.parentString + \"->\" + c.value : c.value\n };\n }\n } else if (c.group == -1 && level - 1 == c.level) {\n var foundedTarget = null;\n if(result.parentString){\n var foundedTarget = vm.beforeData.facets.filter(function (x) {\n return x.parentString == result.parentString;\n })[0];\n }else{\n var foundedTarget = vm.beforeData.facets.filter(function (x) {\n return !x.parentString;\n })[0];\n }\n if (foundedTarget) {\n foundedTarget = JSON.parse(JSON.stringify(foundedTarget));\n foundedTarget.facetList = foundedTarget.facetList.filter(function (ss) {\n return ss.value === result.value;\n });\n vm.targetChartBeforeData = foundedTarget;\n }\n }\n }\n })\n }\n }\n\n function setupFacets() {\n \n vm.targetChartData = null;\n vm.data.facetSize = 10;\n vm.data.facets.forEach(function (f) {\n f[\"size\"] = 10;\n f[\"showMoreAndMore\"] = f.facetList && f.facetList.length >= 10 ? true : false;\n f[\"allFacets\"] = f.facetList && f.facetList.length > 10 || vm.reportModuleIds.includes(f.key) ? true : false;\n });\n \n var normalCategoryFilters = [];\n vm.filterChips.forEach(function (c) {\n if(c.type == 100 && c.operand == \"AND\" && normalCategoryFilters.filter(function(f){ return f.level == c.level && f.operand == \"AND\";}).length == 0){\n normalCategoryFilters.push(c);\n }\n });\n if (normalCategoryFilters && normalCategoryFilters.length > 0) {\n var level = findChartLevel();\n normalCategoryFilters.forEach(function (c) {\n var foundedFacets = vm.data.facets.filter(function (f) {\n return f.key === c.key\n });\n if (foundedFacets && foundedFacets.length > 0) {\n var facet = foundedFacets[0];\n var result = findRecurisiveFacetByValue(facet.facetList, c.value,c.parentString ? c.parentString:null,null);\n if (result && result.subs && result.subs.length > 0) {\n result.subs.forEach(function (s) {\n s[\"parentString\"] = c.parentString ? c.parentString + \"->\" + c.value : c.value;\n })\n if (c.group == -1 && level - 1 == c.level && result && result.subs && result.subs.length > 0) {\n vm.targetChartData = {\n key: facet.key,\n title: result.value,\n type: facet.type + 10,\n size: 10,\n count: result.count,\n facetList: result.subs,\n parentString: c.parentString ? c.parentString + \"->\" + c.value : c.value\n };\n } else if (c.group == -1 && level - 1 == c.level && result) {\n var foundedFilter = normalCategoryFilters.filter(function (cat) {\n return cat.level == level - 2;\n })[0];\n }\n var alias = {};\n var chipCat = getChipCat(c);\n if (chipCat && chipCat.localVariables) {\n chipCat.localVariables.forEach(function (k) {\n alias[k.language] = k.value;\n })\n }\n vm.data.facets.push({\n order: facet.order,\n key: facet.key,\n title: result.value,\n type: facet.type + 10,\n size: 10,\n count: result.count,\n facetList: result.subs,\n parentString: c.parentString ? c.parentString + \"->\" + c.value : c.value,\n alias: alias\n });\n } else if (c.group == -1 && level - 1 == c.level) {\n var foundedTarget = vm.data.facets.filter(function (x) {\n return x.parentString == result.parentString;\n })[0];\n if (foundedTarget) {\n foundedTarget = JSON.parse(JSON.stringify(foundedTarget));\n if(foundedTarget.subs && foundedTarget.subs.length > 0){\n foundedTarget.facetList = foundedTarget.facetList.filter(function (ss) {\n return ss.value === result.value;\n });\n }\n vm.targetChartData = foundedTarget;\n }\n }\n }\n })\n }\n\n sortFacets();\n\n if (normalCategoryFilters && normalCategoryFilters.length > 0) {\n normalCategoryFilters.forEach(function (cFilter) {\n var foundedFacet = vm.data.facets.filter(function (f) {\n return f.key == cFilter.key && cFilter.titleKey == f.title;\n })[0];\n if (foundedFacet)\n vm.data.facets = vm.data.facets.filter(function (f) {\n return f != foundedFacet;\n });\n })\n }\n }\n\n/*\n function setupTimelineFacets(timelineFacets) {\n vm.targetChartTimelineData = null;\n if (!timelineFacets || timelineFacets.length < 1) return;\n var normalCategoryFilters = vm.filterChips.filter(function (c) {\n return c.type == 100 && c.key == vm.dashboardModuleId;\n });\n if (normalCategoryFilters && normalCategoryFilters.length > 0) {\n var level = findChartLevel();\n var tempTarget;\n normalCategoryFilters.forEach(function (c) {\n var foundedFacets = timelineFacets.filter(function (f) {\n return f.key === c.key\n });\n if (foundedFacets && foundedFacets.length > 0) {\n var facet = foundedFacets[0];\n var result = findRecurisiveFacetByValue(facet.facetList, c.value,c.parentString ? c.parentString:null,null);\n if (result && result.subs && result.subs.length > 0) {\n result.subs.forEach(function (s) {\n s[\"parentString\"] = c.parentString ? c.parentString + \"->\" + c.value : c.value;\n })\n if (c.group == -1 && level - 1 == c.level && result && result.subs && result.subs.length > 0) {\n vm.targetChartTimelineData = {\n key: facet.key,\n title: result.value,\n type: facet.type + 10,\n size: 10,\n count: result.count,\n facetList: result.subs,\n ranges: facet.ranges,\n parentString: c.parentString ? c.parentString + \"->\" + c.value : c.value\n };\n } else if (c.group == -1 && level - 1 == c.level && result) {\n var foundedFilter = normalCategoryFilters.filter(function (cat) {\n return cat.level == level - 2;\n })[0];\n }else if (c.group == -1 && level - 1 != c.level){\n tempTarget = {\n key: facet.key,\n title: result.value,\n type: facet.type + 10,\n size: 10,\n count: result.count,\n facetList: result.subs,\n ranges: facet.ranges,\n parentString: c.parentString ? c.parentString + \"->\" + c.value : c.value\n };\n }\n } else if (c.group == -1 && level - 1 == c.level) {\n var foundedTarget = vm.data.facets.filter(function (x) {\n return result.parentString && x.parentString && x.parentString == result.parentString;\n })[0];\n if (foundedTarget) {\n foundedTarget = JSON.parse(JSON.stringify(foundedTarget));\n foundedTarget.facetList = foundedTarget.facetList.filter(function (ss) {\n return ss.value === result.value;\n });\n //vm.targetChartTimelineData = foundedTarget;\n vm.targetChartData = foundedTarget;\n }\n //vm.targetChartTimelineData = tempTarget;\n }\n }\n })\n }\n }*/\n\n function setupTimelineFacets(timelineFacets) {\n vm.targetChartTimelineData = null;\n if (!timelineFacets || timelineFacets.length < 1) return;\n var normalCategoryFilters = vm.filterChips.filter(function (c) {\n return c.type == 100 && c.key == vm.dashboardModuleId;\n });\n if (normalCategoryFilters && normalCategoryFilters.length > 0) {\n var level = findChartLevel();\n var tempTarget;\n normalCategoryFilters.forEach(function (c) {\n var foundedFacets = timelineFacets.filter(function (f) {\n return f.key === c.key\n });\n if (foundedFacets && foundedFacets.length > 0) {\n var facet = foundedFacets[0];\n var result = findRecurisiveFacetByValue(facet.facetList, c.value, c.parentString ? c.parentString:null,null);\n if (result && result.subs && result.subs.length > 0) {\n result.subs.forEach(function (s) {\n s[\"parentString\"] = c.parentString ? c.parentString + \"->\" + c.value : c.value;\n })\n if (c.group == -1 && level - 1 == c.level && result && result.subs && result.subs.length > 0) {\n vm.targetChartTimelineData = {\n key: facet.key,\n title: result.value,\n type: facet.type + 10,\n size: 10,\n count: result.count,\n facetList: result.subs,\n ranges: facet.ranges,\n parentString: c.parentString ? c.parentString + \"->\" + c.value : c.value\n };\n } else if (c.group == -1 && level - 1 == c.level && result) {\n var foundedFilter = normalCategoryFilters.filter(function (cat) {\n return cat.level == level - 2;\n })[0];\n }else if (c.group == -1 && level - 1 != c.level){\n tempTarget = {\n key: facet.key,\n title: result.value,\n type: facet.type + 10,\n size: 10,\n count: result.count,\n facetList: result.subs,\n ranges: facet.ranges,\n parentString: c.parentString ? c.parentString + \"->\" + c.value : c.value\n };\n }\n } else if (c.group == -1 && level - 1 == c.level) {\n /*var foundedTarget = vm.data.facets.filter(function (x) {\n return x.parentString == result.parentString;\n })[0];\n if (foundedTarget) {\n foundedTarget = JSON.parse(JSON.stringify(foundedTarget));\n foundedTarget.facetList = foundedTarget.facetList.filter(function (ss) {\n return ss.value === result.value;\n });\n vm.targetChartTimelineData = foundedTarget;\n }*/\n vm.targetChartTimelineData = tempTarget;\n }\n }\n })\n }\n }\n\n function setBreadCrumbs() {\n vm.breadCrumbs = [{\n value: vm.dashboardClassificationModule.module.name,\n level: -1\n }];\n var tempLevels = vm.filterChips.filter(function (f) {\n return f.level >= 0 && f.key == vm.dashboardModuleId;\n });\n if (tempLevels && tempLevels.length > 0) {\n var foundedLevels = [];\n var eliminateSameModuleAndLevel = [];\n tempLevels.forEach(function(l){\n var founded = eliminateSameModuleAndLevel.filter(function(item){ return item == l.level; })[0];\n if(!founded){\n eliminateSameModuleAndLevel.push(l.level);\n foundedLevels.push(l);\n }\n })\n foundedLevels.sort(function (f1, f2) {\n return f1.level - f2.level;\n });\n var p = foundedLevels.filter(function(f){ return !f.parentString;})[0]\n if(!p && foundedLevels.length > 0){\n var t = foundedLevels[0];\n foundedLevels.push({\n key:t.key,\n group:t.group,\n level:t.level-1,\n operand:\"AND\",\n type:t.type,\n value:t.titleKey\n });\n }\n foundedLevels.sort(function (f1, f2) {\n return f1.level - f2.level;\n });\n foundedLevels.forEach(function (f) {\n vm.breadCrumbs.push(f);\n });\n }\n }\n\n function findRecurisiveFacetByValue(facets, value,parent,currentParent) {\n if (!value || !facets || facets.length <= 0) return null;\n for (var i in facets) {\n var f = facets[i];\n if (f.value === value && parent == currentParent) {\n return f;\n } else {\n var p = f.value;\n if(currentParent)\n p = currentParent + \"->\" + f.value;\n var m = findRecurisiveFacetByValue(f.subs, value,parent,p);\n if (m)\n return m;\n }\n }\n return null;\n }\n\n function dateFormat(dateStart, dateEnd) {\n return dateStart && dateEnd && (dateStart.toLocaleDateString('tr-TR') + ' - ' + moment(dateEnd).toDate().toLocaleDateString('tr-TR'));\n }\n\n function getRangeResults() {\n if (vm.queueActive) {\n api.report.rangeSearch(vm.reportId)\n .then(function (res) {\n vm.rangeResponse = res;\n if (Object.keys(res).length == 0) {\n vm.preparingRangeData = true;\n }\n var response = getRangeResponseByTrendDate(vm.catTrendDate);\n if (response) {\n setupTimelineFacets(response.facets);\n setSentimentTimelineChart(response, vm.catTrendDate);\n setCategoryTimelineChart(response, vm.catTrendType, vm.catTrendDate);\n }\n\n }, function (response) {\n console.log(response);\n })\n }\n }\n\n function init() {\n //setQueryParameters();\n //initializeDateRangesAndSearch();\n // searchDateRanges();\n getCategoryDataCompareSettings();\n getRangeResults();\n setChartCategoryAliases();\n setFilteredFacets();\n findTemporalSentimentUseRatio();\n getIsFlatModeActive();\n $utils.saveAudit(vm.reportId, \"REPORT\", \"OPEN\", vm.report.name + \" / Comparation Report\");\n $utils.googleAnalyticsSetPageview(\"/report/\" + vm.reportId + \"/overview\");\n $utils.googleAnalyticsSetScreenView(\"Comparation Report\");\n }\n init();\n\n function initializeDateRangesAndSearch(){\n var promises = [api.report.settings.findReportDefaultDateSettings(vm.report.id)];\n $q.all(promises).then(function (results) {\n var defaultDate;\n if(results[0]){\n var r = results[0];\n defaultDate ={\n period:{type:r.periodType},\n beforeDatePeriod:{type:r.beforeDatePeriodType,startDate:r.beforeDatePeriodStartDate,endDate:r.beforeDatePeriodEndDate},\n afterDatePeriod:{type:r.afterDatePeriodType,startDate:r.afterDatePeriodStartDate,endDate:r.afterDatePeriodEndDate}\n };\n }\n initDateRanges(defaultDate);\n encodeFilters(vm.parameters);\n search();\n }, function (error) {\n $log.error(error);\n })\n }\n\n function initDateRanges(defaultDate) {\n if(defaultDate.period.type!=null || (defaultDate.beforeDatePeriod.startDate!=null && defaultDate.beforeDatePeriod.endDate!=null && defaultDate.afterDatePeriod.startDate!=null && defaultDate.afterDatePeriod.endDate!=null)){//if defaults are set for dates on db\n if (vm.userSettings && !vm.userSettings.defaultDateUpdated && vm.userSettings.afterDate){\n if (vm.userSettings.afterDate.startDate)\n vm.afterDatePicker.startDate = moment(vm.userSettings.afterDate.startDate).toDate();\n if (vm.userSettings.afterDate.endDate)\n vm.afterDatePicker.endDate = moment(vm.userSettings.afterDate.endDate).toDate();\n\n }else{\n var afterStartDate;\n var afterEndDate;\n if(defaultDate.afterDatePeriod.type=='presentPeriod'){\n afterStartDate = moment(new Date()).startOf(defaultDate.period.type).toDate();\n afterEndDate = setPeriodEndDate(afterStartDate,defaultDate.period.type); \n }else if(defaultDate.afterDatePeriod.type=='completedLastPeriod'){\n afterStartDate = moment(new Date()).subtract(1, defaultDate.period.type).startOf(defaultDate.period.type).toDate();\n afterEndDate = setPeriodEndDate(afterStartDate,defaultDate.period.type); \n }else if(defaultDate.afterDatePeriod.type=='chooseDate'){\n afterStartDate = moment(defaultDate.afterDatePeriod.startDate);\n afterEndDate = moment(defaultDate.afterDatePeriod.endDate); \n }else{//default: lastPeriodWithData\n afterStartDate = moment(vm.report.dates.endDate).startOf(defaultDate.period.type).toDate();\n afterEndDate = setPeriodEndDate(afterStartDate,defaultDate.period.type); \n }\n vm.afterDatePicker = {\n startDate: afterStartDate,\n endDate: afterEndDate\n };\n }\n if (vm.userSettings && !vm.userSettings.defaultDateUpdated && vm.userSettings.beforeDate){\n if (vm.userSettings.beforeDate.startDate)\n vm.beforeDatePicker.startDate = moment(vm.userSettings.beforeDate.startDate).toDate();\n if (vm.userSettings.beforeDate.endDate)\n vm.beforeDatePicker.endDate = moment(vm.userSettings.beforeDate.endDate).toDate();\n }else{\n var beforeStartDate;\n var beforeEndDate; \n if(defaultDate.beforeDatePeriod.type=='chooseDate'){\n beforeStartDate = moment(defaultDate.beforeDatePeriod.startDate);\n beforeEndDate = moment(defaultDate.beforeDatePeriod.endDate);\n }else{\n if(defaultDate.afterDatePeriod.type == 'chooseDate'){\n if(defaultDate.beforeDatePeriod.type=='lastYear'){\n beforeStartDate = moment(vm.afterDatePicker.startDate).subtract(1,'year').toDate();\n beforeEndDate = moment(vm.afterDatePicker.endDate).subtract(1,'year').toDate();\n }else{//default: lastPeriod\n beforeEndDate = moment(vm.afterDatePicker.startDate).toDate();\n beforeStartDate = moment(vm.afterDatePicker.startDate).subtract(moment(vm.afterDatePicker.endDate).diff(moment(vm.afterDatePicker.startDate), 'days'),'days').toDate();\n } \n }else{\n if(defaultDate.beforeDatePeriod.type=='lastYear'){\n beforeStartDate = moment(vm.afterDatePicker.startDate).subtract(1,'year').toDate();\n beforeEndDate = setPeriodEndDate(beforeStartDate,defaultDate.period.type);\n }else{//default: lastPeriod\n beforeStartDate = moment(vm.afterDatePicker.startDate).subtract(1, defaultDate.period.type).toDate();\n beforeEndDate = setPeriodEndDate(beforeStartDate,defaultDate.period.type);\n } \n }\n }\n vm.beforeDatePicker = {\n startDate: beforeStartDate,\n endDate: beforeEndDate\n };\n }\n if (vm.userSettings && vm.userSettings.defaultDateUpdated){\n //addTemplateReportCookie('defaultDateUpdated', false)\n $settings.saveUserSettings(\"defaultDateUpdated\", false, vm.report.id);\n //addTemplateReportCookie('beforeDate', { 'startDate': vm.beforeDatePicker.startDate, 'endDate': vm.beforeDatePicker.endDate })\n $settings.saveUserSettings(\"beforeDate\", { 'startDate': vm.beforeDatePicker.startDate, 'endDate': vm.beforeDatePicker.endDate }, vm.report.id);\n //addTemplateReportCookie('afterDate', { 'startDate': vm.afterDatePicker.startDate, 'endDate': vm.afterDatePicker.endDate })\n $settings.saveUserSettings(\"afterDate\", { 'startDate': vm.afterDatePicker.startDate, 'endDate': vm.afterDatePicker.endDate }, vm.report.id);\n }\n }else{\n if (!vm.report.dates || !vm.report.dates.startDate || !vm.report.dates.endDate) return;\n var newestDocumentDate = vm.report.dates.endDate;\n if (newestDocumentDate && !vm.parameters.startDate && !vm.parameters.endDate) {\n newestDocumentDate = moment(new Date(newestDocumentDate));\n vm.currentQuarter = newestDocumentDate.quarter();\n if (vm.userSettings && vm.userSettings.afterDate){\n if (vm.userSettings.afterDate.startDate)\n vm.afterDatePicker.startDate = moment(vm.userSettings.afterDate.startDate).toDate();\n if (vm.userSettings.afterDate.endDate)\n vm.afterDatePicker.endDate = moment(vm.userSettings.afterDate.endDate).toDate();\n }else{\n vm.afterDatePicker = {\n startDate: newestDocumentDate.clone().quarter(vm.currentQuarter).startOf('quarter').toDate(),\n endDate: newestDocumentDate.clone().quarter(vm.currentQuarter).endOf('quarter').toDate()\n };\n }\n }\n console.log(\"b\")\n newestDocumentDate = typeof newestDocumentDate === 'string' ? moment(new Date(newestDocumentDate)) : newestDocumentDate;\n if (vm.userSettings && vm.userSettings.beforeDate) {\n if (vm.userSettings.beforeDate.startDate)\n vm.beforeDatePicker.startDate = moment(vm.userSettings.beforeDate.startDate).toDate();\n if (vm.userSettings.beforeDate.endDate)\n vm.beforeDatePicker.endDate = moment(vm.userSettings.beforeDate.endDate).toDate();\n } else {\n vm.beforeDatePicker = {\n startDate: newestDocumentDate.clone().subtract(1, 'quarter').startOf('quarter').toDate(),\n endDate: newestDocumentDate.clone().subtract(1, 'quarter').endOf('quarter').toDate()\n };\n }\n\n }\n vm.parameters.startDate = vm.afterDatePicker.startDate.toISOString().split('.')[0] + \"Z\";\n vm.parameters.endDate = vm.afterDatePicker.endDate.toISOString().split('.')[0] + \"Z\";\n\n function setPeriodEndDate(startDate,period){\n if(period == 'year'){\n return moment(startDate).clone().add(moment.duration({ Y: 1 })).toDate()\n }else if(period == 'month'){\n return moment(startDate).clone().add(moment.duration({ M: 1 })).toDate()\n }else if(period == 'quarter'){\n return moment(startDate).clone().add(moment.duration({ M: 3 })).toDate()\n }else{// default is quarter\n return moment(startDate).clone().add(moment.duration({ M: 3 })).toDate()\n }\n }\n\n createDatePickers();\n }\n\n function createDatePickers() {\n if (!vm.isDatePickerCreatorStarted) {\n vm.isDatePickerCreatorStarted = true\n if (($('#beforereportrange').length && $('#afterreportrange').length) || ($('#beforereportrange2').length && $('#afterreportrange2').length)) {\n createDateComponentTurkish('#beforereportrange', vm.beforeDatePicker.startDate, vm.beforeDatePicker.endDate);\n createDateComponentTurkish('#afterreportrange', vm.afterDatePicker.startDate, vm.afterDatePicker.endDate);\n createDateComponentEnglish('#beforereportrange2', vm.beforeDatePicker.startDate, vm.beforeDatePicker.endDate);\n createDateComponentEnglish('#afterreportrange2', vm.afterDatePicker.startDate, vm.afterDatePicker.endDate);\n if (($('#beforereportrange').length && $('#afterreportrange').length)) {\n $('input[id=\"beforereportrange\"]').on('apply.daterangepicker', function (ev, picker) {\n vm.beforeDatePicker = {\n startDate: picker.startDate.toDate(),\n endDate: picker.endDate.toDate()\n };\n //addTemplateReportCookie(\"beforeDate\", vm.beforeDatePicker);\n $settings.saveUserSettings(\"beforeDate\", vm.beforeDatePicker, vm.report.id);\n changeDate();\n search();\n });\n $('input[id=\"beforereportrange\"]').on('hide.daterangepicker', function (ev, picker) {\n refreshDatePickersFormat();\n });\n\n $('input[id=\"afterreportrange\"]').on('apply.daterangepicker', function (ev, picker) {\n vm.afterDatePicker = {\n startDate: picker.startDate.toDate(),\n endDate: picker.endDate.toDate()\n };\n //addTemplateReportCookie(\"afterDate\", vm.afterDatePicker);\n $settings.saveUserSettings(\"afterDate\", vm.afterDatePicker, vm.report.id);\n changeDate();\n $('input[id=\"beforereportrange\"]').click();\n });\n $('input[id=\"afterreportrange\"]').on('hide.daterangepicker', function (ev, picker) {\n refreshDatePickersFormat();\n });\n }\n\n if (($('#beforereportrange2').length && $('#afterreportrange2').length)) {\n $('input[id=\"beforereportrange2\"]').on('apply.daterangepicker', function (ev, picker) {\n vm.beforeDatePicker = {\n startDate: picker.startDate.toDate(),\n endDate: picker.endDate.toDate()\n };\n //addTemplateReportCookie(\"beforeDate\", vm.beforeDatePicker);\n $settings.saveUserSettings(\"beforeDate\", vm.beforeDatePicker, vm.report.id);\n changeDate();\n search();\n });\n $('input[id=\"beforereportrange2\"]').on('hide.daterangepicker', function (ev, picker) {\n refreshDatePickersFormat();\n });\n\n $('input[id=\"afterreportrange2\"]').on('apply.daterangepicker', function (ev, picker) {\n vm.afterDatePicker = {\n startDate: picker.startDate.toDate(),\n endDate: picker.endDate.toDate()\n };\n //addTemplateReportCookie(\"afterDate\", vm.afterDatePicker);\n $settings.saveUserSettings(\"afterDate\", vm.afterDatePicker, vm.report.id);\n changeDate();\n $('input[id=\"beforereportrange2\"]').click();\n });\n $('input[id=\"afterreportrange2\"]').on('hide.daterangepicker', function (ev, picker) {\n refreshDatePickersFormat();\n });\n }\n\n vm.dateTypes = [{\n id: 1,\n name: $translate.instant('REPORT.CONTENT_DATE')\n },\n {\n id: 2,\n name: $translate.instant('SHARED.ORDER.UPDATED_DATE')\n },\n {\n id: 3,\n name: $translate.instant('SHARED.ORDER.CREATED_DATE')\n }]\n var l = \"
\" +\n \"\" +\n \"
\";\n $(\".drp-buttons\").prepend($compile(l)($scope));\n \n vm.parameters.searchByDate = vm.paramSearchByDate;\n\n if ($(\".datetype\")[($(\".datetype\").length - 2).toString()]) $(\".datetype\")[($(\".datetype\").length - 2).toString()].hidden = true;\n vm.isDatePickerCreatorStarted = false;\n }\n }\n refreshDatePickersFormat();\n }\n\n function createDatePicker() {\n if (($('#beforereportrange').is(':visible') && $('#afterreportrange').is(':visible') && vm.languageDatePicker == 1) || ($('#beforereportrange2').is(':visible') && $('#afterreportrange2').is(':visible') && vm.languageDatePicker == 2)) { //if the container is visible on the page\n createDatePickers();\n } else {\n setTimeout(createDatePickers, 50); //wait 50 ms, then try again\n }\n }\n\n function setQueryParameters() {\n if ($location.search().query) {\n vm.parameters = JSON.parse(base64.decode($location.search().query));\n if (vm.parameters && vm.parameters.startDate && vm.parameters.endDate) {\n vm.afterDatePicker = {\n startDate: moment(vm.parameters.startDate).toDate(),\n endDate: moment(vm.parameters.endDate).toDate()\n }\n vm.beforeDatePicker = {\n startDate: !vm.beforeDatePicker.startDate ? moment(vm.parameters.startDate).subtract(1, 'y').toDate() : vm.beforeDatePicker.startDate,\n endDate: !vm.beforeDatePicker.endDate ? moment(vm.parameters.endDate).subtract(1, 'y').toDate() : vm.beforeDatePicker.endDate\n } \n vm.parameters.startDate = vm.afterDatePicker.startDate.toISOString().split('.')[0] + \"Z\";\n vm.parameters.endDate = vm.afterDatePicker.endDate.toISOString().split('.')[0] + \"Z\";\n }\n //if (vm.parameters.filterChips && vm.parameters.filterChips.length > 0) {\n vm.filterChips = ReportService.generateFilterChipsFromFilter(vm.parameters, vm.reportModules);\n /*for(var i=0;i0)\n vm.charts.categorySentimentVariance.data.categories = ReportTemplate1_2ChartParserService.summarizeDataToNCategories(vm.charts.categorySentimentVariance.data.categories, 1000, 1);\n\n vm.upperThresholdSentimentData = vm.charts.categorySentimentVariance.data.categories.filter(function (k) {\n if (vm.categoryDataCompareResponse.threshold == 0) {\n return false;\n }\n if (parseInt(k.positiveChange) / vm.multiplierCoefficient > vm.categoryDataCompareResponse.threshold) {\n return true;\n }\n if (parseInt(k.negativeChange) / vm.multiplierCoefficient > vm.categoryDataCompareResponse.threshold) {\n return true;\n }\n if (parseInt(k.categoryChange) / vm.multiplierCoefficient > vm.categoryDataCompareResponse.threshold) {\n return true;\n }\n return false;\n })\n\n vm.upperThresholdSentimentDataCategoryIds = vm.upperThresholdSentimentData.map(function (k) { return k.categoryId })\n vm.charts.categorySentimentVariance.data.categories = vm.charts.categorySentimentVariance.data.categories.filter(function (k) { return !vm.upperThresholdSentimentDataCategoryIds.includes(k.categoryId) })\n\n vm.visibleCategorySentimentData = vm.charts.categorySentimentVariance.data.categories.filter(function (k) { return vm.categoryDataCompareResponse.visibleCategoryIds.includes(k.categoryId) })\n\n vm.visibleCategorySentimentDataCategoryIds = vm.visibleCategorySentimentData.map(function (k) { return k.categoryId })\n vm.charts.categorySentimentVariance.data.categories = vm.charts.categorySentimentVariance.data.categories.filter(function (k) { return !vm.visibleCategorySentimentDataCategoryIds.includes(k.categoryId) })\n \n vm.charts.categorySentimentVariance.data.categories = vm.charts.categorySentimentVariance.data.categories.filter(function (k) {\n return k.mainCategory\n })\n vm.sumarizedCategorySentimentData = [];\n if (vm.charts.categorySentimentVariance.data.categories && vm.charts.categorySentimentVariance.data.categories.length > 0) {\n vm.sumarizedCategorySentimentData = ReportTemplate1_2ChartParserService.summarizeDataToNCategories(vm.charts.categorySentimentVariance.data.categories, 15, 1);\n }\n \n //vm.charts.categorySentimentVariance = ReportTemplate1_2ChartParserService.parseCategorySentimentVarianceChartData(beforeResponse, afterResponse, vm.dashboardModuleId, vm.categoryAlieses, null, null, vm.defaultTemporalSentimentOption,vm.temporalSentimentUseRatio);\n vm.charts.categorySentimentVariance.data.multiplierValue = vm.multiplierValue;\n\n vm.categorySentimentChangeData = [];\n vm.upperThresholdSentimentData.forEach(function (k) {\n k.threshold = true;\n vm.categorySentimentChangeData.push(k)\n })\n vm.visibleCategorySentimentData.forEach(function (k) {\n k.visible = true;\n vm.categorySentimentChangeData.push(k)\n })\n vm.sumarizedCategorySentimentData.forEach(function (k) {\n k.main = true;\n vm.categorySentimentChangeData.push(k)\n })\n\n calculateCategoryDataCompareWidths();\n \n }\n\n function calculateCategoryDataCompareWidths() {\n vm.categorySentimentChangeData.forEach(function (category) {\n var positiveValue = vm.charts.categorySentimentVariance.data.useRatio ? category.positiveNowCountRatio : category.positiveNowCount;\n var negativeValue = vm.charts.categorySentimentVariance.data.useRatio ? category.negativeNowCountRatio : category.negativeNowCount;\n category.positiveCategoryChangeWidth = (4 * positiveValue / (vm.multiplierCoefficient) + 25);\n category.negativeCategoryChangeWidth = (-4 * negativeValue / (vm.multiplierCoefficient) + 25)\n })\n }\n\n function setCategoryTimelineChart(response, catTrendType, catTrendDate) {\n if (vm.dashboardClassificationModule) {\n var categoryResponse = ReportTemplate1_2ChartParserService.parseCategoryTimelineChart(response ? JSON.parse(JSON.stringify(response)) : null, vm.dashboardModuleId, vm.targetChartTimelineData ? vm.targetChartTimelineData : null, vm.afterDatePicker.startDate, vm.afterDatePicker.endDate, vm.categoryAlieses, vm.report.id, catTrendType, catTrendDate);\n\n if (categoryResponse) {\n vm.categoryInsufficientTimelineData = categoryResponse.insufficientTimelineData;\n if (vm.categoryInsufficientTimelineData)\n vm.charts.categoryTimeline = categoryResponse;\n }\n\n }\n setTimeout(function () {\n vm.charts.categoryTimeline = categoryResponse;\n\n if (!vm.charts.categoryTimeline) {\n vm.charts.categoryTimeline = {}\n }\n vm.charts.categoryTimeline.apiResponse = response;\n setTimeout(function () { d3.selectAll('.nvtooltip').style('opacity', 0); }, 500);\n }, 1);\n\n }\n\n function setSentimentTimelineChart(response, sentimentTrendDate) {\n var sentimentResponse = ReportTemplate1_2ChartParserService.parseNewSentimentTimelineChart(response ? JSON.parse(JSON.stringify(response)) : null, vm.dashboardModuleId, vm.targetChartTimelineData ? JSON.parse(JSON.stringify(vm.targetChartTimelineData)) : null, vm.hasSentimentModule, vm.afterDatePicker.startDate, vm.afterDatePicker.endDate, sentimentTrendDate);\n\n if (sentimentResponse) {\n vm.sentimentInsufficientTimelineData = sentimentResponse.insufficientTimelineData;\n if (vm.sentimentInsufficientTimelineData)\n vm.charts.sentimentTimeline = sentimentResponse;\n }\n setTimeout(function () {\n vm.charts.sentimentTimeline = sentimentResponse\n\n if (!vm.charts.sentimentTimeline) {\n vm.charts.sentimentTimeline = {}\n }\n vm.charts.sentimentTimeline.apiResponse = response;\n setTimeout(function () { d3.selectAll('.nvtooltip').style('opacity', 0); }, 500);\n }, 1);\n\n }\n\n function setMultiBarChart(response) {\n if (response) {\n vm.charts.multiBar = ReportTemplate1_2ChartParserService.parseMultiBarChart(response, vm.dashboardModuleId, vm.categoryAlieses, vm.targetChartData ? vm.targetChartData : null, vm.hasSentimentModule);\n }\n if(!vm.charts.multiBar){\n vm.charts.multiBar = {}\n }\n vm.charts.multiBar.apiResponse = response;\n }\n\n function setBubbleChart(response) {\n var result = ReportTemplate1_2ChartParserService.parseBubbleChart(response, vm.dashboardModuleId, vm.categoryAlieses, vm.targetChartData ? vm.targetChartData : null,vm.hasSentimentModule);\n if (result && result.data) {\n vm.bubbleChartData = result.data\n vm.bubbleChartData.hasSentimentModule = vm.hasSentimentModule;\n vm.bubbleChartData.level = findChartLevel()-1 ;\n }\n }\n\n function removeDocuments($event) {\n ReportService.deleteReportData($scope, $state, $event, vm.report, vm.parameters, vm.data.count);\n }\n\n function reevaluateReport($event) {\n ReportService.reevaluatePrompt($scope, $event, vm.report.id, user, vm.documentNickname);\n }\n\n function deleteReport($event) {\n if (vm.isFlatModeActive)\n ReportService.warning($scope, $event, $translate.instant(\"REPORT.ERRORS.ACTIVE_WEB_SOURCE_HEADER\"), $translate.instant(\"REPORT.ERRORS.ACTIVE_WEB_SOURCE_BODY\"));\n else\n ReportService.deleteReport($scope, $state, $event, vm.report);\n }\n\n\n //export starts\n function exportReport(type,$event) {\n ReportService.exportPrompt($scope, $event, vm.report.id, user, vm.parameters, type, vm.data.count);\n }\n\n function downloadJquery(url, data, method) {\n if (url && data) {\n data = typeof data === 'string' ? data : jQuery.param(data);\n var inputs = '';\n jQuery.each(data.split('&'), function () {\n var pair = this.split('=');\n if (pair[0] == \"category%5B%5D\" || pair[0] == \"filter%5B%5D\") {\n inputs += '';\n } else {\n inputs += '';\n }\n });\n jQuery('
' + inputs + '
')\n .appendTo('body').submit().remove();\n }\n }\n\n //export ends\n\n //Key events starts\n angular.element($window).bind('keydown', function (e) {\n if (e.keyCode == 16) {\n vm.ctrlKeyPressing = true;\n vm.groupCtrlCount = vm.groupCtrlCount + 1;\n }\n });\n\n angular.element($window).bind('keyup', function (e) {\n if (e.keyCode == 16) {\n vm.ctrlKeyPressing = false;\n //vm.groupCtrlCount = Math.floor(Math.random() * 10000) + 1;\n //search();\n }\n });\n //Key events ends\n\n //Bookmarks starts\n function saveBookmark(title, event) {\n var request = {\n url: $location.search().query,\n title: title,\n reportId: vm.reportId\n };\n event.target.disabled = true;\n api.report.saveBookmark(request)\n .then(function (res) {\n vm.allBookmarks = res;\n vm.bookmarks = vm.allBookmarks.filter(function (k) { return k.userName != null });\n vm.generalBookmarks = vm.allBookmarks.filter(function (k) { return k.userName == null });\n vm.newBookmarkTitle = null;\n event.target.disabled = false;\n }, function (response) {\n console.log(response);\n event.target.disabled = false;\n })\n }\n\n //General ookmarks starts\n this.saveGeneralBookmark = function (title, event) {\n var request = {\n url: $location.search().query,\n title: title,\n reportId: vm.reportId\n };\n event.target.disabled = true;\n api.report.saveGeneralBookmark(request)\n .then(function (res) {\n vm.allBookmarks = res;\n vm.bookmarks = vm.allBookmarks.filter(function (k) { return k.userName != null });\n vm.generalBookmarks = vm.allBookmarks.filter(function (k) { return k.userName == null });\n vm.newBookmarkTitle = null;\n vm.newGeneralBookmarkTitle = null;\n event.target.disabled = false;\n }, function (response) {\n console.log(response);\n event.target.disabled = false;\n })\n }\n\n function deleteBookmark(id, event) {\n var request = {\n reportId: vm.reportId,\n id: id\n };\n event.target.disabled = true;\n api.report.deleteBookmark(request)\n .then(function (res) {\n vm.allBookmarks = res;\n vm.bookmarks = vm.allBookmarks.filter(function (k) { return k.userName != null });\n vm.generalBookmarks = vm.allBookmarks.filter(function (k) { return k.userName == null });\n event.target.disabled = false;\n }, function (response) {\n console.log(response);\n })\n }\n\n function goToBookmark(query) {\n $location.search('query', query);\n if ($location.search().query) {\n setQueryParameters();\n search();\n }\n }\n\n //Bookmarks ends\n\n //date component starts\n function refreshDatePickersFormat() {\n var afterValue = getDatePickerValue(vm.afterDatePicker);\n var beforeValue = getDatePickerValue(vm.beforeDatePicker);\n var dateRanges = {};\n if (vm.languageDatePicker == 1)\n dateRanges = vm.dateRanges;\n else if (vm.languageDatePicker == 2)\n dateRanges = vm.dateRangesEn;\n\n Object.keys(dateRanges).forEach(function (k) {\n if (dateRanges[k][0].format('DD/MM/YYYY') == moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') && dateRanges[k][1].format('DD/MM/YYYY') == moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY')) {\n afterValue = k;\n }\n if (dateRanges[k][0].format('DD/MM/YYYY') == moment(vm.beforeDatePicker.startDate).format('DD/MM/YYYY') && dateRanges[k][1].format('DD/MM/YYYY') == moment(vm.beforeDatePicker.endDate).format('DD/MM/YYYY')) {\n beforeValue = k;\n }\n })\n if (afterValue) {\n $('#afterreportrange').val(afterValue);\n $('#afterreportrange2').val(afterValue);\n } else {\n $('#afterreportrange').val(moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY'));\n $('#afterreportrange2').val(moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY'));\n }\n if (beforeValue) {\n $('#beforereportrange').val(beforeValue);\n $('#beforereportrange2').val(beforeValue);\n } else {\n $('#beforereportrange').val(moment(vm.beforeDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.beforeDatePicker.endDate).format('DD/MM/YYYY'));\n $('#beforereportrange2').val(moment(vm.beforeDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.beforeDatePicker.endDate).format('DD/MM/YYYY'));\n }\n }\n\n function getDatePickerValue(picker) {\n var value = null;\n if (picker && picker.startDate && picker.endDate) {\n if (picker.startDate.getDate() == 1 && picker.startDate.getMonth() + 1 == 1 &&\n picker.endDate.getDate() == 31 && picker.endDate.getMonth() + 1 == 3 &&\n picker.startDate.getYear() == picker.endDate.getYear()) {\n value = \"Q1 (\" + picker.startDate.getFullYear() + \")\";\n } else if (picker.startDate.getDate() == 1 && picker.startDate.getMonth() + 1 == 4 &&\n picker.endDate.getDate() == 30 && picker.endDate.getMonth() + 1 == 6 &&\n picker.startDate.getYear() == picker.endDate.getYear()) {\n value = \"Q2 (\" + picker.startDate.getFullYear() + \")\";\n } else if (picker.startDate.getDate() == 1 && picker.startDate.getMonth() + 1 == 7 &&\n picker.endDate.getDate() == 30 && picker.endDate.getMonth() + 1 == 9 &&\n picker.startDate.getYear() == picker.endDate.getYear()) {\n value = \"Q3 (\" + picker.startDate.getFullYear() + \")\";\n } else if (picker.startDate.getDate() == 1 && picker.startDate.getMonth() + 1 == 10 &&\n picker.endDate.getDate() == 31 && picker.endDate.getMonth() + 1 == 12 &&\n picker.startDate.getYear() == picker.endDate.getYear()) {\n value = \"Q4 (\" + picker.startDate.getFullYear() + \")\";\n }\n }\n return value;\n }\n\n vm.range = function (min, max, step) {\n step = step || 1;\n var input = [];\n var i = min;\n if (step < 1) {\n for (; i <= max; i += step) {\n input.push(i.toFixed(2));\n }\n } else {\n for (; i <= max; i += step) {\n input.push(i.toString());\n }\n }\n return input;\n };\n\n //date component ends\n\n function isNullArray(array) {\n if (!array || array.length < 1)\n return true;\n else\n return false;\n }\n\n vm.datePickerLanguage = {\n 'Mon': 'Pzt',\n 'Tue': 'Sal',\n 'Wed': 'Çar',\n 'Thu': 'Per',\n 'Fri': 'Cum',\n 'Sat': 'Cmt',\n 'Sun': 'Paz',\n 'This Week': 'Bu Hafta',\n \"January\": \"Ocak\",\n \"February\": \"Şubat\",\n \"March\": \"Mart\",\n \"April\": \"Nisan\",\n \"May\": \"Mayıs\",\n \"June\": \"Haziran\",\n \"July\": \"Temmuz\",\n \"August\": \"Ağustos\",\n \"September\": \"Eylül\",\n \"October\": \"Ekim\",\n \"November\": \"Kasım\",\n \"December\": \"Aralık\"\n };\n\n function buildToggler(navID) {\n return function () {\n // Component lookup should always be available since we are not using `ng-if`\n $mdSidenav(navID)\n .toggle()\n .then(function () {\n $log.debug(\"toggle \" + navID + \" is done\");\n });\n };\n }\n\n\n vm.categoryTextTooltip = \"\";\n vm.colors = ['blue-bg', 'blue-grey-bg', 'orange-bg', 'pink-bg', 'purple-bg'];\n vm.colors = [\n [\"#1f77b4\", \"#fff\"],\n [\"#aec7e8\", \"#000\"],\n [\"#ff7f0e\", \"#000\"],\n [\"#ffbb78\", \"#000\"],\n [\"#2ca02c\", \"#fff\"],\n [\"#98df8a\", \"#000\"],\n [\"#d62728\", \"#fff\"],\n [\"#ff9896\", \"#000\"],\n [\"#9467bd\", \"#000\"],\n [\"#c5b0d5\", \"#000\"],\n [\"#8c564b\", \"#fff\"],\n [\"#c49c94\", \"#000\"],\n [\"#e377c2\", \"#000\"],\n [\"#f7b6d2\", \"#000\"],\n [\"#7f7f7f\", \"#fff\"],\n [\"#c7c7c7\", \"#000\"],\n [\"#bcbd22\", \"#000\"],\n [\"#dbdb8d\", \"#000\"],\n [\"#17becf\", \"#000\"],\n [\"#9edae5\", \"#000\"]\n ];\n\n vm.charts = {\n categoryTimeline: {},\n sentimentTimeline: {},\n multiBar: {}\n }\n\n vm.dateRanges = {\n 'Bugün': [moment(), moment()],\n 'Dün': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],\n 'Son 7 Gün': [moment().subtract(6, 'days'), moment()],\n 'Son 30 Gün': [moment().subtract(29, 'days'), moment()],\n 'Bu Ay': [moment().startOf('month'), moment().endOf('month')],\n 'Geçen Ay': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')],\n 'Bu Yıl': [moment().startOf('year'), moment().endOf('year')],\n 'Geçen Yıl (Tümü)': [moment().startOf('year').subtract(1, 'y'), moment().endOf('year').subtract(1, 'y')],\n 'Bu Yıl (YTD)': [moment().startOf('year'), moment().endOf('day')],\n 'Geçen Yıl (YTD)': [moment().startOf('year').subtract(1, 'y'), moment().endOf('day').subtract(1, 'y')],\n 'Önceki Yıl (Tümü)': [moment().startOf('year').subtract(2, 'y'), moment().endOf('year').subtract(2, 'y')]\n } \n\n vm.dateRanges['Q1 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 0, 1)), moment(new Date(moment().year(), 2, 31))];\n vm.dateRanges['Q2 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 3, 1)), moment(new Date(moment().year(), 5, 30))];\n vm.dateRanges['Q3 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 6, 1)), moment(new Date(moment().year(), 8, 30))];\n vm.dateRanges['Q4 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 9, 1)), moment(new Date(moment().year(), 11, 31))];\n vm.dateRanges['Q1 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 0, 1)), moment(new Date(moment().year() - 1, 2, 31))];\n vm.dateRanges['Q2 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 3, 1)), moment(new Date(moment().year() - 1, 5, 30))];\n vm.dateRanges['Q3 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 6, 1)), moment(new Date(moment().year() - 1, 8, 30))];\n vm.dateRanges['Q4 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 9, 1)), moment(new Date(moment().year() - 1, 11, 31))];\n\n function getNowPeriod() {\n var now = moment();\n var year = now.year();\n var month = now.month();\n var quarter = \"\";\n if (month <= 2) {\n quarter = \"Q1\";\n } else if (month <= 5) {\n quarter = \"Q2\";\n } else if (month <= 8) {\n quarter = \"Q3\";\n } else {\n quarter = \"Q4\";\n }\n return quarter + \"-\" + year;\n }\n\n function getPreviousPeriod(period) {\n var year = parseInt(period.substring(3, 7));\n var quarter = parseInt(period.substring(1, 2));\n\n if (quarter == 1) {\n quarter = 4;\n year -= 1;\n } else {\n quarter -= 1;\n }\n\n return \"Q\" + quarter + \"-\" + year;\n }\n\n function generateComparationPeriods() {\n var periodList = [];\n var nowPeriod = getNowPeriod();\n vm.selectedPeriod = getPreviousPeriod(nowPeriod) + \" / \" + nowPeriod;\n for (var i = 0; i < 4; i++) {\n periodList.push(getPreviousPeriod(nowPeriod) + \" / \" + nowPeriod);\n nowPeriod = getPreviousPeriod(nowPeriod);\n }\n return periodList;\n }\n\n vm.comparationPeriods = generateComparationPeriods();\n\n vm.dateRangesEn = {\n 'Today': [moment(), moment()],\n 'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],\n 'Last 7 Days': [moment().subtract(6, 'days'), moment()],\n 'Last 30 Days': [moment().subtract(29, 'days'), moment()],\n 'This Month': [moment().startOf('month'), moment().endOf('month')],\n 'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')],\n 'This Year': [moment().startOf('year'), moment().endOf('year')],\n 'Last Year (All)': [moment().startOf('year').subtract(1, 'y'), moment().endOf('year').subtract(1, 'y')],\n 'This Year (YTD)': [moment().startOf('year'), moment().endOf('day')],\n 'Last Year (YTD)': [moment().startOf('year').subtract(1, 'y'), moment().endOf('day').subtract(1, 'y')],\n 'Previous Year (All)': [moment().startOf('year').subtract(2, 'y'), moment().endOf('year').subtract(2, 'y')]\n } \n\n vm.dateRangesEn['Q1 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 0, 1)), moment(new Date(moment().year(), 2, 31))];\n vm.dateRangesEn['Q2 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 3, 1)), moment(new Date(moment().year(), 5, 30))];\n vm.dateRangesEn['Q3 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 6, 1)), moment(new Date(moment().year(), 8, 30))];\n vm.dateRangesEn['Q4 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 9, 1)), moment(new Date(moment().year(), 11, 31))];\n vm.dateRangesEn['Q1 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 0, 1)), moment(new Date(moment().year() - 1, 2, 31))];\n vm.dateRangesEn['Q2 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 3, 1)), moment(new Date(moment().year() - 1, 5, 30))];\n vm.dateRangesEn['Q3 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 6, 1)), moment(new Date(moment().year() - 1, 8, 30))];\n vm.dateRangesEn['Q4 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 9, 1)), moment(new Date(moment().year() - 1, 11, 31))];\n\n function createDateComponentTurkish(id, startDate, endDate) {\n $(id).daterangepicker({\n startDate: moment(startDate).toDate(),\n endDate: moment(endDate).toDate(),\n ranges: vm.dateRanges,\n opens: 'left',\n //alwaysShowCalendars: true,\n //autoUpdateInput: false,\n //ranges: createQuarters(),\n locale: {\n format: 'DD/MM/YYYY',\n applyLabel: \"Uygula\",\n cancelLabel: \"Vazgeç\",\n \"fromLabel\": \"Dan\",\n \"toLabel\": \"a\",\n \"customRangeLabel\": \"Seç\",\n \"daysOfWeek\": [\n \"Pz\",\n \"Pt\",\n \"Sl\",\n \"Çr\",\n \"Pr\",\n \"Cm\",\n \"Ct\"\n ],\n \"monthNames\": [\n \"Ocak\",\n \"Şubat\",\n \"Mart\",\n \"Nisan\",\n \"Mayıs\",\n \"Haziran\",\n \"Temmuz\",\n \"Ağustos\",\n \"Eylül\",\n \"Ekim\",\n \"Kasım\",\n \"Aralık\"\n ],\n \"firstDay\": 1\n }\n //ranges: createQuarters()\n }, refreshDatePickersFormat);\n }\n\n function createDateComponentEnglish(id, startDate, endDate) {\n $(id).daterangepicker({\n startDate: moment(startDate).toDate(),\n endDate: moment(endDate).toDate(),\n ranges: vm.dateRangesEn,\n opens: 'left',\n //alwaysShowCalendars: true,\n //autoUpdateInput: false,\n //ranges: createQuarters(),\n locale: {\n format: 'DD/MM/YYYY',\n applyLabel: \"Apply\",\n cancelLabel: \"Cancel\",\n \"fromLabel\": \"from\",\n \"toLabel\": \"to\",\n \"customRangeLabel\": \"Choose\",\n \"daysOfWeek\": [\n \"Sn\",\n \"Mn\",\n \"Tu\",\n \"Wn\",\n \"Th\",\n \"Fr\",\n \"St\"\n ],\n \"monthNames\": [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\"\n ],\n \"firstDay\": 1\n }\n //ranges: createQuarters()\n }, refreshDatePickersFormat);\n }\n\n }\n\n app.directive('ngRightClick', function ($parse) {\n return function (scope, element, attrs) {\n var fn = $parse(attrs.ngRightClick);\n element.bind('contextmenu', function (event) {\n scope.$apply(function () {\n event.preventDefault();\n fn(scope, { $event: event });\n });\n });\n };\n });\n\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.report')\n .controller('ReportDashboardTemplate1', ReportDashboardTemplate1);\n\n /** @ngInject */\n function ReportDashboardTemplate1($rootScope, $scope, $state, $translate, $window,\n $stateParams, $log, api, $q, ReportService, ReportQueryParserService, ReportTemplate1_2ChartParserService, ReportTemplate1ChartParserService, $$report, $location, $mdSidenav, base64, user, toastService, $settings, $utils, appSettings, $compile) {\n\n var vm = this;\n vm.translate = $translate;\n if (!$location.search().query && ReportService.getQuery($$report.id) != null) {\n $location.search('query', ReportService.getQuery($$report.id).query);\n }\n moment.locale('tr');\n vm.languageDatePicker = $translate.use() === \"tr\" ? 1 : 2;\n vm.isDatePickerCreatorStarted = false;\n vm.reportSettings = $$report.reportSettings;\n vm.charts = {\n categoryTimeline: {},\n sentimentTimeline: {},\n attributeBasedCategory: { active: false, settings: null, data: null },\n reportAttributeScore: { active: false, settings: null, data: null}\n }\n \n vm.documentNickname = $translate.use() == \"tr\" ? vm.reportSettings.commonSettings.documentNicknameTr : vm.reportSettings.commonSettings.documentNicknameEn;\n vm.language = $translate.use();\n setInterval(function () { vm.language = $translate.use(); }, 100);\n $scope.$watch('vm.language', function () {\n vm.documentNickname = $translate.use() == \"tr\" ? vm.reportSettings.commonSettings.documentNicknameTr : vm.reportSettings.commonSettings.documentNicknameEn;\n if ($$report.hasTrainedModule) {\n setChartCategoryAliases();\n if ($translate.use() == \"tr\") {\n vm.languageDatePicker = 1;\n setTimeout(function () { createDatePicker(); }, 200);\n } else if ($translate.use() == \"en\") {\n vm.languageDatePicker = 2;\n setTimeout(function () { createDatePicker(); }, 200);\n }\n setSentimentTimelineChart(getRangeResponseByTrendDate(vm.catTrendDate));\n\n setCategoryTimelineChart(getRangeResponseByTrendDate(vm.catTrendDate), vm.catTrendType, vm.catTrendDate)\n if (vm.gaugeCategoryData != null) {\n setGaugeChart(vm.gaugeCategoryData.apiResponse);\n }\n if (vm.confusions != null) {\n setConfusions(vm.confusions.apiResponse);\n }\n }\n });\n \n vm.sideNavEnabled = true;\n vm.reportFields = $$report.reportFields;\n vm.settings = $settings;\n vm.reportModules = $$report.reportModules;\n vm.reportModuleIds = vm.reportModules.map(function (k) {\n return k.moduleId;\n });\n vm.activeSources = appSettings.activeSources;\n vm.queueActive = appSettings.queueActive;\n vm.isFlatModeActive = false;\n vm.selectedDashboardTemplate = $stateParams.selectedDashboard ? $stateParams.selectedDashboard : $$report.selectedDashboard ?$$report.selectedDashboard: $$report.dashboardTemplate ? $$report.dashboardTemplate : 1;\n vm.hasSentimentModule = vm.reportModules.filter(function(r){return r.moduleTypeId ==5 | r.moduleTypeId ==7; }).length>0;\n vm.report = $$report;\n vm.categoryAlieses = []; //$$report.categoryAliases;\n //vm.reportCookie = $cookies.get(\"reports\") ? JSON.parse($cookies.get(\"reports\")).filter(function (r) { return r.id == vm.report.id; })[0] : null;\n vm.userSettings = $settings.reportSettingsList ? $settings.reportSettingsList.filter(function (r) { return r.reportId == vm.report.id; })[0] : null;\n vm.gaugeBarRefresh = false;\n vm.categories = $$report.moduleCategories;\n vm.allBookmarks = $$report.bookmarks;\n vm.bookmarks = vm.allBookmarks.filter(function (k) { return k.userName != null });\n vm.generalBookmarks = vm.allBookmarks.filter(function (k) { return k.userName == null });\n vm.keywords = [];\n vm.nonCategorizedKeywords = [];\n vm.stopWords = [];\n vm.stopLabels = [];\n vm.isNonCatKeywordRequestIsDone = false;\n vm.keywordDocumentLimit = 100;\n vm.deletedKeywords = [];\n vm.deletedNoncategorizedKeywords = [];\n vm.breadCrumbs = [];\n vm.confusions = {\n columns: [],\n rows: []\n };\n vm.lastConfusionSort = null;\n vm.confusionSortItem = \"percent\";\n vm.attributeBasedCategorySortItem = \"value\";\n vm.reportAttributeScoreSortItem = \"value\";\n vm.reportAttributeScoreSortItemOrder = 1;\n vm.dashboardClassificationModule = $stateParams.dashboardClassificationModule;\n vm.noTrainedModule = !($$report.hasTrainedModule);\n vm.user = user;\n vm.dashboardModuleId = $stateParams.dashboardModuleId;\n user.moduleWorkspace = vm.report.workspaceId;\n $rootScope.selectedWorkspaceId = vm.report.workspaceId;\n vm.reportId = $stateParams.id;\n vm.keywordChartFlexValue = 50;\n vm.gaugeCategoryData = [];\n vm.targetChartTimelineData = null;\n vm.targetChartData = null;\n vm.paramSearchByDate = $stateParams.searchByDate == undefined ? 1 : $stateParams.searchByDate;\n vm.parameters = {\n query: null,\n date: null,\n startDate: null,\n endDate: null,\n searchByDate: vm.paramSearchByDate,\n sort: null,\n gap: null,\n row: 10,\n start: 0,\n filter: [],\n category: [],\n facet: [],\n feedback: null,\n assignment: null,\n highlight: false,\n defaultFacet: true,\n patternFilter: [],\n showSimilar: false\n };\n vm.data = {\n facets: []\n };\n vm.filterChips = ReportService.getFilterChips(vm.reportId, vm.reportSettings.commonSettings.filterChips);\n vm.patternFilters = ReportService.getPatternFilters(vm.reportId);\n /*vm.afterDatePicker = {\n startDate: vm.report.dates && vm.report.dates.startDate ? moment(vm.report.dates.startDate).toDate() : null,\n endDate: vm.report.dates && vm.report.dates.endDate ? moment(vm.report.dates.endDate).toDate() : null\n };*/\n vm.afterDatePicker = {\n startDate: null,\n endDate: null\n };\n vm.groupCtrlCount = 1000; //Math.floor(Math.random() * 10000) + 1;\n vm.orBundle = [];\n vm.activeDashboardTemplates = vm.report.activeTemplates;\n vm.activeTemplateSize = 0;\n Object.keys(vm.activeDashboardTemplates).forEach(function (key) {\n if (vm.activeDashboardTemplates[key]) vm.activeTemplateSize = vm.activeTemplateSize + 1;\n })\n vm.matrixXfield = null;\n vm.matrixYfield = null;\n vm.matrixDataRefresh = false;\n vm.matrixFields = {\n data: [],\n fetching: false\n };\n vm.removeMatrixXValue = removeMatrixXValue;\n vm.removeMatrixYValue = removeMatrixYValue;\n vm.searchMatrixData = searchMatrixData;\n vm.rootfacet = null;\n vm.addStopLabelGroup = addStopLabelGroup;\n vm.dateFormat = dateFormat;\n vm.sidenavQuery = null;\n vm.sidenavQueryFunc = sidenavQueryFunc;\n vm.openSaveDefaultReportFiltersDialog = openSaveDefaultReportFiltersDialog;\n vm.addStopWordProcessing = false;\n vm.addStopLabelProcessing = false;\n vm.isOrderActive = false;\n vm.showLogs = false;\n vm.search = search;\n vm.toggleFacetFilter = toggleFacetFilter;\n vm.removeFacetFilter = removeFacetFilter;\n vm.resetFilters = resetFilters;\n vm.exportReport = exportReport;\n vm.removeDocuments = removeDocuments;\n vm.reevaluateReport = reevaluateReport;\n vm.deleteReport = deleteReport;\n vm.uploadReportFeedback = uploadReportFeedback;\n vm.changeDashboard = changeDashboard;\n vm.setPatternFilter = setPatternFilter;\n vm.removePatternFilter = removePatternFilter;\n\n vm.addSingleStopLabel = addSingleStopLabel;\n vm.addStopLabels = addStopLabels;\n vm.addStopWord = addStopWord;\n vm.removeStopLabels = removeStopLabels;\n vm.removeStopWords = removeStopWords;\n vm.stopLabelsToAdd = [];\n vm.stopLabelsToRemove = [];\n vm.stopWordsToRemove = [];\n\n vm.clickBreadCrumb = clickBreadCrumb;\n vm.clickGaugeChartItem = clickGaugeChartItem;\n\n //methods bookmarks\n vm.saveBookmark = saveBookmark;\n vm.deleteBookmark = deleteBookmark;\n vm.goToBookmark = goToBookmark;\n\n //methods date\n vm.changeDate = changeDate;\n vm.clearDate = clearDate;\n\n vm.ctrlKeyPressing = false;\n vm.bookmarkSidenav = buildToggler('right');\n vm.filterSidenav = buildToggler('main-sidenav');\n vm.rightBottomSettingsButton = {\n isOpen: false,\n selectedMode: 'md-scale'\n };\n vm.padLeft = padLeft;\n vm.moreAndMoreCount = 1;\n\n\n function padLeft(number, length) {\n var n = number.toString();\n while (n.length < length) n = '0' + n;\n return n;\n }\n\n vm.showZeros = false;\n\n vm.setShowZero = function(val) {\n vm.showZeros = val;\n }\n\n vm.allZero = function(row){\n if(vm.showZeros) {\n return true;\n }\n var length = row.items.length;\n for(var i=0;i 0) {\n vm.parameters.filterChips = vm.filterChips;\n } else {\n vm.parameters.filterChips = [];\n }\n\n if(vm.charts.reportAttributeScore.active) {\n api.report.getReportAttributeScores(vm.report.id)\n .then(function(response){\n console.log(response);\n setReportAttributeScoreData(response);\n }\n , function (error) {\n $log.error(error);\n })\n }\n \n\n //var copyParamrters = JSON.parse(JSON.stringify(obj));\n copyParameters.defaultFacet = null;\n copyParameters.facetSearch = null;\n copyParameters.gap = null;\n api.report.search(vm.report.id, copyParameters)\n .then(function (response) {\n if (attributeBasedCategoryFacet)\n setAttributeBasedCategoryData(response, attributeBasedCategoryFacet);\n vm.matrixFields.data = ReportTemplate1_2ChartParserService.parseMatrixChart(response, matrixFacet, vm.selectedXMatrixs, vm.selectedYMatrixs);\n vm.matrixFields.fetching = false;\n if (vm.matrixFields.data != null) {\n vm.matrixFields.data.sort(\n function (a, b) {\n if (a.x === b.x) {\n return a.y > b.y ? 1 : -1;;\n }\n return a.x > b.x ? 1 : -1;\n });\n }\n }, function (error) {\n $log.error(error);\n })\n }\n\n $scope.$on(\"$destroy\", function () {\n d3.selectAll('.nvtooltip').style('opacity', 0);\n });\n\n /*\n function refreshChildrenOfReportFields(){\n vm.reportFields.filter(function (r) {\n return r.fieldType == 300 || r.fieldType == 301;\n }).forEach(function (field) {\n var foundedFacets = vm.data.facets.filter(function (f) {\n return f.title === field.fieldTitle;\n })[0];\n if (foundedFacets) {\n field[\"children\"] = foundedFacets.facetList;\n }\n })\n }*/\n\n function getIsFlatModeActive() {\n if (vm.activeSources.includes('WEBSOURCE')) {\n api.source.getReportTemplates(vm.report.id,0,1)\n .then(function (response) {\n if (response.content.length > 0) {\n vm.isFlatModeActive = true;\n }\n },\n function (response) {\n $log.error(response);\n });\n }\n }\n\n function findMatrixFields() {\n if (!isNullArray(vm.matrixXYFields)) return;\n vm.matrixXYFields = vm.reportFields.filter(function (r) {\n return ReportService.isThisFieldType(300, r.fieldType);\n });\n vm.matrixXYFields.forEach(function (field) {\n var foundedFacets = vm.data.facets.filter(function (f) {\n return f.title === field.fieldTitle;\n });\n if (foundedFacets && foundedFacets.length > 0) {\n foundedFacets = foundedFacets[0];\n field[\"children\"] = foundedFacets.facetList;\n }\n })\n\n if (vm.matrixXYFields.filter(function (r) {\n return r.horizontalComparisonField;\n }).length > 0) {\n vm.matrixXfield = vm.matrixXYFields.filter(function (r) {\n return r.horizontalComparisonField;\n })[0];\n }\n if (vm.userSettings && vm.userSettings.matrixXfield) {\n var fieldName = vm.userSettings.matrixXfield;\n vm.matrixXfield = vm.matrixXYFields.filter(function (r) {\n return r.fieldName == fieldName;\n })[0];\n if (vm.userSettings.selectedXMatrixs) {\n vm.selectedXMatrixs = vm.userSettings.selectedXMatrixs;\n }\n }\n if (vm.matrixXYFields.filter(function (r) {\n return r.verticalComparisonField;\n }).length > 0) {\n vm.matrixYfield = vm.matrixXYFields.filter(function (r) {\n return r.verticalComparisonField;\n })[0];\n }\n if (vm.userSettings && vm.userSettings.matrixYfield) {\n var fieldName = vm.userSettings.matrixYfield;\n vm.matrixYfield = vm.matrixXYFields.filter(function (r) {\n return r.fieldName == fieldName;\n })[0];\n if (vm.userSettings.selectedYMatrixs) {\n vm.selectedYMatrixs = vm.userSettings.selectedYMatrixs;\n }\n }\n var i = 0;\n if ((!vm.matrixXfield || vm.matrixXfield == null) && vm.matrixXYFields.length > i) {\n vm.matrixXfield = vm.matrixXYFields[i++];\n }\n if ((!vm.matrixYfield || vm.matrixYfield == null) && vm.matrixXYFields.length > i) {\n vm.matrixYfield = vm.matrixXYFields[i++];\n }\n }\n\n function removeMatrixXValue(item) {\n vm.selectedXMatrixs = vm.selectedXMatrixs.filter(function (i) {\n return i !== item;\n });\n vm.settings.saveUserSettings('selectedXMatrixs', vm.selectedYMatrixs, vm.report.id);\n }\n\n function removeMatrixYValue(item) {\n vm.selectedYMatrixs = vm.selectedYMatrixs.filter(function (i) {\n return i !== item;\n });\n vm.settings.saveUserSettings('selectedYMatrixs', vm.selectedYMatrixs, vm.report.id);\n }\n\n function uploadReportFeedback($event) {\n ReportService.uploadFeedbackPrompt($scope, $event, vm.report.id);\n }\n\n vm.downloadChart = function (id, element, name) {\n if (document.getElementById(id).children[element].tagName != \"svg\") return;\n saveSvgAsPng(document.getElementById(id).children[element], name);\n $utils.saveAudit(vm.reportId, \"REPORT\", \"DOWNLOAD_CHART_IMAGE\", vm.report.name + ' / ' + name);\n $utils.googleAnalyticsSetAction(\"Report\", \"Download Chart Image\", vm.report.name + ' / ' + name);\n }\n\n vm.downloadAmchart = function (id, element, elementt, name) {\n if (!document.getElementById(id) || (document.getElementById(id) && !document.getElementById(id).children[element])) return;\n if (document.getElementById(id).children[element].children[elementt].tagName != \"svg\") return;\n document.getElementById(id).children[element].children[elementt].style.fontSize = \"13px\";\n document.getElementById(id).children[element].children[elementt].style.fontFamily = \"'Roboto', 'Helvetica Neue', 'Arial', sans-serif\";\n saveSvgAsPng(document.getElementById(id).children[element].children[elementt], name);\n $utils.saveAudit(vm.reportId, \"REPORT\", \"DOWNLOAD_CHART_IMAGE\", vm.report.name + ' / ' + name);\n $utils.googleAnalyticsSetAction(\"Report\", \"Download Chart Image\", vm.report.name + ' / ' + name);\n }\n\n vm.exportExcel = function (type, tableName, name, fn, dl) {\n var elt = document.getElementById(tableName);\n var wb = XLSX.utils.table_to_book(elt, { sheet: \"Sheet JS\" });\n return dl ?\n XLSX.write(wb, { bookType: type, bookSST: true, type: 'base64' }) :\n XLSX.writeFile(wb, fn || (name + \".\" + (type || 'xlsx')));\n }\n\n vm.exportExcelReportAttributeScore = function(type, name, fn, dl) {\n var rows = [];\n vm.charts.reportAttributeScore.data.rows.forEach(function (row) {\n var rowItem = {};\n rowItem[' '] = row.name;\n row.items.forEach(function (item) {\n rowItem[$translate.instant('REPORT.SCORE.'+item.key)] = vm.numberWithMathFloor(item.value);\n });\n rows.push(rowItem);\n });\n var wb = XLSX.utils.book_new();\n var ws = XLSX.utils.json_to_sheet(rows);\n\n XLSX.utils.book_append_sheet(wb, ws, \"No Header\");\n return dl ?\n XLSX.write(wb, { bookType: type, bookSST: true, type: 'base64' }) :\n XLSX.writeFile(wb, fn || (name + \".\" + (type || 'xlsx')));\n }\n\n vm.exportExcelAttributeBasedCategory = function (type, name, fn, dl) {\n var rows = [];\n vm.charts.attributeBasedCategory.data.rows.forEach(function (row) {\n var rowItem = {};\n rowItem[' '] = row.name;\n row.items.forEach(function (item) {\n if (item.key != 'TOTAL') {\n rowItem[item.key] = item.value;\n rowItem['(%) ' + item.key] = parseFloat(item.percent) * 100;\n } else {\n rowItem[$translate.instant('REPORT.DASHBOARD_TEMPLATE_2.CONFIG.TOTAL')] = item.value;\n rowItem['(%) ' + $translate.instant('REPORT.DASHBOARD_TEMPLATE_2.CONFIG.TOTAL')] = parseFloat(item.percent) * 100;\n }\n });\n rows.push(rowItem);\n });\n var wb = XLSX.utils.book_new();\n var ws = XLSX.utils.json_to_sheet(rows);\n\n XLSX.utils.book_append_sheet(wb, ws, \"No Header\");\n return dl ?\n XLSX.write(wb, { bookType: type, bookSST: true, type: 'base64' }) :\n XLSX.writeFile(wb, fn || (name + \".\" + (type || 'xlsx')));\n }\n \n function sidenavQueryFunc(){\n if (vm.sidenavQuery == \"\") {\n vm.data = JSON.parse(JSON.stringify(vm.dataCopy));\n vm.parameters.facetSearch = null;\n } else {\n vm.parameters.facetSearch = vm.sidenavQuery;\n vm.sidenavQueryFuncLoading = true;\n api.report.search(vm.report.id, vm.parameters)\n .then(function (response) {\n vm.data.facets = response.facets;\n vm.sidenavQueryFuncLoading = false;\n vm.data.facetSize = 10;\n vm.data.facets.forEach(function (f) {\n f[\"size\"] = 10;\n f[\"showMoreAndMore\"] = f.facetList && f.facetList.length >= 10 ? true : false;\n f[\"allFacets\"] = f.facetList && f.facetList.length > 10 ? true : false;\n });\n\n }, function (err) {\n $log.error(err);\n })\n }\n }\n\n function openSaveDefaultReportFiltersDialog($event){\n ReportService.showSaveReportFiltersDialog($scope, $event, vm.filterChips, vm.report.id);\n }\n\n vm.filteredFacets = {};\n\n function setFilteredFacets() {\n vm.filteredFacets = {};\n for (var i = 0; i < vm.filterChips.length; i++) {\n if (vm.filteredFacets[vm.filterChips[i].titleKey] != null) {\n vm.filteredFacets[vm.filterChips[i].titleKey].push(vm.filterChips[i]);\n } else {\n var childs = [];\n childs.push(vm.filterChips[i]);\n vm.filteredFacets[vm.filterChips[i].titleKey] = childs;\n }\n }\n }\n\n function toggleFacetFilter(child, item, $event) {\n if (!vm.sideNavEnabled) return;\n /*\n if (JSON.stringify(vm.filterChips).length + JSON.stringify(ReportQueryParserService.setNormalFacetFilters(vm.filterChips)).length > 1700) {\n toastService.serverError($translate.instant('REPORT.ERRORS.FILTER_LIMIT'))\n return;\n }*/\n if (ReportService.isThisFieldType(300, item.type) || item.type == 700 || item.type == 800 || item.type == 200) {\n if (!vm.ctrlKeyPressing) {\n //var keyValue = generateKeyValuePairFilter(child.fieldName, child.value);\n var filterChip = {\n key: item.title,\n value: child.value,\n type: item.type,\n group: -1,\n operand: \"AND\",\n titleKey: item.title\n }\n vm.filterChips.push(filterChip);\n\n var foundedFilters = vm.filterChips.filter(function(chip){\n return chip.key == item.title;\n });\n if(foundedFilters && foundedFilters.length > 1){\n //var group = Math.floor(Math.random() * 10000) + 1;\n vm.groupCtrlCount = vm.groupCtrlCount + 1;\n foundedFilters.forEach(function(chip){\n chip.group = vm.groupCtrlCount; //group;\n chip.operand = \"OR\";\n });\n }\n //search();\n\n // searchDateRanges();\n }\n if (vm.ctrlKeyPressing) {\n var filterCtrlChip = {\n key: item.title,\n value: child.value,\n type: item.type,\n group: vm.groupCtrlCount,\n operand: \"OR\",\n titleKey: item.title\n }\n vm.filterChips.push(filterCtrlChip);\n }\n item.facetList = item.facetList.filter(function(c){ return c !== child;});\n }\n\n if (item.type >= 100 && item.type < 200) {\n if (!vm.ctrlKeyPressing) {\n vm.sideNavEnabled = false;\n var level = null;\n if (item.key === vm.dashboardModuleId) {\n level = findChartLevel();\n }\n if(child.parentString){\n var foundedSameLevelFilter = vm.filterChips.filter(function(chip) {return chip.key == item.key && chip.parentString && chip.parentString.split(\"->\").length == child.parentString.split(\"->\").length;})[0];\n if(foundedSameLevelFilter)\n level = level - 1;\n }else{\n var foundedSameLevelFilter = vm.filterChips.filter(function(chip) {return chip.key == item.key && typeof chip.parentString === 'undefined' && typeof child.parentString === 'undefined';})[0];\n if(foundedSameLevelFilter)\n level = level - 1;\n }\n var catFilterChip = {\n key: item.key,\n value: child.value,\n type: 100,\n group: -1,\n operand: \"AND\",\n parentString: child.parentString,\n titleKey: item.title,\n level: level,\n aspectSentiment: child.sentimentFilter ? child.sentimentFilter : \"\" \n }\n vm.filterChips.push(catFilterChip);\n search();\n } else {\n var catCtrlFilterChip = {\n key: item.key,\n value: child.value,\n type: 100,\n group: vm.groupCtrlCount,\n operand: \"OR\",\n parentString: child.parentString,\n titleKey: item.title\n }\n vm.filterChips.push(catCtrlFilterChip);\n }\n item.facetList = item.facetList.filter(function (c) { return c !== child; });\n }\n setFilteredFacets();\n }\n\n function removeFacetFilter(item) {\n vm.filterChips = vm.filterChips.filter(function (f) {\n return f != item;\n });\n\n if(item.type == 600){\n vm.parameters.query = null;\n }\n if (item.level && item.level > 0) {\n var removingFilters = vm.filterChips.filter(function (f) {\n return f.level > item.level;\n });\n if (removingFilters && removingFilters.length > 0) {\n removingFilters.forEach(function (r) {\n vm.filterChips = vm.filterChips.filter(function (f) {\n return f != r;\n });\n })\n }\n }\n search();\n }\n\n function clickGaugeChartItem(item,lastBreadCrumb,gaugeCategoryData) {\n vm.gaugeBarRefresh = !vm.gaugeBarRefresh;\n if(gaugeCategoryData){\n var lastBreadCrumb = gaugeCategoryData.find(function(x){ return x.category == lastBreadCrumb.value;}); \n if(lastBreadCrumb && (!lastBreadCrumb.facet.subs || lastBreadCrumb.facets.subs.length==0)){\n return;\n } \n }\n if (!item || !item.facet) return;\n var level = findChartLevel();\n var parentCat = vm.breadCrumbs[vm.breadCrumbs.length - 1];\n if (!parentCat || parentCat.value == item.category || (item.facet && item.facet.parentString && item.facet.parentString === parentCat.parentString)) return;\n var pString = null;\n if (parentCat.level == -1) {\n pString = null;\n } else if (parentCat.parentString) {\n pString = parentCat.parentString + '->' + parentCat.value;\n } else {\n pString = parentCat.value;\n }\n var catFilterChip = {\n key: vm.dashboardModuleId,\n value: item.facet.value,\n type: 100,\n group: -1,\n operand: \"AND\",\n parentString: pString,\n titleKey: parentCat.value,\n level: level\n }\n vm.filterChips.push(catFilterChip);\n search();\n //searchDateRanges();\n }\n\n function resetFilters() {\n vm.filteredFacets = {};\n vm.patternFilters = {};\n vm.filterChips = [];\n vm.parameters.query = null;\n search();\n }\n\n function setPatternFilter(key, name) {\n if (vm.patternFilters[key] == '')\n delete vm.patternFilters[key];\n else {\n vm.patternFilters.chips = vm.patternFilters.chips || [];\n var chip = vm.patternFilters.chips.filter(function (item) { return item.key === key; })[0];\n if (chip)\n chip.value = vm.patternFilters[key];\n else\n vm.patternFilters.chips.push({ key: key, name: name, value: vm.patternFilters[key] });\n }\n }\n\n function removePatternFilter(key, name) {\n if (vm.patternFilters[key])\n delete vm.patternFilters[key];\n vm.patternFilters.chips = vm.patternFilters.chips.filter(function (item) {\n return item.key !== key;\n });\n if (vm.patternFilters.postKeys.indexOf(key) != -1)\n search();\n }\n\n function changeDate() {\n vm.parameters.startDate = vm.afterDatePicker.startDate.toISOString().split('.')[0] + \"Z\";\n vm.parameters.endDate = vm.afterDatePicker.endDate.toISOString().split('.')[0] + \"Z\";\n if (vm.parameters.startDate === vm.parameters.endDate) {\n vm.parameters.endDate = moment(vm.parameters.endDate).add(1, 'days').toDate().toISOString().split('.')[0] + \"Z\"\n }\n refreshDatePickersFormat();\n search();\n }\n\n function clearDate() {\n vm.afterDatePicker = {\n startDate: null,\n endDate: null\n };\n vm.parameters.startDate = null;\n vm.parameters.endDate = null;\n vm.datePicker = {};\n search();\n\n if (vm.report.dates && vm.report.dates.startDate && vm.report.dates.endDate) {\n if ($('#afterreportrange').is(':visible')) {\n $('input[id=\"afterreportrange\"]').data('daterangepicker').setEndDate(moment().toDate());\n $('input[id=\"afterreportrange\"]').data('daterangepicker').setStartDate(moment().toDate());\n }\n if ($('#afterreportrange2').is(':visible')) {\n $('input[id=\"afterreportrange2\"]').data('daterangepicker').setEndDate(moment().toDate());\n $('input[id=\"afterreportrange2\"]').data('daterangepicker').setStartDate(moment().toDate());\n }\n }\n\n $('#afterreportrange').val('Tarih');\n $('#afterreportrange2').val('Tarih');\n }\n \n function getMonth(date) {\n var month = date.getMonth() + 1;\n return month < 10 ? '0' + month : '' + month;\n }\n\n function setPatternFilters() {\n vm.parameters.patternFilter = [];\n vm.patternFilters.postKeys = [];\n var excludedKeys = ['postKeys', 'chips'];\n for (var key in vm.patternFilters) {\n if (excludedKeys.indexOf(key) == -1 && vm.patternFilters[key] && vm.patternFilters[key] != '') {\n var patternValue = \"\\\"\" + key + \"\\\":\\\"\" + vm.patternFilters[key] + \"\\\"\";\n vm.parameters.patternFilter.push(patternValue);\n vm.patternFilters.postKeys.push(key);\n }\n }\n }\n\n function storeFilters() {\n ReportService.setPatternFilters(vm.reportId, vm.patternFilters);\n ReportService.setFilterChips(vm.reportId, vm.filterChips);\n setFilteredFacets();\n }\n\n function searchData() {\n if (moment(vm.afterDatePicker.endDate).diff(moment(vm.afterDatePicker.startDate), \"months\", true) <= 2) {\n vm.parameters.gap = \"1DAY\";\n } else {\n vm.parameters.gap = \"1MONTH\";\n }\n if (vm.queueActive)\n vm.parameters.gap = null;\n if (vm.charts) {\n if (vm.charts.sentimentTimeline)\n vm.charts.sentimentTimeline.data = [];\n if (vm.charts.categoryTimeline)\n vm.charts.categoryTimeline.data = [];\n if (vm.charts.multiBar)\n vm.charts.multiBar.data = [];\n }\n var start = Date.now();\n vm.searching = true;\n //if (vm.filterChips && vm.filterChips.length > 0) {\n //vm.parameters.filterChips = vm.filterChips;\n //} else {\n vm.parameters.filterChips = [];\n //}\n vm.filterChips = vm.filterChips.filter(function (item){\n return item.type != 600;\n });\n if(vm.parameters.query && vm.parameters.query.length > 0){\n var filterQueryChip = {\n key: \"content\",\n value: vm.parameters.query,\n type: 600,\n group: -1,\n operand: \"AND\",\n titleKey: \"Query\"\n }\n vm.filterChips.push(filterQueryChip);\n }\n setNormalFacetFilters();\n setCategoryFacetFilters();\n setFacetFieldsQuery();\n setPatternFilters();\n storeFilters();\n vm.parameters.facet = [];\n vm.parameters.defaultFacet = true;\n vm.parameters.facetSearch = null;\n vm.parameters.facetQueries = [];\n vm.parameters.periods = null;\n encodeFilters(vm.parameters);\n if(vm.dashboardClassificationModule){\n setBreadCrumbs();\n }\n vm.parameters.row = 0;\n vm.parameters.start = 0;\n vm.parameters.highlight = false;\n setFacetParams(vm.parameters.facet)\n setFilteredFacets();\n if (vm.showLogs) {\n console.log(vm.parameters);\n }\n\n var searchPromises = [api.report.search(vm.report.id, vm.parameters)];\n $q.all(searchPromises).then(function (results) {\n $utils.googleAnalyticsSetTiming(\"Cumulative Report Search Response\", vm.reportId, Date.now() - start);\n if (vm.showLogs) console.log(results)\n vm.searching = false;\n var afterResponse = results[0];\n vm.afterResponse = results[0];\n vm.data.facets = afterResponse.facets;\n vm.data.localVariables = afterResponse.localVariables;\n setupFacets();\n groupNerFacets()\n vm.data.documents = afterResponse.reportDocumentList;\n vm.data.count = afterResponse.count;\n if(vm.data.count > 0){\n searchMatrixData();\n setGaugeChart(afterResponse)\n //setCategoryGaugeChart(afterResponse);\n setConfusions(afterResponse);\n setRootFacet();\n }\n vm.searching = false;\n vm.sideNavEnabled = true;\n vm.dataCopy = JSON.parse(JSON.stringify(vm.data));\n eliminateFacetFilteredValues();\n vm.timelineResult = results;\n if (!vm.queueActive && results[0].count > 0) {\n setupTimelineFacets(results[0].facets);\n setSentimentTimelineChart(results[0]);\n setCategoryTimelineChart(results[0], vm.catTrendType);\n }\n if (vm.queueActive && getRangeResponseByTrendDate(vm.catTrendDate) && getRangeResponseByTrendDate(vm.catTrendDate).count > 0) {\n setupTimelineFacets(getRangeResponseByTrendDate(vm.catTrendDate).facets);\n setSentimentTimelineChart(getRangeResponseByTrendDate(vm.catTrendDate), vm.catTrendDate);\n setCategoryTimelineChart(getRangeResponseByTrendDate(vm.catTrendDate), vm.catTrendType, vm.catTrendDate);\n }\n measureTimings(start);\n }, function (err) {\n $log.error(err);\n vm.sideNavEnabled = true;\n })\n }\n\n function groupNerFacets() {\n var nerFacets = vm.data.facets.filter(function (k) { return k.key.startsWith('ner_') })\n vm.data.facets = vm.data.facets.filter(function (k) { return !k.key.startsWith('ner_') })\n if (nerFacets.length > 0) {\n var order = nerFacets[0].order;\n nerFacets.forEach(function (k) {\n if (k.order && Number(k.order) < Number(order)) {\n order = k.order;\n }\n })\n nerFacets.sort(function (a, b) {\n return a.order - b.order\n });\n vm.data.facets.push({\n \"key\": \"ner_\",\n \"title\": $translate.instant('SHARED.NAMEDENTITY'),\n \"facets\": nerFacets,\n \"group\": true,\n \"facetList\": [\"a\"],\n \"type\": 250,\n \"order\": order\n })\n }\n sortFacets()\n }\n\n function sortFacets() {\n vm.isOrderActive = vm.data.facets.filter(function (f) {\n return Number(f.order) > 1;\n }).length > 0;\n if (!vm.isOrderActive) {\n vm.data.facets.sort(function (a, b) {\n return a.type - b.type\n });\n } else {\n vm.data.facets.sort(function (a, b) {\n return Number(a.order) - Number(b.order)\n });\n }\n }\n\n function measureTimings(start) {\n if ($('#dashboard1').is(':visible')) { //if the container is visible on the page\n $utils.googleAnalyticsSetTiming('Cumulative Report Page Load', vm.reportId, Date.now() - start)\n } else {\n setTimeout(function(){ measureTimings(start) }, 200); //wait 50 ms, then try again\n }\n }\n\n function setFacetParams(facets) {\n if (!facets) return;\n var facetList = [];\n for (var i = 0; i < facets.length; i++) {\n facetList.push({\n name: facets[i]\n })\n }\n vm.parameters.facet = facetList;\n }\n\n function setRootFacet(){\n if (vm.userSettings && vm.userSettings.rootfacet){\n vm.rootfacet = vm.data.facets.filter(function (f) { return f.key === vm.userSettings.rootfacet;})[0];\n }else{\n var dashboardFacet = vm.reportFields.filter(function(f){return f.dashboardFacet;})[0];\n if (!dashboardFacet) {\n dashboardFacet = vm.reportFields.filter(function (f) { return ReportService.isThisFieldType(300, f.fieldType); })[0];\n if(dashboardFacet){\n vm.rootfacet = vm.data.facets.filter(function(f){ return f.key === dashboardFacet.fieldName;})[0];\n }else{\n vm.rootfacet = null;\n }\n }else{\n vm.rootfacet = vm.data.facets.filter(function(f){ return f.key === dashboardFacet.fieldName;})[0];\n }\n }\n }\n\n function eliminateFacetFilteredValues(){\n if(vm.parameters.filterChips && vm.parameters.filterChips.length > 0){\n vm.parameters.filterChips.forEach(function(filteredValue){\n var facet = vm.data.facets.filter(function(facet){ return facet.title === filteredValue.titleKey; })[0];\n if(facet && facet.facetList){\n facet.facetList = facet.facetList.filter(function(item){ return item.value !== filteredValue.value;});\n }\n })\n }\n }\n\n function setBreadCrumbs() {\n vm.breadCrumbs = [{\n value: vm.dashboardClassificationModule.module.name,\n level: -1\n }];\n var tempLevels = vm.filterChips.filter(function (f) {\n return f.level >= 0 && f.key == vm.dashboardModuleId;\n });\n if (tempLevels && tempLevels.length > 0) {\n var foundedLevels = [];\n var eliminateSameModuleAndLevel = [];\n tempLevels.forEach(function(l){\n var founded = eliminateSameModuleAndLevel.filter(function(item){ return item == l.level; })[0];\n if(!founded){\n eliminateSameModuleAndLevel.push(l.level);\n foundedLevels.push(l);\n }\n })\n foundedLevels.sort(function (f1, f2) {\n return f1.level - f2.level;\n });\n var p = foundedLevels.filter(function(f){ return !f.parentString;})[0]\n if(!p && foundedLevels.length > 0){\n var t = foundedLevels[0];\n foundedLevels.push({\n key:t.key,\n group:t.group,\n level:t.level-1,\n operand:\"AND\",\n type:t.type,\n value:t.titleKey\n });\n }\n foundedLevels.sort(function (f1, f2) {\n return f1.level - f2.level;\n });\n foundedLevels.forEach(function (f) {\n vm.breadCrumbs.push(f);\n });\n }\n }\n\n function clickBreadCrumb(breadCrumb) {\n var removingFilters = vm.filterChips.filter(function (f) {\n return f.level > breadCrumb.level;\n });\n if (removingFilters && removingFilters.length > 0) {\n removingFilters.forEach(function (f) {\n vm.filterChips = vm.filterChips.filter(function (filter) {\n return filter != f;\n });\n })\n }\n search();\n }\n\n\n function findChartLevel() {\n if (!vm.filterChips || vm.filterChips.length == 0) return 1;\n var foundedChips = vm.filterChips.filter(function (c) {\n return c.level >= 0;\n });\n if (foundedChips && foundedChips.length > 0) {\n foundedChips.sort(function (c1, c2) {\n return c1.level - c2.level;\n });\n return foundedChips[foundedChips.length - 1].level + 1;\n }\n return 1;\n }\n\n function showmenu(ev){\n ev.preventDefault(); \n var promises = [ReportService.addStopLabel($scope,$state,ev,ev.target.textContent)];\n $q.all(promises).then(function (results) {\n if(results[0]){\n addStopLabelGroup([ev.target.textContent]);\n }\n }, function (error) {\n $log.error(error);\n\n })\n }\n \n function hidemenu(ev){\n menu.style.top = '-200%';\n menu.style.left = '-200%';\n }\n function findKeywords() {\n vm.keywords = [];\n vm.parameters.highlight = false;\n api.report.keywords(vm.report.id, vm.parameters)\n .then(function (response) {\n var keywords = response.reportKeywords;\n vm.keywordDocumentLimit = response.keywordDocumentLimit;\n var parameters = JSON.parse(JSON.stringify(vm.parameters));\n keywords.forEach(function (k) {\n parameters.query = \"\\\"\" + k.text + \"\\\"\";\n k.parameters = base64.encode(JSON.stringify(parameters));\n k.reportId = vm.report.id;\n k.rightClickFunc = vm.addStopLabelGroup;\n })\n \n vm.keywords = keywords;\n },\n function (response) {\n $log.error(response);\n });\n }\n\n function findNonCategorizedKeywords() {\n vm.parameters.highlight = false;\n vm.nonCategorizedKeywords = [];\n api.report.nonCategorizedKeywords(vm.report.id, vm.parameters)\n .then(function (response) {\n var nonCategorizedKeywords = response.reportKeywords;\n var parameters = JSON.parse(JSON.stringify(vm.parameters));\n if (nonCategorizedKeywords.length == 0) {\n vm.keywordChartFlexValue = 100;\n } else {\n vm.keywordChartFlexValue = 50;\n }\n nonCategorizedKeywords.forEach(function (k) {\n parameters.query = \"\\\"\" + k.text + \"\\\"\";\n parameters.filterChips = [{ \"key\": \"-category_m\" + vm.dashboardModuleId + \"_ss\", \"value\": \"*\", \"type\": 300, \"group\": -1, \"operand\": \"AND\", \"titleKey\": \"- \" + $stateParams.dashboardModuleName }];\n k.parameters = base64.encode(JSON.stringify(parameters));\n k.reportId = vm.report.id;\n k.rightClickFunc = vm.addStopLabelGroup;\n })\n \n vm.nonCategorizedKeywords = nonCategorizedKeywords;\n },\n function (response) {\n $log.error(response);\n });\n }\n\n function findStopWords() {\n api.report.getStopWords(vm.report.id)\n .then(function (response) {\n vm.stopWords = response.map(function (f) { return f.word; });\n vm.getStopWordsProcessing = false;\n },\n function (response) {\n $log.error(response);\n });\n }\n\n function findStopLabels() {\n api.report.getStopLabels(vm.report.id)\n .then(function(r){\n vm.stopLabels = r.map(function (f) { return f.name; });\n vm.getStopLabelsProcessing = false;\n },\n function (response) {\n $log.error(response);\n });\n }\n\n vm.findStopLabelsAndStopWords = function () {\n if (!vm.isFindStopLabelsAndStopWordsProcessDone) {\n vm.getStopWordsProcessing = true;\n vm.getStopLabelsProcessing = true;\n findStopWords();\n findStopLabels();\n }\n vm.isFindStopLabelsAndStopWordsProcessDone = true;\n }\n\n function addStopWord() {\n vm.stopWordToAdd = vm.stopWordToAdd != null ? vm.stopWordToAdd.trim() : vm.stopWordToAdd;\n if (vm.stopWordToAdd == null || vm.stopWordToAdd == \"\" || vm.stopWords.includes(vm.stopWordToAdd)) {\n if (vm.stopWordToAdd == \"\") toastService.serverError($translate.instant('REPORT.KEYWORD_CHART.EMPTY_STOPWORDS'));\n vm.stopWordToAdd = '';\n return;\n }\n vm.keywords = vm.keywords.filter(function(y){\n var regexp = new RegExp('(\\\\s|^)'+vm.stopWordToAdd+ \"(\\\\s|$)\",'i')\n return !y.text.match(regexp);\n })\n vm.nonCategorizedKeywords = vm.nonCategorizedKeywords.filter(function (y) {\n var regexp = new RegExp('(\\\\s|^)' + vm.stopWordToAdd + \"(\\\\s|$)\", 'i')\n return !y.text.match(regexp);\n })\n vm.addStopWordProcessing = true;\n api.report.putStopWords(vm.report.id,[vm.stopWordToAdd])\n .then(function(res){\n vm.addStopWordProcessing = false;\n },function(err){\n console.log(err);\n vm.addStopWordProcessing = false;\n })\n vm.stopWords.push(vm.stopWordToAdd);\n vm.stopWordToAdd = '';\n }\n\n function addSingleStopLabel() {\n vm.stopLabelToAdd = vm.stopLabelToAdd != null ? vm.stopLabelToAdd.trim() : vm.stopLabelToAdd;\n if (vm.stopLabelToAdd == null || vm.stopLabelToAdd == \"\" || vm.stopLabels.includes(vm.stopLabelToAdd)) {\n if (vm.stopLabelToAdd == \"\") toastService.serverError($translate.instant('REPORT.KEYWORD_CHART.EMPTY_STOPLABEL')); \n vm.stopLabelToAdd = '';\n return;\n }\n addStopLabelGroup([vm.stopLabelToAdd]);\n vm.stopLabelToAdd = '';\n }\n\n function addStopLabelGroup(texts){\n vm.addStopLabelProcessing = true;\n api.report.postStopLabels(vm.report.id,texts)\n .then(function(res){\n vm.addStopLabelProcessing = false;\n },function(err){\n console.log(err);\n vm.addStopLabelProcessing = false;\n })\n var deletedKeywordList = [];\n var deletedNoncategorizedKeywords = [];\n texts.forEach(function (x) {\n vm.stopLabels.push(x);\n if (vm.keywords.find(function (f) { return x.includes(f.text); }) != null)\n deletedKeywordList.push(vm.keywords.find(function (f) { return x.includes(f.text); }));\n if (vm.nonCategorizedKeywords.find(function (f) { return x.includes(f.text); }) != null)\n deletedNoncategorizedKeywords.push(vm.nonCategorizedKeywords.find(function (f) { return x.includes(f.text); }));\n });\n \n if (deletedKeywordList && deletedKeywordList.length > 0) {\n deletedKeywordList.forEach(function (x) { vm.deletedKeywords.push(x); });\n }\n if (deletedNoncategorizedKeywords) {\n deletedNoncategorizedKeywords.forEach(function (x) { vm.deletedNoncategorizedKeywords.push(x); });\n }\n vm.keywords = vm.keywords.filter(function (x) { return !texts.includes(x.text); });\n vm.nonCategorizedKeywords = vm.nonCategorizedKeywords.filter(function (x) { return !texts.includes(x.text); });\n }\n\n function addStopLabels() {\n var toAdd = vm.stopLabelsToAdd.map(function(x){\n return x.text;\n });\n if (toAdd.length == 0) {\n toastService.serverError($translate.instant('REPORT.KEYWORD_CHART.EMPTY_STOPLABEL'));\n return;\n }\n addStopLabelGroup(toAdd);\n vm.stopLabelsToAdd = [];\n }\n\n function removeStopLabels(){\n vm.stopLabels = vm.stopLabels.filter(function(item) {\n return vm.stopLabelsToRemove.indexOf(item)<0;\n });\n /*\n var deletedKeywordList = [];\n var deletedNoncategorizedKeywords = [];\n vm.stopLabelsToRemove.forEach(function (x) {\n deletedKeywordList.push(vm.keywords.find(function (f) { return x.includes(f.text); }));\n deletedNoncategorizedKeywords.push(vm.nonCategorizedKeywords.find(function (f) { return x.includes(f.text); }));\n })*/\n\n if (vm.deletedKeywords && vm.deletedKeywords.length > 0) {\n vm.deletedKeywords.forEach(function (x) {\n if (vm.stopLabelsToRemove.includes(x.text)) {\n vm.keywords.push(x)\n }\n })\n vm.deletedKeywords = vm.deletedKeywords.filter(function (f) {\n if (vm.stopLabelsToRemove.includes(f.text)) {\n return false;\n } else {\n return true;\n }\n });\n }\n if (vm.deletedNoncategorizedKeywords && vm.deletedNoncategorizedKeywords.length > 0) {\n vm.deletedNoncategorizedKeywords.forEach(function (x) {\n if (vm.stopLabelsToRemove.includes(x.text)) {\n vm.nonCategorizedKeywords.push(x);\n }\n })\n vm.deletedNoncategorizedKeywords = vm.deletedNoncategorizedKeywords.filter(function (f) {\n if (vm.stopLabelsToRemove.includes(f.text)) {\n return false;\n } else {\n return true;\n }\n });\n }\n\n api.report.deleteStopLabels(vm.report.id,vm.stopLabelsToRemove) \n .then(function (response) {\n },\n function (response) {\n $log.error(response);\n });\n vm.stopLabelsToRemove = [];\n }\n\n function removeStopWords(){\n vm.stopWords = vm.stopWords.filter(function(item) {\n return vm.stopWordsToRemove.indexOf(item)<0;\n });\n api.report.deleteStopWords(vm.report.id,vm.stopWordsToRemove)\n .then(function (response) {\n },\n function (response) {\n $log.error(response);\n });\n vm.stopWordsToRemove = [];\n }\n\n function encodeFilters(query) {\n var encodedFilters = base64.encode(JSON.stringify(query));\n $location.search('query', encodedFilters);\n ReportService.setQuery(vm.report.id,encodedFilters);\n }\n\n function setNormalFacetFilters() {\n var filters = ReportQueryParserService.setNormalFacetFilters(vm.filterChips);\n if (filters && filters.length > 0) {\n vm.parameters.filter = filters;\n } else {\n vm.parameters.filter = null;\n }\n }\n\n function setCategoryFacetFilters() {\n var filters = ReportQueryParserService.setCategoryFacetFilters(vm.filterChips);\n if (filters && filters.length > 0) {\n vm.parameters.category = filters;\n } else {\n vm.parameters.category = null;\n }\n }\n\n\n function setFacetFieldsQuery() {\n var fields = vm.reportFields.filter(function (rf) {\n return ReportService.isThisFieldType(300, rf.fieldType);\n });\n fields.forEach(function (f) {\n if (!vm.parameters[\"facet\"]) vm.parameters[\"facet\"] = [];\n if (vm.parameters[\"facet\"].indexOf(f.fieldTitle) == -1)\n vm.parameters[\"facet\"].push(f.fieldTitle);\n })\n var classificationModules = vm.reportModules.filter(function (rm) {\n return rm.moduleTypeId == 1\n });\n if (classificationModules && classificationModules.length > 0) {\n classificationModules.forEach(function (m) {\n if (!vm.parameters[\"facet\"]) vm.parameters[\"facet\"] = [];\n var value = \"\\\"moduleid:\" + m.moduleId + \"\\\"\";\n if (vm.parameters[\"facet\"].indexOf(value) == -1)\n vm.parameters[\"facet\"].push(value);\n })\n }\n var sentimentField = vm.reportFields.filter(function (rf) {\n return rf.fieldType == 200;\n })[0];\n if(sentimentField){\n if (!vm.parameters[\"facet\"]) vm.parameters[\"facet\"] = [];\n if (vm.parameters[\"facet\"].indexOf(sentimentField.fieldTitle) == -1)\n vm.parameters[\"facet\"].push(sentimentField.fieldTitle);\n }\n }\n\n function setupFacets() {\n \n vm.targetChartData = null;\n vm.data.facetSize = 10;\n vm.data.facets.forEach(function (f) {\n f[\"size\"] = 10;\n f[\"showMoreAndMore\"] = f.facetList && f.facetList.length >= 10 ? true : false;\n f[\"allFacets\"] = f.facetList && f.facetList.length > 10 || vm.reportModuleIds.includes(f.key) ? true : false;\n });\n\n /*var normalCategoryFilters = vm.filterChips.filter(function (c) {\n return c.type == 100;\n });*/\n var normalCategoryFilters = [];\n vm.filterChips.forEach(function (c) {\n if(c.type == 100 && c.operand == \"AND\" && normalCategoryFilters.filter(function(f){ return f.level == c.level && f.operand == \"AND\";}).length == 0){\n normalCategoryFilters.push(c);\n }\n });\n if (normalCategoryFilters && normalCategoryFilters.length > 0) {\n var level = findChartLevel();\n normalCategoryFilters.forEach(function (c) {\n var foundedFacets = vm.data.facets.filter(function (f) {\n return f.key === c.key\n });\n if (foundedFacets && foundedFacets.length > 0) {\n var facet = foundedFacets[0];\n var result = findRecurisiveFacetByValue(facet.facetList, c.value,c.parentString ? c.parentString:null,null);\n if (result && result.subs && result.subs.length > 0) {\n result.subs.forEach(function (s) {\n s[\"parentString\"] = c.parentString ? c.parentString + \"->\" + c.value : c.value;\n })\n if (c.group == -1 && level - 1 == c.level && result && result.subs && result.subs.length > 0) {\n vm.targetChartData = {\n key: facet.key,\n title: result.value,\n type: facet.type + 10,\n size: 10,\n count: result.count,\n facetList: result.subs,\n parentString: c.parentString ? c.parentString + \"->\" + c.value : c.value\n };\n } else if (c.group == -1 && level - 1 == c.level && result) {\n var foundedFilter = normalCategoryFilters.filter(function (cat) {\n return cat.level == level - 2;\n })[0];\n }\n var alias = {};\n var chipCat = getChipCat(c);\n if (chipCat && chipCat.localVariables) {\n chipCat.localVariables.forEach(function (k) {\n alias[k.language] = k.value;\n })\n }\n vm.data.facets.push({\n order: facet.order,\n key: facet.key,\n title: result.value,\n type: facet.type + 10,\n size: 10,\n count: result.count,\n facetList: result.subs,\n parentString: c.parentString ? c.parentString + \"->\" + c.value : c.value,\n alias: alias\n });\n } else if (c.group == -1 && level - 1 == c.level) { \n var foundedTarget = vm.data.facets.filter(function (x) {\n return result.parentString && x.parentString && x.parentString == result.parentString;\n })[0];\n if (foundedTarget) {\n foundedTarget = JSON.parse(JSON.stringify(foundedTarget));\n if(foundedTarget.subs && foundedTarget.subs.length > 0){\n foundedTarget.facetList = foundedTarget.facetList.filter(function (ss) {\n return ss.value === result.value;\n });\n }\n vm.targetChartData = foundedTarget;\n }\n }\n }\n })\n }\n\n sortFacets();\n\n if (normalCategoryFilters && normalCategoryFilters.length > 0) {\n normalCategoryFilters.forEach(function (cFilter) {\n var foundedFacet = vm.data.facets.filter(function (f) {\n return f.key == cFilter.key && cFilter.titleKey == f.title;\n })[0];\n if (foundedFacet)\n vm.data.facets = vm.data.facets.filter(function (f) {\n return f != foundedFacet;\n });\n })\n }\n }\n\n function setupTimelineFacets(timelineFacets) {\n vm.targetChartTimelineData = null;\n if (!timelineFacets || timelineFacets.length < 1) return;\n var normalCategoryFilters = vm.filterChips.filter(function (c) {\n return c.type == 100 && c.key == vm.dashboardModuleId;\n });\n if (normalCategoryFilters && normalCategoryFilters.length > 0) {\n var level = findChartLevel();\n var tempTarget;\n normalCategoryFilters.forEach(function (c) {\n var foundedFacets = timelineFacets.filter(function (f) {\n return f.key === c.key\n });\n if (foundedFacets && foundedFacets.length > 0) {\n var facet = foundedFacets[0];\n var result = findRecurisiveFacetByValue(facet.facetList, c.value, c.parentString ? c.parentString:null,null);\n if (result && result.subs && result.subs.length > 0) {\n result.subs.forEach(function (s) {\n s[\"parentString\"] = c.parentString ? c.parentString + \"->\" + c.value : c.value;\n })\n if (c.group == -1 && level - 1 == c.level && result && result.subs && result.subs.length > 0) {\n vm.targetChartTimelineData = {\n key: facet.key,\n title: result.value,\n type: facet.type + 10,\n size: 10,\n count: result.count,\n facetList: result.subs,\n ranges: facet.ranges,\n parentString: c.parentString ? c.parentString + \"->\" + c.value : c.value\n };\n } else if (c.group == -1 && level - 1 == c.level && result) {\n var foundedFilter = normalCategoryFilters.filter(function (cat) {\n return cat.level == level - 2;\n })[0];\n }else if (c.group == -1 && level - 1 != c.level){\n tempTarget = {\n key: facet.key,\n title: result.value,\n type: facet.type + 10,\n size: 10,\n count: result.count,\n facetList: result.subs,\n ranges: facet.ranges,\n parentString: c.parentString ? c.parentString + \"->\" + c.value : c.value\n };\n }\n } else if (c.group == -1 && level - 1 == c.level) {\n /*var foundedTarget = vm.data.facets.filter(function (x) {\n return x.parentString == result.parentString;\n })[0];\n if (foundedTarget) {\n foundedTarget = JSON.parse(JSON.stringify(foundedTarget));\n foundedTarget.facetList = foundedTarget.facetList.filter(function (ss) {\n return ss.value === result.value;\n });\n vm.targetChartTimelineData = foundedTarget;\n }*/\n vm.targetChartTimelineData = tempTarget;\n }\n }\n })\n }\n }\n\n vm.facetMoreAndMore = function (item) {\n if (item.allFacets) {\n vm.moreAndMoreCount += 1;\n item.size = item.size + 10;\n if (item.facetList.length < item.size) item.showMoreAndMore = false;\n return;\n }\n\n vm.moreAndMoreLoading = true;\n vm.moreAndMoreCount += 1;\n item.size = item.size + 10;\n \n api.report.moreAndMoreSearch(vm.reportId,item.key,item.size-10,vm.parameters)\n .then(function (response) {\n if (response.length < 10) item.showMoreAndMore = false;\n item.facetList = item.facetList.concat(response);\n vm.moreAndMoreLoading = false;\n }, function (err) {\n $log.error(err);\n })\n \n }\n\n function findRecurisiveFacetByValue(facets, value,parent,currentParent) {\n if (!value || !facets || facets.length <= 0) return null;\n for (var i in facets) {\n var f = facets[i];\n if (f.value === value && parent == currentParent) {\n return f;\n } else {\n var p = f.value;\n if(currentParent)\n p = currentParent + \"->\" + f.value;\n var m = findRecurisiveFacetByValue(f.subs, value,parent,p);\n if (m)\n return m;\n }\n }\n return null;\n }\n\n\n function dateFormat(dateStart, dateEnd) {\n return dateStart && dateEnd && (dateStart.toLocaleDateString('tr-TR') + ' - ' + moment(dateEnd).toDate().toLocaleDateString('tr-TR'));\n }\n\n function getRangeResults() {\n if (vm.queueActive) {\n api.report.rangeSearch(vm.reportId)\n .then(function (res) {\n vm.rangeResponse = res;\n if (Object.keys(res).length == 0) {\n vm.preparingRangeData = true;\n }\n var response = getRangeResponseByTrendDate(vm.catTrendDate);\n if (response) {\n setupTimelineFacets(response.facets);\n setSentimentTimelineChart(response, vm.catTrendDate);\n setCategoryTimelineChart(response, vm.catTrendType, vm.catTrendDate);\n }\n\n }, function (response) {\n console.log(response);\n })\n }\n }\n\n function init() {\n setGlobalChartSettings(vm.reportSettings);\n setChartCategoryAliases();\n setDate();\n setQueryParameters();\n //initDateRanges();\n search();\n getRangeResults();\n setFilteredFacets();\n setTimeout(function () { createDatePicker(); }, 2000);\n $utils.saveAudit(vm.reportId, \"REPORT\", \"OPEN\", vm.report.name + \" / Cumulative Report\");\n getIsFlatModeActive();\n $utils.googleAnalyticsSetPageview(\"/report/\"+vm.reportId+\"/overview\");\n $utils.googleAnalyticsSetScreenView(\"Cumulative Report\");\n }\n init();\n \n function setDate(){\n vm.afterDatePicker = {\n startDate: vm.report.dates && vm.report.dates.startDate ? moment(vm.report.dates.startDate).toDate() : null,\n //endDate: vm.report.dates && vm.report.dates.endDate ? moment(vm.report.dates.endDate).add(1,'days').toDate() : null\n endDate: vm.report.dates && vm.report.dates.endDate ? moment(vm.report.dates.endDate).startOf('day').add(1, 'days').add(-1, 'seconds').toDate() : null\n };\n if(vm.afterDatePicker && vm.afterDatePicker.startDate && vm.afterDatePicker.endDate){\n vm.parameters.startDate = vm.afterDatePicker.startDate.toISOString().split('.')[0] + \"Z\";\n vm.parameters.endDate = vm.afterDatePicker.endDate.toISOString().split('.')[0] + \"Z\";\n }\n //debugger;\n }\n\n function createDatePickers() {\n if (!vm.isDatePickerCreatorStarted) {\n vm.isDatePickerCreatorStarted = true;\n if ($('#afterreportrange').length || $('#afterreportrange2').length) {\n if (vm.afterDatePicker && vm.afterDatePicker.startDate && vm.afterDatePicker.endDate) {\n createDateComponentTurkish('#afterreportrange', vm.afterDatePicker.startDate, vm.afterDatePicker.endDate);\n createDateComponentEnglish('#afterreportrange2', vm.afterDatePicker.startDate, vm.afterDatePicker.endDate);\n } else {\n createDateComponentTurkish('#afterreportrange', null, null);\n createDateComponentEnglish('#afterreportrange2', null, null);\n }\n\n if (vm.afterDatePicker.startDate && vm.afterDatePicker.endDate) {\n $('#afterreportrange').val(moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY'));\n $('#afterreportrange2').val(moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY'));\n } else {\n $('#afterreportrange').val('Tarih');\n $('#afterreportrange2').val('Tarih');\n }\n\n if ($('#afterreportrange').length) {\n\n $('input[id=\"afterreportrange\"]').on('apply.daterangepicker', function (ev, picker) {\n vm.afterDatePicker = {\n startDate: picker.startDate.toDate(),\n endDate: picker.endDate.toDate()\n };\n //addTemplateReportCookie(\"afterDate\", vm.afterDatePicker);\n $settings.saveUserSettings(\"afterDate\", vm.afterDatePicker, vm.report.id);\n changeDate();\n });\n $('input[id=\"afterreportrange\"]').on('hide.daterangepicker', function (ev, picker) {\n refreshDatePickersFormat();\n });\n }\n\n if ($('#afterreportrange2').length) {\n\n $('input[id=\"afterreportrange2\"]').on('apply.daterangepicker', function (ev, picker) {\n vm.afterDatePicker = {\n startDate: picker.startDate.toDate(),\n endDate: picker.endDate.toDate()\n };\n //addTemplateReportCookie(\"afterDate\", vm.afterDatePicker);\n $settings.saveUserSettings(\"afterDate\", vm.afterDatePicker, vm.report.id);\n changeDate();\n });\n $('input[id=\"afterreportrange2\"]').on('hide.daterangepicker', function (ev, picker) {\n refreshDatePickersFormat();\n });\n }\n vm.dateTypes = [{\n id: 1,\n name: $translate.instant('REPORT.CONTENT_DATE')\n },\n {\n id: 2,\n name: $translate.instant('SHARED.ORDER.UPDATED_DATE')\n },\n {\n id: 3,\n name: $translate.instant('SHARED.ORDER.CREATED_DATE')\n }]\n var l = \"
\" +\n \"\" +\n \"
\";\n $(\".drp-buttons\").prepend($compile(l)($scope));\n\n vm.parameters.searchByDate = vm.paramSearchByDate;\n }\n vm.isDatePickerCreatorStarted = false;\n }\n refreshDatePickersFormat();\n }\n\n function createDatePicker() {\n if (($('#afterreportrange').is(':visible') && vm.languageDatePicker == 1) || ($('#afterreportrange2').is(':visible') && vm.languageDatePicker == 2)) { //if the container is visible on the page\n createDatePickers();\n } else {\n setTimeout(createDatePickers, 50); //wait 50 ms, then try again\n }\n }\n\n function setQueryParameters() {\n if ($location.search().query) {\n vm.parameters = JSON.parse(base64.decode($location.search().query));\n if (vm.parameters && vm.parameters.startDate && vm.parameters.endDate) {\n vm.afterDatePicker = {\n startDate: moment(vm.parameters.startDate).toDate(),\n endDate: moment(vm.parameters.endDate).toDate()\n }\n vm.beforeDatePicker = {\n startDate: moment(vm.parameters.startDate).subtract(1, 'quarter').startOf('quarter').toDate(),\n endDate: moment(vm.parameters.startDate).subtract(1, 'quarter').endOf('quarter').toDate()\n }\n vm.parameters.startDate = vm.afterDatePicker.startDate.toISOString().split('.')[0] + \"Z\";\n vm.parameters.endDate = vm.afterDatePicker.endDate.toISOString().split('.')[0] + \"Z\";\n }else if(vm.afterDatePicker && vm.afterDatePicker.startDate && vm.afterDatePicker.endDate){\n vm.parameters.startDate = vm.afterDatePicker.startDate.toISOString().split('.')[0] + \"Z\";\n vm.parameters.endDate = vm.afterDatePicker.endDate.toISOString().split('.')[0] + \"Z\";\n }\n //if (vm.parameters.filterChips && vm.parameters.filterChips.length > 0) {\n vm.filterChips = ReportService.generateFilterChipsFromFilter(vm.parameters, vm.reportModules);\n //vm.filterChips = vm.parameters.filterChips;\n //}\n }\n if ($location.search().logs) vm.showLogs = true;\n\n if ($location.search().url || $location.search().oid) {\n $state.go('app.report.data', {\n id: vm.reportId,\n url: $location.search().url,\n oid: $location.search().oid,\n query: $location.search().query\n });\n }\n }\n\n function search() {\n searchData();\n findKeywords();\n findNonCategorizedKeywords();\n\n }\n\n vm.catTrendType = \"docPercent\";\n vm.catTrendDate = vm.queueActive ? \"5\" : null;\n\n vm.changeCatTrendType = function () {\n setupTimelineFacets(getRangeResponseByTrendDate(vm.catTrendDate).facets);\n setCategoryTimelineChart(getRangeResponseByTrendDate(vm.catTrendDate), vm.catTrendType, vm.catTrendDate);\n setSentimentTimelineChart(getRangeResponseByTrendDate(vm.catTrendDate), vm.catTrendDate);\n }\n\n function getRangeResponseByTrendDate(trendDate) {\n if (vm.rangeResponse) {\n switch (trendDate) {\n case \"1\":\n case \"2\":\n case \"3\":\n return vm.rangeResponse[\"DAILY\"];\n case \"4\":\n case \"5\":\n return vm.rangeResponse[\"MONTHLY\"];\n }\n } else {\n return vm.timelineResult ? vm.timelineResult[0] : null;\n }\n }\n\n function setConfusions(response) {\n if(vm.dashboardClassificationModule && response){\n vm.confusions = ReportTemplate1ChartParserService.parseSentimentConfusions(response, vm.dashboardModuleId, vm.targetChartData ? vm.targetChartData : null,vm.hasSentimentModule,vm.categoryAlieses);\n if(!vm.confusions){\n vm.confusions = {}\n }\n vm.confusions.apiResponse = response;\n var total = {\n code: \"TOTAL\",\n name: $translate.instant('REPORT.DASHBOARD_TEMPLATE_2.CONFIG.TOTAL')\n }\n\n if (vm.confusions.columns) {\n total.items = JSON.parse(JSON.stringify(vm.confusions.columns))\n } else {\n total.items = [];\n }\n\n total.items.forEach(function (k) { k.percent = 0; k.value = 0; });\n\n if (vm.confusions.rows && vm.confusions.rows.length > 0) {\n for (var i = 0; i < vm.confusions.rows.length; i++) {\n for (var j = 0; j < vm.confusions.rows[i].items.length; j++) {\n total.items[j].value = total.items[j].value + vm.confusions.rows[i].items[j].value;\n }\n }\n for (var i = 0; i < total.items.length; i++) {\n total.items[i].percent = total.items[3].value && total.items[3].value!=0 ? total.items[i].value / total.items[3].value : 0;\n }\n vm.sortConfusions({ name: \"TOTAL\" });\n vm.confusions.rows.sort(function (a, b) { return a.order - b.order; });\n vm.confusions.rows.push(total);\n }\n }\n }\n\n function setReportAttributeScoreData(response) {\n var data = ReportTemplate1_2ChartParserService.parseReportAttributeScoreChart(response, vm.charts.reportAttributeScore.settings);\n if(data && data.columns && data.columns.length > 0) {\n var defaultSortColumnKey = vm.charts.reportAttributeScore.settings.reportAttributeScoreSortItem ? \n vm.charts.reportAttributeScore.settings.reportAttributeScoreSortItem : data.columns[0].key ;\n vm.sortReportAttributeScore(data, { key: defaultSortColumnKey }, -1);\n }\n vm.charts.reportAttributeScore.data = data;\n console.log(data);\n }\n\n function setAttributeBasedCategoryData(response, facetKey) {\n var data = ReportTemplate1_2ChartParserService.parseAttributeBasedCategoryChart(response, facetKey);\n if (!data)\n data = {}\n var total = {\n key: \"TOTAL\",\n name: $translate.instant('REPORT.DASHBOARD_TEMPLATE_2.CONFIG.TOTAL'),\n order: (data.rows ? data.rows.length + 1 : 1),\n items: []\n }\n if (data.columns) {\n data.columns.forEach(function (column) {\n total.items.push({key: column.key, name: column.name, value: 0, percent: 0});\n });\n }\n\n if (data.rows && data.rows.length > 0) {\n for (var i = 0; i < data.rows.length; i++) {\n for (var j = 0; j < data.rows[i].items.length; j++) {\n total.items[j].value = total.items[j].value + data.rows[i].items[j].value;\n }\n }\n for (var i = 0; i < total.items.length; i++) {\n var percent = total.items[total.items.length - 1].value && total.items[total.items.length - 1].value != 0 ? total.items[i].value / total.items[total.items.length - 1].value : 0;\n total.items[i].percent = percent.toFixed(4);\n }\n data.rows.sort(function (a, b) { return a.order - b.order; });\n data.rows.push(total);\n }\n\n sortColumnsByCategory(data);\n var defaultSortColumnKey = vm.charts.attributeBasedCategory.settings.attributeNameSortItem ? vm.charts.attributeBasedCategory.settings.attributeNameSortItem : 'TOTAL';\n vm.sortAttributeBasedCategory(data, { key: defaultSortColumnKey });\n \n vm.charts.attributeBasedCategory.data = data;\n }\n\n function sortColumnsByCategory(data) {\n if (vm.charts.attributeBasedCategory.settings && !isNullArray(vm.charts.attributeBasedCategory.settings.attributeNameSortList)) {\n if (data.columns && data.columns.length > 0) {\n var columnList = [];\n vm.charts.attributeBasedCategory.settings.attributeNameSortList.forEach(function (attributeName) {\n var f = data.columns.filter(function (x) {\n return x.key == attributeName;\n });\n if (!isNullArray(f))\n columnList.push(f[0]);\n });\n for (var i = 0; i < data.columns.length; i++) {\n if (!vm.charts.attributeBasedCategory.settings.attributeNameSortList.includes(data.columns[i].key))\n columnList.push(data.columns[i]);\n }\n data.columns = columnList;\n }\n\n if (data.rows && data.rows.length > 0) {\n for (var i = 0; i < data.rows.length; i++) {\n var itemList = [];\n vm.charts.attributeBasedCategory.settings.attributeNameSortList.forEach(function (attributeName) {\n var f = data.rows[i].items.filter(function (x) {\n return x.key == attributeName;\n });\n if (!isNullArray(f))\n itemList.push(f[0]);\n });\n for (var j = 0; j < data.rows[i].items.length; j++) {\n if (!vm.charts.attributeBasedCategory.settings.attributeNameSortList.includes(data.rows[i].items[j].key))\n itemList.push(data.rows[i].items[j]);\n }\n data.rows[i].items = itemList;\n }\n }\n }\n }\n\n vm.numberWithCommas = function(x) {\n return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n }\n\n vm.getColor = function(val) {\n if(val < 0)\n return 'red';\n if(val < 50) \n return '#f5c24e';\n return 'green';\n }\n\n vm.numberWithMathFloor = function(x,digit) {\n if(!digit) digit = 2;\n var d = Math.pow(10,digit);\n return Math.trunc(x*d)/d; \n }\n\n vm.attributeFormulItem = function(row, formulName) {\n var formulItem = row.items.filter(\n function (f) {\n return f.key == formulName;\n });\n \n \n if(formulItem && formulItem.length > 0) {\n return {key:formulItem[0].key, value: vm.numberWithMathFloor(formulItem[0].value)};\n }\n else {\n return {key:formulName, value:vm.numberWithMathFloor(0)};\n }\n } \n\n function dynamicSort(property, value) {\n var sortOrder = 1;\n if (property[0] === \"-\") {\n sortOrder = -1;\n property = property.substr(1);\n }\n return function (a, b) {\n var first = a.items.filter(function (k) { return k.name == value });\n var second = b.items.filter(function (k) { return k.name == value });\n if(first.length < 1 || second.length < 1)\n return sortOrder;\n var result = (first[0][property] < second[0][property]) ? -1 : (first[0][property] > second[0][property]) ? 1 : 0;\n return result * sortOrder;\n }\n }\n\n function dynamicSortForCategory(property, value) {\n var sortOrder = 1;\n if (property[0] === \"-\") {\n sortOrder = -1;\n property = property.substr(1);\n }\n return function (a, b) {\n var first = a.items.filter(function (k) { return k.key == value });\n var second = b.items.filter(function (k) { return k.key == value });\n if(first.length < 1 || second.length < 1)\n return sortOrder;\n var result = (first[0][property] < second[0][property]) ? -1 : (first[0][property] > second[0][property]) ? 1 : 0;\n return result * sortOrder;\n }\n }\n\n vm.sortConfusions = function (column) {\n var param = \"-\" + vm.confusionSortItem;\n\n if (vm.lastConfusionSort != null && column.name == vm.lastConfusionSort.name) {\n param = vm.confusionSortItem;\n vm.lastConfusionSort = null;\n } else {\n vm.lastConfusionSort = column;\n }\n vm.confusions.rows = vm.confusions.rows.sort(dynamicSort(param, column.name));\n }\n\n vm.sortReportAttributeScore = function(data, column, reverse) {\n \n vm.charts.reportAttributeScore.settings.reportAttributeScoreSortItem = column.key;\n if(!vm.charts.reportAttributeScore.settings.reportAttributeScoreSortItemOrder) {\n vm.charts.reportAttributeScore.settings.reportAttributeScoreSortItemOrder = -1;\n }\n vm.charts.reportAttributeScore.settings.reportAttributeScoreSortItemOrder *= reverse;\n var param = ((vm.charts.reportAttributeScore.settings.reportAttributeScoreSortItemOrder == -1) \n ? '-' : '') + vm.reportAttributeScoreSortItem;\n var rows = data.rows;\n rows = rows.sort(dynamicSortForCategory(param, column.key));\n data.rows = rows;\n }\n\n vm.sortAttributeBasedCategory = function (data, column) {\n console.log('sortAttributeBasedCategory');\n console.log(data);\n console.log(column);\n vm.charts.attributeBasedCategory.settings.attributeNameSortItem = column.key;\n var param = \"-\" + vm.attributeBasedCategorySortItem;\n var rows = data.rows.slice(0, data.rows.length - 1);\n rows = rows.sort(dynamicSortForCategory(param, column.key));\n rows.push(data.rows[data.rows.length - 1]);\n data.rows = rows;\n }\n\n function setGaugeChart(response) {\n if (vm.dashboardClassificationModule && response) {\n vm.gaugeCategoryData = ReportTemplate1ChartParserService.parseGaugeChart(response, vm.dashboardModuleId, vm.categoryAlieses, vm.targetChartData ? vm.targetChartData : null);\n if (!vm.gaugeCategoryData || vm.gaugeCategoryData.length == 0)\n vm.gaugeChartNoDataAvailable = true;\n else\n vm.gaugeChartNoDataAvailable = false;\n if(!vm.gaugeCategoryData){\n vm.gaugeCategoryData = {}\n }\n vm.gaugeCategoryData.apiResponse = response;\n }\n }\n\n function setCategoryTimelineChart(response, catTrendType, catTrendDate) {\n if(vm.dashboardClassificationModule){\n var categoryResponse = ReportTemplate1_2ChartParserService.parseCategoryTimelineChart(response ? JSON.parse(JSON.stringify(response)) : null, vm.dashboardModuleId, vm.targetChartTimelineData ? vm.targetChartTimelineData : null, vm.afterDatePicker.startDate, vm.afterDatePicker.endDate, vm.categoryAlieses, vm.report.id, catTrendType, catTrendDate);\n\n if (categoryResponse) {\n vm.categoryInsufficientTimelineData = categoryResponse.insufficientTimelineData;\n if (vm.categoryInsufficientTimelineData)\n vm.charts.categoryTimeline = categoryResponse;\n }\n\n }\n setTimeout(function () {\n vm.charts.categoryTimeline = categoryResponse;\n\n if (!vm.charts.categoryTimeline) {\n vm.charts.categoryTimeline = {}\n }\n vm.charts.categoryTimeline.apiResponse = response;\n setTimeout(function () { d3.selectAll('.nvtooltip').style('opacity', 0); }, 500);\n }, 1);\n\n }\n\n function setSentimentTimelineChart(response, sentimentTrendDate) {\n var sentimentResponse = ReportTemplate1_2ChartParserService.parseNewSentimentTimelineChart(response ? JSON.parse(JSON.stringify(response)) : null, vm.dashboardModuleId, vm.targetChartTimelineData ? JSON.parse(JSON.stringify(vm.targetChartTimelineData)) : null, vm.hasSentimentModule, vm.afterDatePicker.startDate, vm.afterDatePicker.endDate, sentimentTrendDate);\n if (sentimentResponse) {\n vm.sentimentInsufficientTimelineData = sentimentResponse.insufficientTimelineData;\n if (vm.sentimentInsufficientTimelineData)\n vm.charts.sentimentTimeline = sentimentResponse;\n }\n setTimeout(function () {\n vm.charts.sentimentTimeline = sentimentResponse\n\n if (!vm.charts.sentimentTimeline) {\n vm.charts.sentimentTimeline = {}\n }\n vm.charts.sentimentTimeline.apiResponse = response;\n setTimeout(function () { d3.selectAll('.nvtooltip').style('opacity', 0); }, 500);\n }, 1);\n \n }\n\n function reevaluateReport($event) {\n ReportService.reevaluatePrompt($scope, $event, vm.report.id, user, vm.documentNickname);\n }\n\n function removeDocuments($event) {\n ReportService.deleteReportData($scope, $state, $event, vm.report, vm.parameters, vm.data.count);\n }\n\n function deleteReport($event) {\n if (vm.isFlatModeActive)\n ReportService.warning($scope, $event, $translate.instant(\"REPORT.ERRORS.ACTIVE_WEB_SOURCE_HEADER\"), $translate.instant(\"REPORT.ERRORS.ACTIVE_WEB_SOURCE_BODY\"));\n else\n ReportService.deleteReport($scope, $state, $event, vm.report);\n }\n\n //export starts\n function exportReport(type,$event) {\n ReportService.exportPrompt($scope, $event, vm.report.id,user,vm.parameters,type,vm.data.count);\n }\n\n function downloadJquery(url, data, method) {\n if (url && data) {\n data = typeof data === 'string' ? data : jQuery.param(data);\n var inputs = '';\n jQuery.each(data.split('&'), function () {\n var pair = this.split('=');\n if (pair[0] == \"category%5B%5D\" || pair[0] == \"filter%5B%5D\") {\n inputs += '';\n } else {\n inputs += '';\n }\n });\n jQuery('
' + inputs + '
')\n .appendTo('body').submit().remove();\n }\n }\n\n //export ends\n\n //Key events starts\n angular.element($window).bind('keydown', function (e) {\n if (e.keyCode == 16) {\n vm.ctrlKeyPressing = true;\n vm.groupCtrlCount = vm.groupCtrlCount + 1;\n }\n });\n\n angular.element($window).bind('keyup', function (e) {\n if (e.keyCode == 16) {\n vm.ctrlKeyPressing = false;\n //vm.groupCtrlCount = Math.floor(Math.random() * 10000) + 1;\n //search();\n\n }\n });\n //Key events ends\n\n //Bookmarks starts\n function saveBookmark(title, event) {\n var request = {\n url: $location.search().query,\n title: title,\n reportId: vm.reportId\n };\n event.target.disabled = true;\n api.report.saveBookmark(request)\n .then(function (res) {\n vm.allBookmarks = res;\n vm.bookmarks = vm.allBookmarks.filter(function (k) { return k.userName != null });\n vm.generalBookmarks = vm.allBookmarks.filter(function (k) { return k.userName == null });\n vm.newBookmarkTitle = null;\n event.target.disabled = false;\n }, function (response) {\n console.log(response);\n event.target.disabled = false;\n })\n }\n\n //General ookmarks starts\n this.saveGeneralBookmark = function (title, event) {\n var request = {\n url: $location.search().query,\n title: title,\n reportId: vm.reportId\n };\n event.target.disabled = true;\n api.report.saveGeneralBookmark(request)\n .then(function (res) {\n vm.allBookmarks = res;\n vm.bookmarks = vm.allBookmarks.filter(function (k) { return k.userName != null });\n vm.generalBookmarks = vm.allBookmarks.filter(function (k) { return k.userName == null });\n vm.newBookmarkTitle = null;\n vm.newGeneralBookmarkTitle = null;\n event.target.disabled = false;\n }, function (response) {\n console.log(response);\n event.target.disabled = false;\n })\n }\n\n function deleteBookmark(id, event) {\n var request = {\n reportId: vm.reportId,\n id: id\n };\n event.target.disabled = true;\n api.report.deleteBookmark(request)\n .then(function (res) {\n vm.allBookmarks = res;\n vm.bookmarks = vm.allBookmarks.filter(function (k) { return k.userName != null });\n vm.generalBookmarks = vm.allBookmarks.filter(function (k) { return k.userName == null });\n event.target.disabled = false;\n }, function (response) {\n console.log(response);\n })\n }\n\n function goToBookmark(query) {\n $location.search('query', query);\n if ($location.search().query) {\n setQueryParameters();\n search();\n }\n }\n\n //Bookmarks ends\n\n //date component starts\n function refreshDatePickersFormat() {\n if (vm.afterDatePicker.startDate && vm.afterDatePicker.endDate) {\n var afterValue = getDatePickerValue(vm.afterDatePicker);\n var dateRanges = {};\n if (vm.languageDatePicker == 1)\n dateRanges = vm.dateRanges;\n else if (vm.languageDatePicker == 2)\n dateRanges = vm.dateRangesEn;\n Object.keys(dateRanges).forEach(function (k) {\n if (dateRanges[k][0].format('DD/MM/YYYY') == moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') && dateRanges[k][1].format('DD/MM/YYYY') == moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY')) {\n afterValue = k;\n }\n })\n if (afterValue) {\n $('#afterreportrange').val(afterValue);\n $('#afterreportrange2').val(afterValue);\n } else {\n $('#afterreportrange').val(moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY'));\n $('#afterreportrange2').val(moment(vm.afterDatePicker.startDate).format('DD/MM/YYYY') + ' - ' + moment(vm.afterDatePicker.endDate).format('DD/MM/YYYY'));\n }\n }\n else {\n $('#afterreportrange').val('Tarih');\n $('#afterreportrange2').val('Tarih');\n }\n }\n\n function getDatePickerValue(picker) {\n var value = null;\n if (picker && picker.startDate && picker.endDate) {\n if (picker.startDate.getDate() == 1 && picker.startDate.getMonth() + 1 == 1 &&\n picker.endDate.getDate() == 31 && picker.endDate.getMonth() + 1 == 3 &&\n picker.startDate.getYear() == picker.endDate.getYear()) {\n value = \"Q1 (\" + picker.startDate.getFullYear() + \")\";\n } else if (picker.startDate.getDate() == 1 && picker.startDate.getMonth() + 1 == 4 &&\n picker.endDate.getDate() == 30 && picker.endDate.getMonth() + 1 == 6 &&\n picker.startDate.getYear() == picker.endDate.getYear()) {\n value = \"Q2 (\" + picker.startDate.getFullYear() + \")\";\n } else if (picker.startDate.getDate() == 1 && picker.startDate.getMonth() + 1 == 7 &&\n picker.endDate.getDate() == 30 && picker.endDate.getMonth() + 1 == 9 &&\n picker.startDate.getYear() == picker.endDate.getYear()) {\n value = \"Q3 (\" + picker.startDate.getFullYear() + \")\";\n } else if (picker.startDate.getDate() == 1 && picker.startDate.getMonth() + 1 == 10 &&\n picker.endDate.getDate() == 31 && picker.endDate.getMonth() + 1 == 12 &&\n picker.startDate.getYear() == picker.endDate.getYear()) {\n value = \"Q4 (\" + picker.startDate.getFullYear() + \")\";\n }\n }\n return value;\n }\n\n \n\n //date component ends\n\n function isNullArray(array) {\n if (!array || array.length < 1)\n return true;\n else\n return false;\n }\n\n vm.datePickerLanguage = {\n 'Mon': 'Pzt',\n 'Tue': 'Sal',\n 'Wed': 'Çar',\n 'Thu': 'Per',\n 'Fri': 'Cum',\n 'Sat': 'Cmt',\n 'Sun': 'Paz',\n 'This Week': 'Bu Hafta',\n \"January\": \"Ocak\",\n \"February\": \"Şubat\",\n \"March\": \"Mart\",\n \"April\": \"Nisan\",\n \"May\": \"Mayıs\",\n \"June\": \"Haziran\",\n \"July\": \"Temmuz\",\n \"August\": \"Ağustos\",\n \"September\": \"Eylül\",\n \"October\": \"Ekim\",\n \"November\": \"Kasım\",\n \"December\": \"Aralık\"\n };\n\n vm.dateRanges = {\n 'Bugün': [moment(), moment()],\n 'Dün': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],\n 'Son 7 Gün': [moment().subtract(6, 'days'), moment()],\n 'Son 30 Gün': [moment().subtract(29, 'days'), moment()],\n 'Bu Ay': [moment().startOf('month'), moment().endOf('month')],\n 'Geçen Ay': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')],\n 'Bu Yıl': [moment().startOf('year'), moment().endOf('year')],\n 'Geçen Yıl (Tümü)': [moment().startOf('year').subtract(1, 'y'), moment().endOf('year').subtract(1, 'y')],\n 'Bu Yıl (YTD)': [moment().startOf('year'), moment().endOf('day')],\n 'Geçen Yıl (YTD)': [moment().startOf('year').subtract(1, 'y'), moment().endOf('day').subtract(1, 'y')],\n 'Önceki Yıl (Tümü)': [moment().startOf('year').subtract(2, 'y'), moment().endOf('year').subtract(2, 'y')]\n }\n\n vm.dateRanges['Q1 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 0, 1)), moment(new Date(moment().year(), 2, 31))];\n vm.dateRanges['Q2 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 3, 1)), moment(new Date(moment().year(), 5, 30))];\n vm.dateRanges['Q3 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 6, 1)), moment(new Date(moment().year(), 8, 30))];\n vm.dateRanges['Q4 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 9, 1)), moment(new Date(moment().year(), 11, 31))];\n vm.dateRanges['Q1 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 0, 1)), moment(new Date(moment().year() - 1, 2, 31))];\n vm.dateRanges['Q2 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 3, 1)), moment(new Date(moment().year() - 1, 5, 30))];\n vm.dateRanges['Q3 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 6, 1)), moment(new Date(moment().year() - 1, 8, 30))];\n vm.dateRanges['Q4 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 9, 1)), moment(new Date(moment().year() - 1, 11, 31))];\n\n vm.dateRangesEn = {\n 'Today': [moment(), moment()],\n 'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],\n 'Last 7 Days': [moment().subtract(6, 'days'), moment()],\n 'Last 30 Days': [moment().subtract(29, 'days'), moment()],\n 'This Month': [moment().startOf('month'), moment().endOf('month')],\n 'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')],\n 'This Year': [moment().startOf('year'), moment().endOf('year')],\n 'Last Year (All)': [moment().startOf('year').subtract(1, 'y'), moment().endOf('year').subtract(1, 'y')],\n 'This Year (YTD)': [moment().startOf('year'), moment().endOf('day')],\n 'Last Year (YTD)': [moment().startOf('year').subtract(1, 'y'), moment().endOf('day').subtract(1, 'y')],\n 'Previous Year (All)': [moment().startOf('year').subtract(2, 'y'), moment().endOf('year').subtract(2, 'y')]\n }\n\n vm.dateRangesEn['Q1 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 0, 1)), moment(new Date(moment().year(), 2, 31))];\n vm.dateRangesEn['Q2 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 3, 1)), moment(new Date(moment().year(), 5, 30))];\n vm.dateRangesEn['Q3 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 6, 1)), moment(new Date(moment().year(), 8, 30))];\n vm.dateRangesEn['Q4 (' + moment().year() + ')'] = [moment(new Date(moment().year(), 9, 1)), moment(new Date(moment().year(), 11, 31))];\n vm.dateRangesEn['Q1 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 0, 1)), moment(new Date(moment().year() - 1, 2, 31))];\n vm.dateRangesEn['Q2 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 3, 1)), moment(new Date(moment().year() - 1, 5, 30))];\n vm.dateRangesEn['Q3 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 6, 1)), moment(new Date(moment().year() - 1, 8, 30))];\n vm.dateRangesEn['Q4 (' + (moment().year() - 1) + ')'] = [moment(new Date(moment().year() - 1, 9, 1)), moment(new Date(moment().year() - 1, 11, 31))];\n\n function buildToggler(navID) {\n return function () {\n // Component lookup should always be available since we are not using `ng-if`\n $mdSidenav(navID)\n .toggle()\n .then(function () {\n $log.debug(\"toggle \" + navID + \" is done\");\n });\n };\n }\n\n\n vm.categoryTextTooltip = \"\";\n vm.colors = ['blue-bg', 'blue-grey-bg', 'orange-bg', 'pink-bg', 'purple-bg'];\n vm.colors = [\n [\"#1f77b4\", \"#fff\"],\n [\"#aec7e8\", \"#000\"],\n [\"#ff7f0e\", \"#000\"],\n [\"#ffbb78\", \"#000\"],\n [\"#2ca02c\", \"#fff\"],\n [\"#98df8a\", \"#000\"],\n [\"#d62728\", \"#fff\"],\n [\"#ff9896\", \"#000\"],\n [\"#9467bd\", \"#000\"],\n [\"#c5b0d5\", \"#000\"],\n [\"#8c564b\", \"#fff\"],\n [\"#c49c94\", \"#000\"],\n [\"#e377c2\", \"#000\"],\n [\"#f7b6d2\", \"#000\"],\n [\"#7f7f7f\", \"#fff\"],\n [\"#c7c7c7\", \"#000\"],\n [\"#bcbd22\", \"#000\"],\n [\"#dbdb8d\", \"#000\"],\n [\"#17becf\", \"#000\"],\n [\"#9edae5\", \"#000\"]\n ];\n\n\n function createDateComponentTurkish(id, startDate, endDate) {\n $(id).daterangepicker({\n startDate: moment(startDate).toDate(),\n endDate: moment(endDate).toDate(),\n ranges: vm.dateRanges,\n opens: 'left',\n //alwaysShowCalendars: true,\n //autoUpdateInput: false,\n //ranges: createQuarters(),\n locale: {\n format: 'DD/MM/YYYY',\n applyLabel: \"Uygula\",\n cancelLabel: \"Vazgeç\",\n \"fromLabel\": \"Dan\",\n \"toLabel\": \"a\",\n \"customRangeLabel\": \"Seç\",\n \"daysOfWeek\": [\n \"Pz\",\n \"Pt\",\n \"Sl\",\n \"Çr\",\n \"Pr\",\n \"Cm\",\n \"Ct\"\n ],\n \"monthNames\": [\n \"Ocak\",\n \"Şubat\",\n \"Mart\",\n \"Nisan\",\n \"Mayıs\",\n \"Haziran\",\n \"Temmuz\",\n \"Ağustos\",\n \"Eylül\",\n \"Ekim\",\n \"Kasım\",\n \"Aralık\"\n ],\n \"firstDay\": 1\n }\n //ranges: createQuarters()\n }, refreshDatePickersFormat);\n }\n\n function createDateComponentEnglish(id, startDate, endDate) {\n $(id).daterangepicker({\n startDate: moment(startDate).toDate(),\n endDate: moment(endDate).toDate(),\n ranges: vm.dateRangesEn,\n opens: 'left',\n //alwaysShowCalendars: true,\n //autoUpdateInput: false,\n //ranges: createQuarters(),\n locale: {\n format: 'DD/MM/YYYY',\n applyLabel: \"Apply\",\n cancelLabel: \"Cancel\",\n \"fromLabel\": \"from\",\n \"toLabel\": \"to\",\n \"customRangeLabel\": \"Choose\",\n \"daysOfWeek\": [\n \"Sn\",\n \"Mn\",\n \"Tu\",\n \"Wn\",\n \"Th\",\n \"Fr\",\n \"St\"\n ],\n \"monthNames\": [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\"\n ],\n \"firstDay\": 1\n }\n //ranges: createQuarters()\n }, refreshDatePickersFormat);\n }\n\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.report')\n .controller('ReportAlertController', ReportAlertController);\n\n /** @ngInject */\n function ReportAlertController($rootScope, $scope, $stateParams, $translate, $$report, $filter,\n user, api, ReportDocumentService, ReportSettingsService, toastService, $location) {\n var vm = this;\n vm.report = $$report;\n vm.reportId = $stateParams.id;\n vm.reportModules = $$report.reportModules;\n vm.reportCategories = $$report.moduleCategories;\n vm.user = user;\n vm.hasPermission = false;\n vm.periodTypes = null;\n vm.weekDays = null;\n vm.days = [];\n vm.times = [];\n vm.keywords = null;\n vm.formulas = [];\n vm.reportScores = [];\n \n\n vm.sortTypes = [{\n title: $translate.instant('REPORT.ALERT.TOPBOTTOM.SORT_TYPE_ASC'),\n key : 'SORT_TYPE_ASC'\n },{\n title: $translate.instant('REPORT.ALERT.TOPBOTTOM.SORT_TYPE_DESC'),\n key : 'SORT_TYPE_DESC'\n }];\n\n vm.addNewWidget = function() {\n if(!vm.currentSetting.topBottomWidgets) {\n vm.currentSetting.topBottomWidgets = [];\n }\n vm.currentSetting.topBottomWidgets.push({\n title: '',\n attributeName: '',\n color: '#4FF120',\n alternateColor: '#DB4953',\n changeColumnName: '',\n period: 7,\n orderFormula: '',\n sortType: 'SORT_BY_DESC',\n formulaCols: []\n })\n }\n\n vm.removeWidget = function(index) {\n vm.currentSetting.topBottomWidgets.splice(index,1);\n }\n\n vm.openTopBottomPreview = function ($event) {\n ReportSettingsService.openTopBottomPreview($scope,$event, api, vm.report, vm.user, vm.currentSetting);\n }\n\n \n\n vm.periodParams = {\n each : $translate.instant('REPORT.ALERT.EACH')\n }\n\n \n vm.selectedIndexToEdit = null;\n vm.reportAlertSettings = null;\n\n vm.webUrl = $location.protocol() + '://' + $location.host() + ':' + $location.port();\n\n vm.setDefaultWebUrl = function() {\n if(!vm.currentSetting.condition.webUrl)\n vm.currentSetting.condition.webUrl = vm.webUrl;\n }\n \n vm.formatPeriod = function(input) {\n return $filter('formatPeriod')(input);\n };\n\n // FUNCTIONS\n vm.saveKeywords = saveKeywords;\n vm.savePeriod = savePeriod;\n\n vm.deleteReportAlert = function(event, index) {\n if(vm.reportAlertSettings[index].id) {\n api.settings.deleteAlertItem(vm.reportAlertSettings[index].id)\n .then(function (r) {\n toastService.serverError($translate.instant('REPORT.ALERT.DELETED_SUCCESSFULLY'));\n getReportAlertItems();\n }, function (err) {\n console.log(err);\n });\n }\n }\n\n vm.updateRepeatType = function() {\n vm.currentSetting.period = {type: vm.currentSetting.period.type};\n }\n\n function findFormulas() {\n api.report.findFormulas(vm.reportId)\n .then(function (response){\n vm.formulas = [];\n vm.reportScores = [];\n response.forEach(function (r) {\n var formula_settings = JSON.parse(r.settings);\n if(formula_settings.isActive) {\n if(r.settingType == 'REPORT_SCORE_CALC') {\n vm.reportScores.push({\n 'id' : r.id,\n 'isActive' : true,\n 'settingType' : r.settingType, \n 'settings' : JSON.parse(r.settings)\n })\n }\n vm.formulas.push({\n 'id' : r.id,\n 'isActive' : true,\n 'settingType' : r.settingType, \n 'settings' : JSON.parse(r.settings)\n })\n }\n });\n })\n }\n\n vm.addFormulaToOrderList = function(index, selectedFormula) {\n if(selectedFormula && vm.currentSetting.topBottomWidgets.length > index) {\n if(vm.currentSetting.topBottomWidgets[index].formulaCols.filter(function(f) {return f.formulaName == selectedFormula.settings.formulaName}).length == 0 ) {\n vm.currentSetting.topBottomWidgets[index].formulaCols.push({\n \"id\": selectedFormula.id,\n \"formulaName\": selectedFormula.settings.formulaName, \n \"definition\": selectedFormula.settings.definition, \n \"order\": vm.currentSetting.topBottomWidgets[index].formulaCols.length });\n }\n }\n }\n\n vm.removeFormulaFromOrderList = function(index, selectedFormula) {\n if(selectedFormula) {\n vm.currentSetting.topBottomWidgets[index].formulaCols = \n vm.currentSetting.topBottomWidgets[index].formulaCols.filter(function(f) {\n return f.formulaName != selectedFormula.formulaName\n });\n }\n }\n\n vm.goUp = function (index, item) {\n for (var i = 0; i < vm.currentSetting.topBottomWidgets[index].formulaCols.length; i++) {\n if (vm.currentSetting.topBottomWidgets[index].formulaCols[i] == item && i != 0) {\n vm.currentSetting.topBottomWidgets[index].formulaCols[i].order = vm.currentSetting.topBottomWidgets[index].formulaCols[i].order - 1;\n vm.currentSetting.topBottomWidgets[index].formulaCols[i - 1].order = vm.currentSetting.topBottomWidgets[index].formulaCols[i].order + 1;\n }\n }\n vm.currentSetting.topBottomWidgets[index].formulaCols.sort(function (a, b) {\n return a.order - b.order;\n });\n }\n\n vm.goDown = function (index, item) {\n for (var i = 0; i < vm.currentSetting.topBottomWidgets[index].formulaCols.length; i++) {\n if (vm.currentSetting.topBottomWidgets[index].formulaCols[i] == item && i != (vm.currentSetting.topBottomWidgets[index].formulaCols.length-1)) {\n vm.currentSetting.topBottomWidgets[index].formulaCols[i].order = vm.currentSetting.topBottomWidgets[index].formulaCols[i].order + 1;\n vm.currentSetting.topBottomWidgets[index].formulaCols[i + 1].order = vm.currentSetting.topBottomWidgets[index].formulaCols[i].order - 1;\n }\n }\n vm.currentSetting.topBottomWidgets[index].formulaCols.sort(function (a, b) {\n return a.order - b.order;\n });\n }\n\n \n\n vm.validateItem = function(settings) {\n if(settings.period.type == 'WEEKLY') {\n if(settings.period.repeatWeekDay == undefined || settings.period.repeatTime == undefined) {\n return 'REPORT.ALERT.REPEATDAYTIMEWARNING';\n }\n }else if(settings.period.type == 'DAILY') {\n if(settings.period.repeatTime == undefined) {\n return 'REPORT.ALERT.REPEATTIMEWARNING';\n }\n }else if(settings.period.type == 'MONTHLY') {\n if(settings.period.repeatTime == undefined || settings.period.repeatDay == undefined) {\n return 'REPORT.ALERT.REPEATDAYTIMEWARNING';\n }\n }\n\n if(settings.type == 'TOPBOTTOM' && settings.period.repeatTime <= 600) {\n return 'REPORT.ALERT.TOPBOTTOMTIMEWARNING';\n }\n return '';\n }\n\n vm.saveAlertItem = function() {\n\n var errorMsg = vm.validateItem(vm.currentSetting);\n if(errorMsg != '') {\n toastService.serverError($translate.instant(errorMsg));\n return;\n }\n \n\n if(!vm.currentSetting.id) {\n api.settings.saveAlertItem(vm.reportId, vm.currentSetting)\n .then(function (r) {\n toastService.serverError($translate.instant('SHARED.SAVE_SUCCESS'));\n getReportAlertItems();\n vm.clear();\n }, function (err) {\n console.log(err);\n });\n }else {\n api.settings.updateAlertItem(vm.currentSetting.id, vm.currentSetting)\n .then(function (r) {\n toastService.serverError($translate.instant('SHARED.SAVE_SUCCESS'));\n getReportAlertItems();\n }, function (err) {\n console.log(err);\n });\n }\n \n }\n\n Number.prototype.padLeft = function (n, str) {\n return (this < 0 ? '-' : '') +\n Array(n - String(Math.abs(this)).length + 1)\n .join(str || '0') +\n (Math.abs(this));\n }\n\n vm.mode = 'NEW';\n\n vm.editSetting = function(index) {\n vm.selectedIndexToEdit = index;\n // deep copy\n vm.currentSetting = angular.copy(vm.reportAlertSettings[index]);\n vm.mode = 'UPDATE'\n }\n\n vm.clear = function() {\n vm.currentSetting = {\n period : {\n },\n condition: {\n categories: [],\n },\n configuration : {\n scoreChange: {}\n }\n };\n vm.mode = 'NEW';\n }\n\n vm.clear();\n\n vm.modelChanged = function() {\n vm.mainCategory = null;\n vm.searchMainCategory = null;\n vm.sub1Category = null;\n vm.searchSub1Category = null;\n vm.sub2Category = null;\n vm.searchSub2Category = null;\n vm.categoryRate = null;\n }\n \n vm.moduleCategoryExists = function() {\n if(!vm.currentSetting.condition || !vm.module) {\n return false;\n }\n\n var moduleOpenId = vm.getModuleOpenId(vm.module.id);\n\n if(vm.sub2Category) {\n return vm.currentSetting.condition.categories.filter(function (k) { \n return k.moduleId == moduleOpenId && k.category.id == vm.mainCategory.id\n && vm.sub1Category && k.category.sub && k.category.sub.id == vm.sub1Category.id\n && vm.sub2Category && k.category.sub.sub && k.category.sub.sub.id == vm.sub2Category.id\n }).length > 0;\n }\n\n if(vm.sub1Category) {\n return vm.currentSetting.condition.categories.filter(function (k) { \n return k.moduleId == moduleOpenId && k.category.id == vm.mainCategory.id\n && vm.sub1Category && k.category.sub && k.category.sub.id == vm.sub1Category.id\n && !k.category.sub.sub\n }).length > 0;\n }\n\n if(vm.mainCategory) {\n return vm.currentSetting.condition.categories.filter(function (k) { \n return k.moduleId == moduleOpenId && k.category.id == vm.mainCategory.id\n && !k.category.sub && !k.category.sub.sub\n }).length > 0;\n }\n\n return false;\n }\n\n vm.addModuleCategory = function() {\n if (vm.categoryRate != null && (vm.categoryRate < 0 || vm.categoryRate > 100))\n return;\n if(vm.moduleCategoryExists()) {\n console.log('Already Exists');\n return;\n }\n var moduleOpenId = vm.getModuleOpenId(vm.module.id);\n var newCategory = { moduleId : moduleOpenId,\n rate : vm.categoryRate,\n category: {\n id: vm.mainCategory.id , name: vm.mainCategory.name} };\n if(vm.sub1Category) {\n newCategory.category.sub = {id: vm.sub1Category.id, name: vm.sub1Category.name};\n if(vm.sub2Category) {\n newCategory.category.sub.sub = { id: vm.sub2Category.id,name: vm.sub2Category.name};\n }\n }\n\n vm.currentSetting.condition.categories.push(newCategory);\n\n vm.modelChanged();\n }\n\n vm.removeModelCategory = function(index) {\n vm.currentSetting.condition.categories.splice(index,1);\n }\n\n vm.getCategoryTitle = function (cat) {\n if(!cat) {\n return;\n }\n var title = cat.name;\n var category = vm.reportCategories.filter(function (k) { return k.id == cat.id; })[0];\n if (category && category.localVariables) {\n var localVariable = category.localVariables.filter(function (k) { return $translate.use() == k.language; })[0];\n if (localVariable) title = localVariable.value;\n }\n return title;\n }\n\n vm.getModuleOpenId = function (id) {\n if(!id) {\n return;\n }\n var title = \"\";\n var module = vm.reportModules.filter(function (m) {return m.moduleId == id});\n if(module && module.length > 0) {\n return module[0].openModuleId;\n }\n return \"\";\n }\n\n vm.getModuleNameById = function (id) {\n if(!id) {\n return;\n }\n var title = \"\";\n var module = vm.reportModules.filter(function (m) {return m.openModuleId == id});\n if(module && module.length > 0) {\n return module[0].module.name;\n }\n return \"\";\n }\n\n vm.getCategoryTitleById = function (id) {\n if(!id) {\n return;\n }\n \n var category = vm.reportCategories.filter(function (k) { return k.id == id; })[0];\n var title = category.name;\n if (category && category.localVariables) {\n var localVariable = category.localVariables.filter(function (k) { return $translate.use() == k.language; })[0];\n if (localVariable) title = localVariable.value;\n }\n return title;\n }\n\n vm.mainCategorySearch = function(query) {\n var categories = vm.reportCategories.filter(function (k) { \n \n return k.moduleId == vm.module.id\n && k.parent == null});\n if(query){\n return categories.filter(vm.createFilterFor(query));\n }\n return categories;\n }\n\n vm.mainCategoryChanged = function() {\n vm.sub1Category = null;\n vm.searchSub1Category = null;\n vm.sub1CategoryChanged();\n }\n\n vm.sub1CategorySearch = function(query) {\n var categories = vm.reportCategories.filter(function (k) { return k.parent == vm.mainCategory.id });\n if(query) {\n return categories.filter(vm.createFilterFor(query));\n }\n return categories;\n }\n\n vm.sub1CategoryChanged = function() {\n vm.sub2Category = null;\n vm.searchSub2Category = null;\n vm.sub2CategoryChanged();\n }\n\n vm.sub2CategoryChanged = function() {\n vm.categoryAlreadyAdded = vm.moduleCategoryExists();\n }\n\n vm.sub2CategorySearch = function(query) {\n var categories = vm.reportCategories.filter(function (k) { return k.parent == vm.sub1Category.id });\n if(query) {\n return categories.filter(vm.createFilterFor(query));\n }\n return categories;\n }\n\n vm.createFilterFor =function(query) {\n var lowercaseQuery = angular.lowercase(query);\n return function filterFn(item) {\n return (angular.lowercase(item.name).indexOf(lowercaseQuery) != -1);\n };\n }\n\n vm.hasSubscription = function() {\n return vm.currentSetting.subscriptionList.filter(function(k) {\n return k == vm.newSubscription;\n }).length > 0;\n }\n\n vm.removeSubscription = function (index) {\n vm.currentSetting.subscriptionList.splice(index, 1);\n vm.categoryAlreadyAdded = vm.moduleCategoryExists();\n }\n \n \n\n vm.addSubscription = function($event) {\n \n\n \n if(!vm.currentSetting.subscriptionList) {\n vm.currentSetting.subscriptionList = [];\n }\n if(vm.hasSubscription(vm.newSubscription)) {\n console.log(\"Already exists\");\n return;\n }\n vm.currentSetting.subscriptionList.push(vm.newSubscription);\n vm.newSubscription = null;\n }\n\n vm.getFrequencies = function() {\n if(vm.currentSetting.type = 'NEWSFREQUENCY' ) {\n if(!vm.currentSetting.condition || !vm.currentSetting.condition.frequencies) {\n vm.currentSetting.condition.frequencies = [\n { name :\"TOP5\", selected: false },\n { name :\"TOP10\", selected: false },\n { name :\"BOTTOM5\", selected: false },\n { name :\"BOTTOM10\", selected: false },\n ];\n }\n\n return vm.currentSetting.condition.frequencies;\n \n }\n }\n\n function hasPermission() {\n vm.hasPermission = user.hasPermission('REPORT/ALERT/UPDATE');\n }\n\n function saveKeywords() {\n var filteredKeywords = [];\n var keywords = vm.keywords.split(/\\r|\\n/);\n $.each(keywords, function (index, keyword) {\n if (keyword.trim())\n filteredKeywords.push(keyword.trim());\n });\n var body = { keywords: filteredKeywords };\n api.report.alert.saveKeywords(vm.reportId, body)\n .then(function (r) {\n toastService.serverError($translate.instant('SHARED.SAVE_SUCCESS'));\n }, function (err) {\n console.log(err);\n toastService.serverError($translate.instant('SHARED.SAVE_FAILED'));\n });\n }\n\n function savePeriod() {\n api.report.alert.savePeriod(vm.reportId, vm.period)\n .then(function (r) {\n toastService.serverError($translate.instant('SHARED.SAVE_SUCCESS'));\n }, function (err) {\n console.log(err);\n toastService.serverError($translate.instant('SHARED.SAVE_FAILED'));\n });\n }\n\n function setTimes() {\n var name = null;\n for (var i = 0; i < 24; i++) {\n name = (i * 100).padLeft(4);\n vm.times.push({ value: i * 100, name: name.substring(0, 2) + ':' + name.substring(2) });\n }\n for (var i = 1; i < 32; i++) {\n vm.days.push(i);\n }\n }\n\n function getReportAlertItems() {\n api.settings.getAlertItems(vm.reportId)\n .then(function (r){\n if(r) {\n vm.reportAlertSettings = r;\n }\n },function (err) {\n console.log(err);\n toastService.serverError(err);\n });\n }\n\n function getReportPeriod() {\n api.report.alert.getPeriod(vm.reportId)\n .then(function (r) {\n if (r)\n vm.period = r;\n }, function (err) {\n console.log(err);\n toastService.serverError(err);\n });\n }\n\n function getKeywords() {\n api.report.alert.getKeywords(vm.reportId)\n .then(function (r) {\n if (r != null && r.length > 0)\n vm.keywords = r.join(\"\\r\\n\")\n }, function (err) {\n console.log(err);\n toastService.serverError(err);\n });\n }\n\n function setPeriodVariables() {\n vm.categoryAlreadyAdded = false;\n vm.periodTypes = [\n { value: 'HOURLY', name: $translate.instant('SHARED.TIME_PERIOD.HOURLY') },\n { value: 'DAILY', name: $translate.instant('SHARED.TIME_PERIOD.DAILY') },\n { value: 'WEEKLY', name: $translate.instant('SHARED.TIME_PERIOD.WEEKLY') },\n { value: 'MONTHLY', name: $translate.instant('SHARED.TIME_PERIOD.MONTHLY') }\n ];\n vm.weekDays = [\n { value: 2, name: $translate.instant('SHARED.WEEKDAYS.MONDAY') },\n { value: 3, name: $translate.instant('SHARED.WEEKDAYS.TUESDAY') },\n { value: 4, name: $translate.instant('SHARED.WEEKDAYS.WEDNESDAY') },\n { value: 5, name: $translate.instant('SHARED.WEEKDAYS.THURSDAY') },\n { value: 6, name: $translate.instant('SHARED.WEEKDAYS.FRIDAY') },\n { value: 7, name: $translate.instant('SHARED.WEEKDAYS.SATURDAY') },\n { value: 1, name: $translate.instant('SHARED.WEEKDAYS.SUNDAY') }\n ];\n\n vm.dayNames = [\n $translate.instant('SHARED.WEEKDAYS.SUNDAY'),\n $translate.instant('SHARED.WEEKDAYS.MONDAY'),\n $translate.instant('SHARED.WEEKDAYS.TUESDAY'),\n $translate.instant('SHARED.WEEKDAYS.WEDNESDAY'),\n $translate.instant('SHARED.WEEKDAYS.THURSDAY'),\n $translate.instant('SHARED.WEEKDAYS.FRIDAY'),\n $translate.instant('SHARED.WEEKDAYS.SATURDAY')\n ];\n \n vm.lang = $translate.use();\n\n vm.tresholds = [\n { value: 10 , name : (vm.lang == \"en\" ? \"10 %\" : \"% 10\")},\n { value: 20 , name : (vm.lang == \"en\" ? \"20 %\" : \"% 20\")},\n { value: 30 , name : (vm.lang == \"en\" ? \"30 %\" : \"% 30\")},\n { value: 40 , name : (vm.lang == \"en\" ? \"40 %\" : \"% 40\")},\n { value: 50 , name : (vm.lang == \"en\" ? \"50 %\" : \"% 50\") },\n { value: 100 , name : (vm.lang == \"en\" ? \"100 %\" : \"% 100\") }\n ] ;\n\n vm.tresholdTypes = [\n {value : \"FALL\", name : $translate.instant('REPORT.ALERT.TRESHOLDTYPES.FALL')},\n {value : \"RISE\", name : $translate.instant('REPORT.ALERT.TRESHOLDTYPES.RISE')}\n ];\n\n vm.alertTypes = [\n {value : \"TIMEBASEDREPSCORE\", name : $translate.instant('REPORT.ALERT.TYPES.TIMEBASEDREPSCORE')},\n {value : \"DISCREDITING\", name : $translate.instant('REPORT.ALERT.TYPES.DISCREDITING')},\n {value : \"TOPBOTTOM\", name : $translate.instant('REPORT.ALERT.TYPES.TOPBOTTOM')},\n {value : \"PROVIDERREPSCORE\", name : $translate.instant('REPORT.ALERT.TYPES.PROVIDERREPSCORE')},\n {value : \"NEWSFREQUENCY\", name : $translate.instant('REPORT.ALERT.TYPES.NEWSFREQUENCY')},\n {value : \"SCORECHANGE\", name : $translate.instant('REPORT.ALERT.TYPES.SCORECHANGE')}\n ];\n }\n \n function init() {\n findFormulas();\n setPeriodVariables();\n setTimes();\n hasPermission();\n // getReportPeriod();\n getReportAlertItems();\n getKeywords();\n }\n\n init();\n\n $rootScope.$on('$translateChangeSuccess', function (event, current, previous) {\n setPeriodVariables();\n });\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.pipeline', [])\n .config(config);\n\n /** @ngInject */\n function config($stateProvider, $translatePartialLoaderProvider, msApiProvider, msNavigationServiceProvider, authProvider) {\n var navigation = 'app/navigation/layouts/horizontal-navigation/navigation.html';\n var user = authProvider.getCurrentUser();\n // State\n $stateProvider\n .state('app.pipeline', {\n abstract: true,\n url: '/pipeline'\n })\n .state('app.pipeline.create', {\n url: '/create',\n params: {\n type: \"Pipeline\",\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: 'app/main/apps/pipelines/views/create/create.html',\n controller: 'CreatePipelineController as vm'\n }\n },\n bodyClass: 'create'\n })\n .state('app.pipeline.settings', {\n url: '/:id/settings',\n resolve: {\n $$pipeline: function($http, $stateParams) {\n return $http({\n method: 'GET',\n url: '/api/pipeline/' + $stateParams.id\n })\n .then(function(response) {\n $stateParams.type = \"Pipeline\";\n $stateParams.name = response.data.name;\n $stateParams.color = \"#ffca28\";\n return response.data;\n });\n }\n },\n views: {\n 'navigation@app': {\n templateUrl: navigation,\n controller: 'NavigationController as vm'\n },\n 'content@app': {\n templateUrl: 'app/main/apps/pipelines/views/settings/settings.html',\n controller: 'PipelineSettingsController as vm'\n }\n },\n bodyClass: 'settings'\n });\n\n // Translation\n //$translatePartialLoaderProvider.addPart('app/main/apps/classification');\n\n msNavigationServiceProvider.saveItem('pipeline_create', {\n title: 'Create',\n translate: \"SHARED.CREATE\",\n state: 'app.pipeline.create',\n weight: 1,\n hidden: function($scope, $state) {\n var result = true;\n if ($state)\n result = !$state.includes(\"**.pipeline.create\");\n return result;\n }\n\n });\n // Navigation\n msNavigationServiceProvider.saveItem('pipeline_settings', {\n title: 'settings',\n translate: \"SHARED.SETTINGS\",\n state: 'app.pipeline.settings',\n weight: 1,\n hidden: function($scope, $state) {\n var result = true;\n if ($state)\n result = !$state.includes(\"**.pipeline.settings\");\n return result;\n }\n\n });\n }\n\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.pipeline')\n .service('PipelineService', PipelineService)\n .controller('DeletePipelineDialogController', DeletePipelineDialogController)\n .controller('SavePipelineDialogController', DeletePipelineDialogController)\n .controller('BasicSuccessDialogController', BasicSuccessDialogController)\n .controller('PipelineCreateDialogController', PipelineCreateDialogController);\n\n /** @ngInject */\n function PipelineService($q, $log, $translate, $mdMedia, $mdDialog, api, user, $settings) {\n\n // Create Pipeline\n this.createPipeline = function ($scope, $state, $event, pipeline, workspaces) {\n\n var title = $translate.instant('MODULES.NEW_PIPELINE');\n var deferred = $q.defer();\n\n var lastWorkspace = user.workspaces.filter(function (a) { return a.id == $settings.commonSettings.lastWorkspaceId });\n var otherWorkspaces = user.workspaces.filter(function (a) { return a.id != $settings.commonSettings.lastWorkspaceId });\n var workspace = lastWorkspace.concat(otherWorkspaces);\n\n showCreatePipelineDialog($scope, $event, pipeline, title, workspace, user.permissions)\n .then(function (answer) {\n if (!answer) return;\n pipeline.workspaceId = answer.id;\n api.pipeline.save(pipeline)\n .then(function (response) {\n var successTitle = $translate.instant('PIPELINE.CONFIRM.CREATE_PIPELINE_RESULT_SUCCESS_TITLE');\n var successBody = $translate.instant('PIPELINE.CONFIRM.CREATE_PIPELINE_RESULT_SUCCESS_BODY');\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function() {\n deferred.resolve(response);\n //$state.go('app.modules.list');\n });\n },\n function (response) {\n $log.error(response);\n });\n });\n return deferred.promise;\n }\n\n // Delete Pipeline\n this.deletePipeline = function($scope, $state, $event, pipeline) {\n showDeletePipelineConfirmDialog($scope, $event, pipeline)\n .then(function(answer) {\n if (!answer) return;\n\n api.pipeline.delete(pipeline)\n .then(function(response) {\n var successTitle = $translate.instant('PIPELINE.CONFIRM.DELETE_PIPELINE_RESULT_SUCCESS_TITLE');\n var successBody = $translate.instant('PIPELINE.CONFIRM.DELETE_PIPELINE_RESULT_SUCCESS_BODY');\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function() {\n $state.go('app.modules.list');\n });\n },\n function(response) {\n $log.error(response);\n });\n });\n }\n\n this.savePipeline = function($scope, $state, $event, pipeline) {\n showSavePipelineConfirmDialog($scope, $event, pipeline)\n .then(function(answer) {\n if (!answer) return;\n\n api.pipeline.update(pipeline)\n .then(function(response) {\n var successTitle = $translate.instant('PIPELINE.CONFIRM.SAVE_PIPELINE_RESULT_SUCCESS_TITLE');\n var successBody = $translate.instant('PIPELINE.CONFIRM.SAVE_PIPELINE_RESULT_SUCCESS_BODY');\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function() {\n $state.reload();\n });\n },\n function(response) {\n $log.error(response);\n });\n });\n }\n\n\n function showCreatePipelineDialog($scope, $event, pipeline, title, workspaces, workspacePermissions) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'PipelineCreateDialogController as vm',\n templateUrl: 'app/main/apps/pipelines/services/create-pipeline-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n pipeline: pipeline,\n title: title,\n workspaces: workspaces,\n workspacePermissions: workspacePermissions\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n\n\n function showDeletePipelineConfirmDialog($scope, $event, pipeline) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'DeletePipelineDialogController as vm',\n templateUrl: 'app/main/apps/pipelines/services/delete-pipeline-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n pipeline: pipeline\n }\n })\n .then(function(answer) {\n deferred.resolve(answer);\n }, function() {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function() {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function(wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showSavePipelineConfirmDialog($scope, $event, pipeline) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'SavePipelineDialogController as vm',\n templateUrl: 'app/main/apps/pipelines/services/save-pipeline-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n pipeline: pipeline\n }\n })\n .then(function(answer) {\n deferred.resolve(answer);\n }, function() {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function() {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function(wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showSuccessDialog($scope, $event, title, body) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'BasicSuccessDialogController as vm',\n templateUrl: 'app/main/apps/pipelines/services/basic-success-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body\n }\n })\n .then(function(answer) {\n deferred.resolve();\n }, function(answer) {\n deferred.resolve();\n });\n $scope.$watch(function() {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function(wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n }\n\n function DeletePipelineDialogController($scope, $state, $stateParams, $log, $mdDialog, pipeline) {\n var vm = this;\n vm.pipeline = pipeline;\n //vm.pipelineId = $stateParams.id;\n vm.order = 'order';\n vm.orderDescending = false;\n vm.hasModules = (vm.pipeline.modules != null && vm.pipeline.modules.length > 0);\n vm.icons = ['none', 'icon-source-fork', 'icon-linode', 'icon-tooltip-text', 'icon-nfc-tap', 'icon-emoticon', 'icon-code-tags','icon-emoticon']\n\n vm.msScrollOptions = {\n suppressScrollX: true\n };\n\n vm.openModule = function(module) {\n $state.go('app.module.overview', {\n id: module.id\n });\n vm.cancel();\n };\n\n vm.cancel = function() {\n $mdDialog.cancel();\n };\n vm.ok = function() {\n $mdDialog.hide(true);\n };\n\n }\n\n function PipelineCreateDialogController($mdDialog, pipeline, title, workspaces, workspacePermissions) {\n var vm = this;\n vm.title = title;\n var permission = getPermission();\n vm.workspaces = workspaces.filter(function (workspace) {\n var wsp = workspacePermissions.find(function (ws) { return ws.workspaceId === workspace.id });\n if (wsp.permissions.indexOf(permission) != -1) {\n return true;\n }\n })\n vm.selectedWorkspace = vm.workspaces[0];\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(vm.selectedWorkspace);\n };\n\n function getPermission() {\n return \"PIPELINE/CREATE\";\n };\n }\n\n function SavePipelineDialogController($scope, $state, $stateParams, $log, $mdDialog, pipeline) {\n var vm = this;\n vm.pipeline = pipeline;\n\n vm.cancel = function() {\n $mdDialog.cancel();\n };\n vm.ok = function() {\n $mdDialog.hide(true);\n };\n\n }\n\n function BasicSuccessDialogController($mdDialog, title, body) {\n var vm = this;\n vm.title = title;\n vm.body = body;\n\n vm.cancel = function() {\n $mdDialog.cancel();\n };\n vm.ok = function() {\n $mdDialog.hide(true);\n };\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.pipeline')\n .controller('PipelineSettingsController', PipelineSettingsController);\n\n /** @ngInject */\n function PipelineSettingsController($rootScope, $scope, $state, $stateParams, $log, $mdDialog, $translate, $mdMedia, api, PipelineService, $$pipeline) {\n var vm = this;\n //vm.pipelineId = $stateParams.id;\n vm.isOpen = false;\n vm.selectedMode = 'md-scale';\n //Data\n //\n vm.pipeline = $$pipeline;\n console.log(vm.pipeline);\n vm.added = [];\n vm.dragging = false;\n\n vm.stages = [];\n vm.msScrollOptions = {\n suppressScrollX: true\n };\n\n vm.sortableCardOptions = {\n cancel: \".unsortable\",\n appendTo: 'body',\n connectWith: '.board-list',\n delay: 75,\n distance: 7,\n forcePlaceholderSize: true,\n placeholder: 'board-list-item',\n tolerance: 'pointer',\n start: function(event, ui) {\n vm.dragging = true;\n var model = ui.item.sortable.model;\n angular.forEach(vm.added, function(item) {\n if (item.name == model.name) {\n item.sorting = true;\n }\n });\n $scope.$apply();\n $log.info(model.name + \" start | \" + vm.dragging);\n },\n stop: function(event, ui) {\n angular.forEach(vm.added, function(item) {\n item.sorting = false;\n });\n vm.dragging = false;\n $log.info(ui.item.sortable.model.name + \" stop | \" + vm.dragging);\n }\n };\n\n // Methods\n vm.preventDefault = preventDefault;\n vm.getIcon = getIcon;\n\n api.pipeline.definitions('Analyzer')\n .then(function (response) {\n vm.definitions = response;\n },\n function (response) {\n $log.error(response);\n })\n\n if (vm.pipeline.stages != null && vm.pipeline.stages.length > 0)\n vm.added = vm.pipeline.stages;\n api.pipeline.stages()\n .then(function(response) {\n function check(value) {\n var result = true;\n for (var indx in vm.added) {\n var item = vm.added[indx];\n if (item.id == value.id) {\n result = false;\n break;\n }\n }\n return result;\n }\n\n vm.stages = response.filter(check);\n },\n function(response) {\n $log.error(response);\n });\n\n vm.showInfo = function() {\n return vm.added.length == 0 && !vm.dragging;\n };\n\n vm.showIcon = function($index, item) {\n return ($index + 1 < vm.added.length) && !item.sorting;\n }\n\n vm.addStage = function() {\n var item = vm.selected;\n vm.added.push(vm.selected);\n $.each(vm.stages, function(i) {\n if (vm.stages[i].id === item.id) {\n vm.stages.splice(i, 1);\n return false;\n }\n });\n vm.selected = null;\n }\n\n vm.removeStage = function() {\n var item = vm.selectedAdded;\n $.each(vm.added, function(i) {\n if (vm.added[i].id === item.id) {\n vm.added.splice(i, 1);\n return false;\n }\n });\n vm.stages.push(item);\n vm.selectedAdded = null;\n }\n\n //Methods\n\n vm.filters = {\n search: ''\n };\n vm.filtersDefaults = angular.copy(vm.filters);\n\n //Stages\n\n vm.sortableOptions = {\n handle: '.handle',\n forceFallback: true,\n ghostClass: 'todo-item-placeholder',\n fallbackClass: 'todo-item-ghost',\n fallbackOnBody: true,\n sort: true\n };\n\n /**\n * Prevent default\n *\n * @param e\n */\n function preventDefault(e) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n //Delete Pipeline\n vm.deletePipeline = function($event) {\n PipelineService.deletePipeline($scope, $state, $event, vm.pipeline);\n }\n\n //Save Pipeline\n vm.savePipeline = function($event) {\n PipelineService.savePipeline($scope, $state, $event, vm.pipeline);\n }\n\n\n function getIcon(stage) {\n switch (stage.id) {\n case 1:\n return \"icon-xml\";\n case 2:\n return \"icon-link-off\";\n case 3:\n return \"icon-twitter-circle\";\n case 4:\n return \"icon-twitter-retweet\";\n case 5:\n return \"icon-twitter-box\";\n case 6:\n return \"icon-hexagon-outline\";\n case 7:\n return \"icon-arrange-send-to-back\";\n case 8:\n return \"icon-arrange-bring-to-front\";\n case 10:\n return \"icon-alphabetical\";\n case 11:\n return \"icon-spellcheck\"; //\"icon-format-text\";\n default:\n return \"icon-format-text\";\n }\n }\n\n $scope.$watchCollection(function() {\n return vm.added;\n }, function(data) {\n if (data) {\n $.each(data, function (index, val) {\n val.rank = index + 1;\n });\n } else {\n return null;\n }\n });\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.pipeline')\n .controller('CreatePipelineController', CreatePipelineController);\n\n /** @ngInject */\n\n function CreatePipelineController($scope, $state, $stateParams, $mdDialog, $log, api, PipelineService,user) {\n var vm = this;\n //$log.info($stateParams.rm);\n vm.pipeline = {};\n vm.added = [];\n vm.dragging = false;\n vm.createProcessing = false;\n\n vm.stages = [];\n vm.msScrollOptions = {\n suppressScrollX: true\n };\n\n vm.sortableCardOptions = {\n cancel: \".unsortable\",\n appendTo: 'body',\n connectWith: '.board-list',\n delay: 75,\n distance: 7,\n forcePlaceholderSize: true,\n placeholder: 'board-list-item',\n tolerance: 'pointer',\n start: function (event, ui) {\n vm.dragging = true;\n var model = ui.item.sortable.model;\n angular.forEach(vm.added, function (item) {\n if (item.name == model.name) {\n item.sorting = true;\n }\n });\n $scope.$apply();\n $log.info(model.name + \" start | \" + vm.dragging);\n },\n stop: function (event, ui) {\n angular.forEach(vm.added, function (item) {\n item.sorting = false;\n });\n vm.dragging = false;\n $log.info(ui.item.sortable.model.name + \" stop | \" + vm.dragging);\n }\n };\n\n vm.showInfo = function () {\n $log.info(\"showInfo | \" + vm.added.length + \" | \" + vm.dragging);\n return vm.added.length == 0 && !vm.dragging;\n };\n\n vm.showIcon = function ($index, item) {\n return ($index + 1 < vm.added.length) && !item.sorting;\n }\n\n //Methods\n\n vm.filters = {\n search: ''\n };\n vm.filtersDefaults = angular.copy(vm.filters);\n\n //Stages\n api.pipeline.stages()\n .then(function (response) {\n vm.stages = response;\n },\n function (response) {\n $log.error(response);\n });\n\n vm.sortableOptions = {\n handle: '.handle',\n forceFallback: true,\n ghostClass: 'todo-item-placeholder',\n fallbackClass: 'todo-item-ghost',\n fallbackOnBody: true,\n sort: true\n };\n\n\n // Methods\n vm.createPipeline = createPipeline;\n vm.preventDefault = preventDefault;\n vm.getIcon = getIcon;\n vm.cancel = cancel;\n\n /**\n * Prevent default\n *\n * @param e\n */\n function preventDefault(e) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n function createPipeline($event) {\n if (user.workspaces && user.workspaces.length > 1) {\n var pipeline = {\n name: vm.pipeline.name,\n definition: vm.pipeline.definition,\n stages: vm.added\n };\n PipelineService.createPipeline($scope, $state, $event, pipeline)\n .then(function(response){\n if(response)\n $state.go('app.pipeline.settings', { id: response.id });\n },function(err){\n console.log(err);\n });\n } else if (user.workspaces && user.workspaces.length == 1){\n var pipeline = {\n name: vm.pipeline.name,\n definition: vm.pipeline.definition,\n stages: vm.added,\n workspaceId: user.workspaces[0].id \n };\n vm.createProcessing = true;\n\n api.pipeline.save(pipeline)\n .then(function (response) {\n vm.createProcessing = false;\n $state.go('app.pipeline.settings', { id: response.id });\n },\n function (response) {\n vm.createProcessing = false;\n $log.error(response);\n });\n }\n }\n\n function cancel() {\n $state.go('app.modules.list');\n }\n\n function getIcon(stage) {\n switch (stage.id) {\n case 1:\n return \"icon-xml\";\n case 2:\n return \"icon-link-off\";\n case 3:\n return \"icon-twitter-circle\";\n case 4:\n return \"icon-twitter-retweet\";\n case 5:\n return \"icon-twitter-box\";\n case 6:\n return \"icon-hexagon-outline\";\n case 7:\n return \"icon-arrange-send-to-back\";\n case 8:\n return \"icon-arrange-bring-to-front\";\n case 10:\n return \"icon-alphabetical\";\n case 11:\n return \"icon-broom\";\n }\n }\n\n vm.addStage = function () {\n var item = vm.selected;\n vm.added.push(vm.selected);\n $.each(vm.stages, function (i) {\n if (vm.stages[i].id === item.id) {\n vm.stages.splice(i, 1);\n return false;\n }\n });\n vm.selected = null;\n }\n\n vm.removeStage = function () {\n var item = vm.selectedAdded;\n $.each(vm.added, function (i) {\n if (vm.added[i].id === item.id) {\n vm.added.splice(i, 1);\n return false;\n }\n });\n vm.stages.push(item);\n vm.selectedAdded = null;\n }\n\n $scope.$watchCollection(function () {\n return vm.added;\n }, function (data) {\n if (data) {\n $.each(data, function (index, val) {\n val.rank = index + 1;\n });\n } else {\n return;\n }\n });\n }\n\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.modules')\n .service('$utils', UtilityService);\n\n /** @ngInject */\n function UtilityService($log, $timeout, api, user, $settings) {\n var vm = this;\n\n vm.settings = $settings;\n\n // Delete Module\n this.resize = function(time) {\n $timeout(function() {\n fireResize();\n }, time);\n }\n\n function fireResize() {\n if (document.createEvent) { // W3C\n var event = document.createEvent('Event');\n event.initEvent('resize', true, true);\n window.dispatchEvent(event);\n } else { // IE\n element = document.documentElement;\n var event = document.createEventObject();\n element.fireEvent(\"onresize\", event);\n }\n };\n\n this.saveAudit = function(objectId, objectType, action, detail) {\n var audit = {\n objectId: objectId,\n objectType: objectType,\n action: action,\n detail: detail\n }\n api.audits.save(audit)\n .then(function (response) {\n }, function (err) {\n $log.error(err);\n })\n }\n\n this.fixQueryQuotes = function (query) {\n if (!query) return query;\n if (query.startsWith(\"\\\"\") || query.endsWith(\"\\\"\")) {\n if ((query.split(\"\\\"\").length - 1) % 2 == 0) return query;\n query = query.replace(/\\\"/g, \"\");\n query = \"\\\"\" + query + \"\\\"\";\n } else {\n query = query.replace(/\\\"/g, \"\");\n }\n return query;\n }\n\n this.googleAnalyticsSetPageview = function (page) {\n if (typeof ga == \"undefined\") return;\n //var page = document.location.pathname;\n if (typeof (ga.getAll) != \"function\") return;\n ga('set', 'userId', user.userName);\n ga('set', 'cd1', user.userName);\n ga('set', 'dimension1', user.userName);\n ga('set', 'page', page);\n ga('send', 'pageview');\n }\n\n this.googleAnalyticsSetAction = function (eventCategory, eventAction, eventLabel) {\n if (typeof ga == \"undefined\") return;\n ga('set', 'userId', user.userName);\n if (\"ga\" in window) {\n if (typeof (ga.getAll) != \"function\") return;\n var tracker = ga.getAll()[0];\n if (tracker) {\n ga('set', 'cd1', user.userName);\n tracker.set('cd1', user.userName)\n tracker.set('userId', user.userName)\n tracker.set('dimension1', user.userName)\n tracker.send('event', eventCategory, eventAction, eventLabel);\n }\n }\n }\n\n this.googleAnalyticsSetScreenView = function (screenName) {\n if (typeof ga == \"undefined\") return;\n ga('set', 'userId', user.userName);\n if (\"ga\" in window) {\n if (typeof (ga.getAll) != \"function\") return;\n var tracker = ga.getAll()[0];\n if (tracker) {\n tracker.set('cd1', user.userName)\n tracker.set('userId', user.userName)\n tracker.set('dimension1', user.userName)\n tracker.send('screenview', { screenName: screenName });\n }\n }\n } \n\n this.googleAnalyticsSetTiming = function (timingCategory, timingVar, timingValue) {\n if (typeof ga == \"undefined\") return;\n ga('set', 'userId', user.userName);\n if (\"ga\" in window) {\n if (typeof (ga.getAll) != \"function\") return;\n var tracker = ga.getAll()[0];\n if (tracker) {\n ga('set', 'cd1', user.userName);\n tracker.set('userId', user.userName)\n tracker.set('cd1', user.userName)\n tracker.set('dimension1', user.userName)\n tracker.send('timing', timingCategory, timingVar, timingValue, user.userName);\n }\n }\n }\n\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.modules')\n .service('SampleService', SampleService)\n .controller('SampleAddCategoryDialogController', SampleAddCategoryDialogController)\n .controller('SampleAddTagDialogController', SampleAddTagDialogController);\n\n /** @ngInject */\n function SampleService($q, $log, $translate, $mdMedia, $mdDialog, api) {\n this.addCategory = function($scope, $state, $event, $$module) {\n var deferred = $q.defer();\n showAddCategoryDialog($scope, $event, $$module)\n .then(function(answer) {\n if (!answer) return;\n deferred.resolve(answer);\n });\n return deferred.promise;\n }\n this.addTag = function($scope, $state, $event, $$module) {\n var deferred = $q.defer();\n showAddTagDialog($scope, $event, $$module)\n .then(function(answer) {\n if (!answer) return;\n deferred.resolve(answer);\n });\n return deferred.promise;\n }\n\n function showAddCategoryDialog($scope, $event, $$module) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'SampleAddCategoryDialogController as vm',\n templateUrl: 'app/main/apps/modules/services/sample-add-category-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n $$module: $$module\n }\n })\n .then(function(answer) {\n deferred.resolve(answer);\n }, function() {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function() {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function(wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showAddTagDialog($scope, $event, $$module) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'SampleAddTagDialogController as vm',\n templateUrl: 'app/main/apps/modules/services/sample-add-tag-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n $$module: $$module\n }\n })\n .then(function(answer) {\n deferred.resolve(answer);\n }, function() {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function() {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function(wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n }\n\n function SampleAddCategoryDialogController($scope, $state, $stateParams, $log, $mdDialog, api, $$module) {\n var vm = this;\n vm.module = $$module;\n vm.moduleId = $stateParams.id;\n vm.category = null;\n\n vm.searchText = null;\n vm.selectedItem = null;\n vm.queryCategorySearch = queryCategorySearch;\n\n function queryCategorySearch(query) {\n var results = query ? vm.module.categories.filter(createFilterFor(query)) : [];\n return results;\n }\n\n /**\n * Create filter function for a query string\n */\n function createFilterFor(query) {\n var lowercaseQuery = angular.lowercase(query);\n return function filterFn(item) {\n var lowercaseName = angular.lowercase(item.name);\n return (lowercaseName.indexOf(lowercaseQuery) === 0);\n };\n }\n\n\n vm.cancel = function() {\n $mdDialog.cancel();\n };\n vm.ok = function() {\n var answer = {};\n if (vm.category) {\n answer = vm.category;\n } else {\n answer = {\n name: vm.searchText\n };\n }\n\n $mdDialog.hide(answer);\n };\n }\n\n function SampleAddTagDialogController($mdDialog) {\n var vm = this;\n vm.tag = null;\n\n vm.cancel = function() {\n $mdDialog.cancel();\n };\n vm.ok = function() {\n $mdDialog.hide(vm.tag);\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.modules')\n .service('ModuleService', ModuleService)\n .controller('BasicDialogController', BasicDialogController)\n .controller('BasicDeleteDialogController', BasicDeleteDialogController)\n .controller('ReplaceCategoryDialogController', ReplaceCategoryDialogController)\n .controller('ModuleAddCategoryDialogController', ModuleAddCategoryDialogController)\n .controller('ModuleSaveSettingDialogController', ModuleSaveSettingDialogController)\n .controller('ClusteringSaveSettingDialogController', ClusteringSaveSettingDialogController)\n .controller('ModuleCreateDialogController', ModuleCreateDialogController)\n .controller('SelectTrainAspectDialogController', SelectTrainAspectDialogController);\n\n /** @ngInject */\n function ModuleService($q, $log, $translate, $mdMedia, $mdDialog, api, user, $settings) {\n\n this.basicConfirmDialog = showConfirmDialog;\n this.showFailDialog = showFailDialog;\n\n // Delete Module\n this.deleteModule = function ($scope, $state, $event, module) {\n var confirmTitle = $translate.instant('MODULES.CONFIRM.DELETE_MODULE_TITLE');\n var confirmBody = $translate.instant('MODULES.CONFIRM.DELETE_MODULE_BODY', {\n name: module.name\n });\n\n var successTitle = $translate.instant('MODULES.CONFIRM.DELETE_MODULE_SUCCESS_TITLE');\n var successBody = $translate.instant('MODULES.CONFIRM.DELETE_MODULE_SUCCESS_BODY', {\n name: module.name\n });\n\n showConfirmDialog($scope, $event, confirmTitle, confirmBody)\n .then(function (answer) {\n if (!answer) return;\n\n var data = {\n id: module.id\n };\n\n api.module.delete(data)\n .then(function (response) {\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function () {\n $state.go('app.modules.list');\n });\n },\n function (response) {\n $log.error(response);\n });\n });\n }\n \n\n // Delete Category\n this.deleteCategory = function ($scope, $state, $event, module, category) {\n var confirmTitle = $translate.instant('MODULES.CONFIRM.DELETE_CATEGORY_TITLE');\n var confirmBody = $translate.instant('MODULES.CONFIRM.DELETE_CATEGORY_BODY', {\n name: category.name\n });\n\n var successTitle = $translate.instant('MODULES.CONFIRM.DELETE_CATEGORY_SUCCESS_TITLE');\n var successBody = $translate.instant('MODULES.CONFIRM.DELETE_CATEGORY_SUCCESS_BODY', {\n name: category.name\n });\n\n showConfirmDialog($scope, $event, confirmTitle, confirmBody)\n .then(function (answer) {\n if (!answer) return;\n\n var data = {\n moduleId: module.id,\n id: category.id\n };\n\n api.module.deleteCategory(data)\n .then(function (response) {\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function () {\n $state.reload();\n });\n },\n function (response) {\n $log.error(response);\n });\n });\n }\n // Delete Category Data\n this.deleteCategoryData = function ($scope, $state, $event, module, category) {\n var confirmTitle = $translate.instant('MODULES.CONFIRM.DELETE_CATEGORY_DATA_TITLE');\n var confirmBody = $translate.instant('MODULES.CONFIRM.DELETE_CATEGORY_DATA_BODY', {\n name: category.name,\n count: category.count\n });\n\n var successTitle = $translate.instant('MODULES.CONFIRM.DELETE_CATEGORY_DATA_SUCCESS_TITLE');\n var successBody = $translate.instant('MODULES.CONFIRM.DELETE_CATEGORY_DATA_SUCCESS_BODY', {\n name: category.name\n });\n\n showConfirmDialog($scope, $event, confirmTitle, confirmBody)\n .then(function (answer) {\n if (!answer) return;\n\n var query = {\n moduleId: module.id,\n categoryId: category.id,\n count: category.count\n };\n\n api.samples.delete(query)\n .then(function (response) {\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function () {\n $state.reload();\n });\n },\n function (response) {\n $log.error(response);\n });\n });\n }\n // Delete Sample Data\n this.deleteSampleData = function ($scope, $state, $event, query) {\n var confirmTitle = $translate.instant('MODULES.CONFIRM.DELETE_SAMPLE_DATA_TITLE');\n var confirmBody = $translate.instant('MODULES.CONFIRM.DELETE_SAMPLE_DATA_BODY', {\n count: query.removedDocumentCount\n });\n\n var successTitle = $translate.instant('MODULES.CONFIRM.DELETE_SAMPLE_DATA_SUCCESS_TITLE');\n var successBody = $translate.instant('MODULES.CONFIRM.DELETE_SAMPLE_DATA_SUCCESS_BODY', {\n count: query.removedDocumentCount\n });\n\n showConfirmDialog($scope, $event, confirmTitle, confirmBody)\n .then(function (answer) {\n if (!answer) return;\n query.deletable = true;\n api.samples.delete(query)\n .then(function (response) {\n if (response.deleted) {\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function () {\n $state.reload();\n });\n }\n },\n function (response) {\n $log.error(response);\n });\n });\n }\n this.deleteSampleDataById = function ($scope, $state, $event, query) {\n var def = $q.defer();\n var confirmTitle = $translate.instant('MODULES.CONFIRM.DELETE_SAMPLE_DATA_TITLE');\n var confirmBody = $translate.instant('MODULES.CONFIRM.DELETE_SAMPLE_DATA_BODY', {\n count: query.removedDocumentCount\n });\n\n var successTitle = $translate.instant('MODULES.CONFIRM.DELETE_SAMPLE_DATA_SUCCESS_TITLE');\n var successBody = $translate.instant('MODULES.CONFIRM.DELETE_SAMPLE_DATA_SUCCESS_BODY', {\n count: query.removedDocumentCount\n });\n\n showConfirmDialog($scope, $event, confirmTitle, confirmBody)\n .then(function (answer) {\n if (!answer) return;\n query.deletable = true;\n api.samples.deleteSamplesById(query)\n .then(function (response) {\n if (response.deleted) {\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function () {\n //$state.reload();\n def.resolve(true);\n });\n }\n },\n function (response) {\n def.resolve(false);\n $log.error(response);\n });\n });\n return def.promise;\n }\n // Add Category\n this.addCategory = function ($scope, $state, $event, module) {\n showAddCategoryDialog($scope, $event)\n .then(function (answer) {\n if (!answer) return;\n var name = answer;\n var data = {\n name: name,\n moduleId: module.id\n };\n\n api.module.addCategory(data)\n .then(function (response) {\n var successTitle = $translate.instant('MODULES.CONFIRM.ADD_CATEGORY_SUCCESS_TITLE');\n var successBody = $translate.instant('MODULES.CONFIRM.ADD_CATEGORY_SUCCESS_BODY', {\n name: name\n });\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function () {\n $state.reload();\n });\n },\n function (response) {\n $log.error(response);\n });\n });\n }\n\n this.saveModuleSettings = function ($scope, $state, $event, module) {\n showSaveSettingDialog($scope, $event, module)\n .then(function (answer) {\n if (!answer) return;\n api.module.save(module)\n .then(function (response) {\n var successTitle = $translate.instant('MODULES.CONFIRM.SAVE_MODULE_SETTINGS_RESULT_SUCCESS_TITLE');\n var successBody = $translate.instant('MODULES.CONFIRM.SAVE_MODULE_SETTINGS_RESULT_SUCCESS_BODY');\n showSuccessDialog($scope, $event, successTitle, successBody).\n then(function (response) {\n $state.reload();\n });\n },\n function (response) {\n $log.error(response);\n });\n });\n }\n\n //Create Module\n this.createModule = function ($scope, $state, $event, module,workspaces) {\n\n var createModuleTitle = $translate.instant('MODULES.CREATE_MODULE');\n\n var lastWorkspace = user.workspaces.filter(function (a) { return a.id == $settings.commonSettings.lastWorkspaceId });\n var otherWorkspaces = user.workspaces.filter(function (a) { return a.id != $settings.commonSettings.lastWorkspaceId });\n var workspace = lastWorkspace.concat(otherWorkspaces);\n\n showCreateModuleDialog($scope, $event, module, createModuleTitle, workspace, user.permissions)\n .then(function (answer) {\n if (!answer) return;\n module.workspaceId = answer.id;\n console.log('save module')\n console.log(module);\n api.module.save(module)\n .then(function (response) {\n var successTitle = $translate.instant('MODULES.CONFIRM.CREATE_MODULE_SUCCESS_TITLE');\n var successBody = $translate.instant('MODULES.CONFIRM.CREATE_MODULE_SUCCESS_BODY');\n showSuccessDialog($scope, $event, successTitle, successBody).\n then(function (response) {\n $state.go('app.modules.list', { view: 0 });\n });\n },\n function (response) {\n $log.error(response);\n });\n });\n }\n\n this.saveClusteringContextMenu = function ($scope, $state, module, $event) {\n showClusteringSettingDialog($scope, $event, module)\n .then(function (answer) {\n console.log(answer);\n if (!answer) return;\n\n if (answer === \"remove_label\") {\n var obj = {\n \"moduleId\": module.id,\n \"word\": $event.data.label,\n \"id\": 0\n }\n\n api.clustering.saveStopLabel(obj)\n .then(function (response) {\n var successTitle = $translate.instant('MODULES.CONFIRM.SAVE_MODULE_SETTINGS_RESULT_SUCCESS_TITLE');\n var successBody = $translate.instant('MODULES.CONFIRM.SAVE_MODULE_SETTINGS_RESULT_SUCCESS_BODY');\n showSuccessDialog($scope, $event, successTitle, successBody).\n then(function (response) {\n $state.reload();\n });\n }, function (response) {\n $log.error(response);\n }\n )\n } else if (answer === \"go_to_documents\") {\n console.log(\"go documents\");\n }\n\n\n });\n }\n\n this.saveStopWordLabel = function ($scope, $state, req, $event) {\n if (req.message === \"duplicate\") {\n var duplicateTitle = $translate.instant('CLUSTERING.CONFIRM.SAVE_STOP_RESULT_DUPLICATE_TITLE');\n var duplicateBody = $translate.instant('CLUSTERING.CONFIRM.SAVE_STOP_RESULT_DUPLICATE_BODY');\n showFailDialog($scope, $event, duplicateTitle, duplicateBody).\n then(function (response) {\n });\n } else if (req.message === \"null\") {\n var nullTitle = $translate.instant('CLUSTERING.CONFIRM.SAVE_STOP_RESULT_NULL_TITLE');\n var nullBody = $translate.instant('CLUSTERING.CONFIRM.SAVE_STOP_RESULT_NULL_BODY');\n showFailDialog($scope, $event, nullTitle, nullBody).\n then(function (response) {\n });\n }\n }\n\n this.trainCompletedSuccessfully = function ($scope, $state, module) {\n var $event = null;\n var successTitle = $translate.instant('MODULES.CONFIRM.TRAIN_MODULE_SUCCESS_TITLE');\n var successBody = $translate.instant('MODULES.CONFIRM.TRAIN_MODULE_SUCCESS_BODY', {\n name: module.name\n });\n\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function () {\n $state.go('app.module.overview', {\n id: module.id\n }, {\n reload: true\n });\n });\n }\n\n this.trainCompletedFailed = function ($scope, $state, module) {\n var $event = null;\n var failedTitle = $translate.instant('MODULES.CONFIRM.TRAIN_MODULE_FAIL_TITLE');\n var failedBody = $translate.instant('MODULES.CONFIRM.TRAIN_MODULE_FAIL_BODY', {\n name: module.name\n });\n\n showFailDialog($scope, $event, failedTitle, failedBody)\n .then(function () {\n $state.go('app.module.overview', {\n id: module.id\n }, {\n reload: true\n });\n });\n }\n\n this.hasData = function (id) {\n var deferred = $q.defer();\n api.module.hasData(id)\n .then(function (response) {\n deferred.resolve(response);\n },\n function (response) {\n $log.error(response);\n });\n return deferred.promise;\n }\n\n this.getModule = function (id) {\n var deferred = $q.defer();\n api.module.get(id)\n .then(function (response) {\n deferred.resolve(response);\n },\n function (response) {\n $log.error(response);\n });\n return deferred.promise;\n }\n\n this.selectTrainAspectDialog = function($scope, $event, $translate){\n var deferred = $q.defer();\n var url = \"app/main/apps/modules/services/select-train-aspect-dialog.html\"\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'SelectTrainAspectDialogController as vm',\n templateUrl: url,\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: $translate.instant('TRAIN.CONFIRM.TRAIN_TITLE')\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function (answer) {\n $log.log('You cancelled the dialog.');\n deferred.resolve(answer);\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n }\n\n function showConfirmDialog($scope, $event, title, body, url) {\n var deferred = $q.defer();\n var htmlUrl = url ? url : \"app/main/apps/modules/services/basic-confirm-dialog.html\"\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'BasicDeleteDialogController as vm',\n templateUrl: htmlUrl,\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function (answer) {\n $log.log('You cancelled the dialog.');\n deferred.resolve(answer);\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n \n\n function showSuccessDialog($scope, $event, title, body) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'BasicDialogController as vm',\n templateUrl: 'app/main/apps/modules/services/basic-success-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body\n }\n })\n .then(function (answer) {\n deferred.resolve();\n }, function (answer) {\n deferred.resolve();\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showFailDialog($scope, $event, title, body) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'BasicDialogController as vm',\n templateUrl: 'app/main/apps/modules/services/basic-fail-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body\n }\n })\n .then(function (answer) {\n deferred.resolve();\n }, function (answer) {\n deferred.resolve();\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showAddCategoryDialog($scope, $event) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'ModuleAddCategoryDialogController as vm',\n templateUrl: 'app/main/apps/modules/services/module-add-category-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showSaveSettingDialog($scope, $event, module) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'ModuleSaveSettingDialogController as vm',\n templateUrl: 'app/main/apps/modules/services/save-settings-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n module: module\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showCreateModuleDialog($scope, $event, module, title, workspaces, workspacePermissions) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'ModuleCreateDialogController as vm',\n templateUrl: 'app/main/apps/modules/services/create-module-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n module: module,\n title: title,\n workspaces: workspaces,\n workspacePermissions: workspacePermissions\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showClusteringSettingDialog($scope, $event, module) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'ClusteringSaveSettingDialogController as vm',\n templateUrl: 'app/main/apps/modules/services/clustering-label-context-menu-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n event: $event\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n }\n\n function ModuleCreateDialogController($mdDialog, module, title, workspaces, workspacePermissions) {\n var vm = this;\n vm.title = title;\n var permission = getPermission(module.moduleType);\n console.log(permission);\n vm.workspaces = workspaces.filter(function (workspace) {\n var wsp = workspacePermissions.find(function (ws) { return ws.workspaceId === workspace.id });\n if (wsp && wsp.permissions.indexOf(permission) != -1) {\n return true;\n }\n })\n vm.selectedWorkspace = vm.workspaces[0];\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(vm.selectedWorkspace);\n };\n\n function getPermission(type) {\n switch (type.id) {\n case 1:\n return \"MODULE/CLASSIFICATION/CREATE\";\n case 2:\n return \"MODULE/CLUSTERING/CREATE\";\n case 3:\n return \"MODULE/TOPICMODELING/CREATE\";\n case 4:\n return \"MODULE/ROOTCAUSE/CREATE\";\n case 5:\n return \"MODULE/SENTIMENT/CREATE\";\n case 6:\n return \"MODULE/NAMEDENTITY/CREATE\";\n case 7:\n return \"MODULE/CLASSIFICATION/CREATE\";\n }\n };\n }\n\n function BasicDialogController($mdDialog, title, body) {\n var vm = this;\n vm.title = title;\n vm.body = body;\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n }\n\n function BasicDeleteDialogController($mdDialog, title, body) {\n var vm = this;\n vm.title = title;\n vm.body = body;\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n }\n\n function ReplaceCategoryDialogController($mdDialog, title, body,request) {\n var vm = this;\n vm.title = title;\n vm.body = body;\n vm.moduleCounts = request.moduleCounts;\n\n vm.hasData = function(){\n var hasData = false;\n vm.moduleCounts.forEach(function(m){\n if(m.count > 0)\n hasData = true;\n })\n return hasData;\n }\n\n vm.hasData();\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n }\n\n function ModuleAddCategoryDialogController($mdDialog) {\n var vm = this;\n vm.name = null;\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(vm.name);\n };\n }\n\n function ModuleSaveSettingDialogController($mdDialog, module) {\n var vm = this;\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n }\n function EditDialogController($mdDialog, title, body) {\n var vm = this;\n vm.title = title;\n vm.body = body;\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n }\n\n\n function ClusteringSaveSettingDialogController($mdDialog, event) {\n var vm = this;\n vm.event = event;\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function (answer) {\n $mdDialog.hide(answer);\n };\n }\n\n function SelectTrainAspectDialogController($mdDialog, title) {\n var vm = this;\n vm.title = title;\n vm.evaluate = true;\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n var aspect = {'evaluate':vm.evaluate};\n $mdDialog.hide(aspect);\n };\n }\n\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.modules')\n .service('ModuleCategoryService', ModuleCategoryService)\n .controller('DeleteCategoryDialogController', DeleteCategoryDialogController)\n .controller('BasicDialogController', BasicDialogController)\n .controller('CategoryAliasController', CategoryAliasController)\n\n /** @ngInject */\n function ModuleCategoryService($q, $log, $translate, $mdMedia, $mdDialog, api) {\n\n this.deleteCategory = function ($scope, $state, $event, $$module, request) {\n var deferred = $q.defer();\n var confirmTitle = $translate.instant('MODULES.CONFIRM.DELETE_MODULE_CATEGORY_TITLE');\n var confirmBody = $translate.instant('MODULES.CONFIRM.DELETE_MODULE_CATEGORY_BODY', {\n categories: request.categories,\n count: request.count\n });\n var successTitle = $translate.instant('MODULES.CONFIRM.DELETE_MODULE_CATEGORY_SUCCESS_TITLE');\n var successBody = $translate.instant('MODULES.CONFIRM.DELETE_MODULE_CATEGORY_SUCCESS_BODY', {\n count: request.count\n });\n showDeleteCategoryDialog($scope, $event, $$module, confirmTitle, confirmBody, request)\n .then(function (answer) {\n if (!answer) {\n deferred.resolve(false);\n return;\n };\n request.deletable = true;\n api.module.deleteHierCategory(request)\n .then(function (response) {\n if (response.deleted) {\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function (answer) {\n deferred.resolve(true);\n }, function (res) {\n deferred.resolve(true);\n });\n } else {\n deferred.resolve(false);\n }\n }, function (err) {\n deferred.resolve(false);\n })\n });\n return deferred.promise;\n }\n\n this.replaceCategory = function ($scope, $state, $event, request) {\n var confirmTitle = $translate.instant('MODULES.CONFIRM.REPLACE_CATEGORY_TITLE', {\n count: request.count\n });\n var confirmBody = $translate.instant('MODULES.CONFIRM.REPLACE_CATEGORY_BODY', {\n count: request.count\n });\n \n var successTitle = $translate.instant('MODULES.CONFIRM.REPLACE_CATEGORY_SUCCESS_TITLE');\n var successBody = $translate.instant('MODULES.CONFIRM.REPLACE_CATEGORY_SUCCESS_BODY', {\n count: request.count\n });\n \n showReplaceCategoryDialog($scope, $event, confirmTitle, confirmBody,request)\n .then(function (answer) {\n if (!answer) return;\n request.replaceable = true;\n \n api.module.replaceCategory(request)\n .then(function (response) {\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function () {\n $state.reload();\n });\n },\n function (response) {\n $log.error(response);\n });\n });\n }\n\n this.categoryAliasDialog = function ($scope, $event, module) {\n var deferred = $q.defer();\n showCategoryAliasDialog($scope, $event, module)\n .then(function (answer) {\n if (!answer) return;\n else\n deferred.resolve(answer);\n })\n return deferred.promise;\n }\n\n this.successAddCategoryDialog = function ($scope, $state, $event, $$module) {\n var deferred = $q.defer();\n var successTitle = $translate.instant('MODULES.CONFIRM.ADD_MODULE_CATEGORY_SUCCESS_TITLE');\n var successBody = $translate.instant('MODULES.CONFIRM.ADD_MODULE_CATEGORY_SUCCESS_BODY');\n showSuccessDialog($scope, $event, successTitle, successBody)\n .then(function (answer) {\n deferred.resolve(true);\n }, function (res) {\n deferred.resolve(true);\n });\n return deferred.promise;\n }\n\n function showDeleteCategoryDialog($scope, $event, $$module, title, body, request) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'DeleteCategoryDialogController as vm',\n templateUrl: 'app/main/apps/modules/services/module-delete-category-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body,\n $$module: $$module,\n request: request\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function () {\n deferred.resolve(false);\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n function showSuccessDialog($scope, $event, title, body) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'BasicDialogController as vm',\n templateUrl: 'app/main/apps/modules/services/basic-success-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body\n }\n })\n .then(function (answer) {\n deferred.resolve(true);\n }, function (answer) {\n deferred.resolve(true);\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n \n function showReplaceCategoryDialog($scope, $event, title, body,request) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'ReplaceCategoryDialogController as vm',\n templateUrl: 'app/main/apps/modules/services/replace-category-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body,\n request: request\n }\n })\n .then(function (answer) {\n deferred.resolve(answer);\n }, function () {\n $log.log('You cancelled the dialog.');\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n };\n\n }\n\n function showCategoryAliasDialog($scope, $event, module) {\n var deferred = $q.defer();\n var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && $scope.customFullscreen;\n $mdDialog.show({\n controller: 'CategoryAliasController as vm',\n templateUrl: 'app/main/apps/reports/views/settings/category-alias-dialog.html',\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n api: api,\n report: module,\n $stateParams: $stateParams\n }\n })\n .then(function (answer) {\n console.log(answer);\n deferred.resolve(answer);\n }, function (r) {\n console.log(r);\n });\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });\n return deferred.promise;\n }\n\n function DeleteCategoryDialogController($scope, $state, $stateParams, $log, $mdDialog, api, $$module, title, body, request) {\n var vm = this;\n vm.module = $$module;\n vm.moduleId = $stateParams.id;\n vm.title = title;\n vm.body = body;\n vm.categories = request.categories;\n vm.moduleCounts = request.moduleCounts;\n\n vm.hasData = function(){\n var hasData = false;\n vm.moduleCounts.forEach(function(m){\n if(m.count > 0)\n hasData = true;\n })\n return hasData;\n }\n\n vm.hasData();\n\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n }\n\n };\n\n function CategoryAliasController($mdDialog, api, module, $stateParams, $translate, $mdToast) {\n var vm = this;\n\n\n }\n\n \n\n function BasicDialogController($mdDialog, title, body) {\n var vm = this;\n vm.title = title;\n vm.body = body;\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n }\n\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.core')\n .filter('filterByTypes', filterByTypes);\n\n /** @ngInject */\n function filterByTypes() {\n return function(items, types) {\n var filtered = [];\n if (!items) return filtered;\n if (items.length === 0 || types.length === 0) return items;\n\n items.forEach(function(item) {\n types.forEach(function(type) {\n if (item.moduleType.name === type.name) {\n filtered.push(item);\n }\n });\n });\n\n return filtered;\n };\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.core')\n .filter('filterByTags', filterByTags);\n\n /** @ngInject */\n function filterByTags() {\n return function(items, text) {\n var filtered = [];\n if (!items) return filtered;\n if (items.length === 0 || text.length === 0) return items;\n\n items.forEach(function(item) {\n var regex = new RegExp(text, 'i');;\n if (item.name.search(regex) != -1) {\n filtered.push(item);\n }\n });\n\n return filtered;\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.core')\n .filter('start', start);\n\n /** @ngInject */\n function start() {\n return function (input, start) {\n if (!input || !input.length) { return; }\n start = +start;\n return input.slice(start);\n };\n }\n})();\n(function () {\n 'use strict';\n\n angular\n .module('app.core')\n .filter('filterByName', filterByName);\n\n /** @ngInject */\n function filterByName($filter) {\n return function (items, name) {\n if (items.length === 0 || !name) {\n return items;\n }\n\n var filtered = $filter('filter')(items, name);\n return filtered;\n };\n }\n})();\n(function () {\n 'use strict';\n\n angular\n .module('app.core')\n .filter('emptyFilter', emptyFilter);\n\n /** @ngInject */\n function emptyFilter() {\n return function (items) {\n return items;\n };\n }\n})();\n(function() {\n 'use strict';\n\n angular\n .module('app.core')\n .filter('filterByCategories', filterByCategories);\n\n /** @ngInject */\n function filterByCategories() {\n return function(items, text) {\n var filtered = [];\n if (!items) return filtered;\n if (items.length === 0 || text.length === 0) return items;\n\n items.forEach(function(item) {\n var regex = new RegExp(text, 'i');;\n if (item.name.search(regex) != -1) {\n filtered.push(item);\n }\n });\n\n return filtered;\n };\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.modules')\n .factory('SampleFactory', SampleFactory)\n .factory('ExcelFactory', ExcelFactory)\n .factory('DelimitedTextFactory', DelimitedTextFactory);\n\n /** @ngInject */\n function SampleFactory($q, $log, ExcelFactory, DelimitedTextFactory) {\n var service = {};\n\n service.preview = function($scope, file, hasHeader) {\n var deferred = $q.defer();\n\n if (!file) {\n deferred.reject('File is null');\n return;\n }\n\n var extension = getFileExtension(file);\n if (extension === undefined || extension.lenght <= 0) {\n deferred.reject('File extension is null');\n return;\n }\n\n var fileExtension = extension[0];\n var previewFactory = getPreviewFactory(fileExtension);\n previewFactory.preview($scope, file, hasHeader)\n .then(function(data) {\n deferred.resolve(data);\n });\n\n return deferred.promise;\n }\n\n function getFileExtension(file) {\n return (/[.]/.exec(file.name)) ? /[^.]+$/.exec(file.name) : undefined;\n };\n\n function getPreviewFactory(extension) {\n switch (extension) {\n case \"xls\":\n case \"xlsx\":\n return ExcelFactory;\n case \"csv\":\n case \"txt\":\n case \"tsv\":\n case \"prn\":\n return DelimitedTextFactory;\n default:\n /*\n vm.uploadCurrentTab = 0;\n var message = extension[0] + \" is not supported! Please select excel or csv file.\";\n var parent = $document[0].querySelector('.dropify-wrapper');\n var toast = $mdToast.simple()\n .content(message)\n .action('OK')\n .highlightAction(true)\n .hideDelay(5000)\n .position('fit')\n .theme(\"error-toast\")\n .parent(parent);\n\n $mdToast.show(toast);\n */\n break;\n }\n }\n\n return service;\n }\n\n function ExcelFactory($q, $log, FileReader) {\n var service = {};\n service.preview = function($scope, file, hasHeader) {\n var deferred = $q.defer();\n FileReader.readAsBinaryString(file, $scope)\n .then(function(file) {\n var workbook = XLSX.read(file, {\n type: 'binary'\n });\n\n var data = toJson(workbook, hasHeader);\n deferred.resolve(data);\n });\n\n return deferred.promise;\n };\n\n function toJson(workbook, hasHeader) {\n var result = {\n columns: [],\n data: []\n };\n\n var first_sheet_name = workbook.SheetNames[0];\n var rows = hasHeader ? 11 : 10;\n var worksheet = workbook.Sheets[first_sheet_name];\n var data = XLS.utils.sheet_to_row_object_array(worksheet, {\n header: 'A',\n range: {\n s: {\n r: 0,\n c: 0\n },\n e: {\n r: rows,\n c: 99\n }\n }\n });\n if (data && data.length > 0) {\n var obj = data[0];\n var columns = [];\n for (var prop in obj)\n if (obj.hasOwnProperty(prop)) {\n var column = {\n name: prop\n }\n\n if (hasHeader)\n column.title = obj[prop];\n\n columns.push(column);\n }\n result.columns = columns;\n if (hasHeader)\n data = data.slice(1);\n result.data = data;\n }\n return result;\n }\n\n return service;\n }\n\n function DelimitedTextFactory($q, $log, FileReader) {\n var service = {};\n\n service.preview = function($scope, file, hasHeader) {\n var deferred = $q.defer();\n FileReader.readAsText(file, 'utf-8', $scope)\n .then(function(text) {\n var data = toJson(text, hasHeader);\n deferred.resolve(data);\n });\n\n return deferred.promise;\n }\n\n function toJson(text, hasHeader) {\n var result = {\n columns: [],\n data: []\n };\n\n var cfg = {\n header: hasHeader,\n preview: 10,\n };\n\n var parsed = Papa.parse(text, cfg);\n if (parsed.data && parsed.data.length > 0) {\n var delimiter = parsed.meta.delimiter;\n var data = parsed.data;\n var obj = data[0];\n var columns = [];\n for (var prop in obj)\n if (obj.hasOwnProperty(prop)) {\n var column = {\n name: prop\n }\n columns.push(column);\n }\n result.columns = columns;\n result.delimiter = delimiter;\n result.data = data;\n }\n return result;\n }\n\n return service;\n }\n\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.modules')\n .service('appSettings', appSettings);\n\n function appSettings() {\n var appSettings = {};\n\n function findActiveSources() {\n var xhr = new XHR();\n if (xhr.overrideMimeType) xhr.overrideMimeType('application/json');\n xhr.open('GET', '/api/anonymous/configuration/activesources', false);\n xhr.send(null);\n var activeSources = [];\n if (xhr.status === 200) {\n var response = xhr.responseText != \"\" ? JSON.parse(xhr.responseText) : null;\n activeSources = response;\n }\n return activeSources;\n }\n\n function findQueueActive() {\n var xhr = new XHR();\n if (xhr.overrideMimeType) xhr.overrideMimeType('application/json');\n xhr.open('GET', '/api/report/upload/queue/active', false);\n xhr.send(null);\n var queueActive = false;\n if (xhr.status === 200) {\n var response = xhr.responseText != \"\" ? JSON.parse(xhr.responseText) : null;\n queueActive = response;\n }\n return queueActive;\n }\n\n function findWorkspaceLogos() {\n var xhr = new XHR();\n if (xhr.overrideMimeType) xhr.overrideMimeType('application/json');\n xhr.open('GET', '/api/settings/configuration/workspace-logo', false);\n xhr.send(null);\n var workspaceLogos = [];\n if (xhr.status === 200) {\n var response = xhr.responseText != \"\" ? JSON.parse(xhr.responseText) : null;\n workspaceLogos = response;\n }\n return workspaceLogos;\n }\n\n appSettings.activeSources = findActiveSources();\n appSettings.queueActive = findQueueActive();\n appSettings.workspaceLogos = findWorkspaceLogos();\n\n return appSettings;\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.modules')\n .controller('TrainController', TrainController);\n\n /** @ngInject */\n function TrainController($rootScope, $scope, $state, $stateParams,\n $log, $interval, $translate, api, ModuleService, auth) {\n var vm = this;\n vm.type = $stateParams.type;\n if (!vm.type || vm.type === \"Pipeline\" || vm.type === \"Report\") return;\n vm.permission = \"MODULE/\" + vm.type.toUpperCase() + \"/TRAIN/EXECUTE\";\n vm.hasPipeline = $stateParams.hasPipeline;\n vm.hasClassifier = $stateParams.hasClassifier;\n vm.moduleId = $stateParams.id;\n vm.trainStatus = -99;\n vm.text = $translate.instant('TRAIN.TITLE');\n vm.hasData = false;\n vm.trainable = false;\n vm.selectedModuleFamily = {\n indicator:\"MM\"\n };\n vm.parentModule = {};\n vm.moduleFamily = [];\n\n //Methods\n vm.train = train;\n vm.enable = false;\n vm.changeFamilyModule = changeFamilyModule;\n vm.createSubModule = createSubModule;\n\n if (vm.moduleId) {\n ModuleService\n .hasData(vm.moduleId)\n .then(function(response) {\n vm.hasData = response;\n vm.enable = !isDisable();\n });\n }\n\n function findModuleFamily(){\n api.module.family($stateParams.id)\n .then(function(response){\n vm.moduleFamily = response;\n fillClassifierSources(vm.moduleFamily);\n findSelectedModuleInFamily(vm.moduleFamily);\n },function(err){\n console.log(err);\n });\n }\n\n function fillClassifierSources(modules){\n modules.forEach(function(module, i) {\n api.module.classifierSource(module.id)\n .then(function (response) {\n module.classifierSource = response;\n }, function (response) {\n $log.error(response);\n });\n });\n }\n\n function findSelectedModuleInFamily(modules){\n if(modules && modules.length > 0){\n var foundedSelectedModuleFamily = modules.filter(function(m){\n return m.id === $stateParams.id;\n });\n if(foundedSelectedModuleFamily && foundedSelectedModuleFamily.length == 1)\n vm.selectedModuleFamily = foundedSelectedModuleFamily[0];\n var foundedParentModule = modules.filter(function(m){\n return !m.parent;\n });\n if(foundedParentModule && foundedParentModule.length == 1)\n vm.parentModule = foundedParentModule[0];\n }\n }\n\n function createSubModule(){\n if(vm.parentModule.moduleTypeId === 7 ){\n $state.go('app.modules.create.sentimentspecial', { parentModule: vm.parentModule });\n }else{\n $state.go('app.modules.create.classification', { parentModule: vm.parentModule });\n }\n }\n\n function changeFamilyModule(){\n $state.go('app.module.overview', {\n id: vm.selectedModuleFamily.id\n });\n }\n\n //Train\n function train($event) {\n if(vm.type === \"Classification\" && vm.selectedModuleFamily.classifierSource.value === \"INTERNAL\"){\n ModuleService.selectTrainAspectDialog($scope, $event, $translate)\n .then(function(res){\n if(res){\n var moduleId = $stateParams.id;\n api.module.train(moduleId, res.evaluate)\n .then(function (response) {\n vm.trainStatus = 0;\n vm.text = $translate.instant(\"TRAIN.QUEUEING\");\n vm.check();\n vm.enable = !isDisable();\n },\n function (response) {\n $log.error(response);\n });\n }\n });\n }else{\n ModuleService.basicConfirmDialog($scope, $event, $translate.instant('TRAIN.CONFIRM.TRAIN_TITLE'), $translate.instant('TRAIN.CONFIRM.TRAIN_BODY'), \"app/main/apps/modules/services/basic-confirm-dialog-blue.html\")\n .then(function (response) {\n if (response) {\n var moduleId = $stateParams.id;\n api.module.train(moduleId)\n .then(function (response) {\n vm.trainStatus = 0;\n vm.text = $translate.instant(\"TRAIN.QUEUEING\");\n vm.check();\n vm.enable = !isDisable();\n },\n function (response) {\n $log.error(response);\n });\n }\n });\n }\n };\n\n function isTrainable() {\n switch (vm.type) {\n case \"Classification\":\n case \"Clustering\":\n case \"TopicModeling\":\n case \"RootCause\":\n vm.trainable = true;\n break;\n default:\n vm.trainable = false;\n break;\n }\n }\n\n isTrainable();\n\n function getLatestTrainInfo() {\n var moduleId = $stateParams.id;\n if (!moduleId) return;\n if (!vm.trainable) return;\n api.module.latestTrainInfo(moduleId)\n .then(function(response) {\n vm.trainStatus = response ? response.taskStatus : 2;\n vm.trainInfo = response;\n switch (vm.trainStatus) {\n case -1:\n vm.text = $translate.instant('TRAIN.ERROR');\n break;\n case 0:\n vm.text = $translate.instant('TRAIN.QUEUEING');\n vm.check();\n break;\n case 1:\n vm.text = generateTrainingMessage(response.statusDetail);\n break;\n default:\n vm.text = $translate.instant('TRAIN.TITLE');\n break;\n\n }\n },\n function(response) {\n $log.error(response);\n });\n };\n\n function generateTrainingMessage(statusDetail){\n var message = $translate.instant('TRAIN.TRAINING');\n if(typeof(statusDetail) == 'undefined'){\n return message;\n }\n if(statusDetail == null){\n return message;\n }\n switch (statusDetail.aspect) {\n case \"evaluate\":\n message = $translate.instant('TRAIN.EVALUATING');\n break;\n case \"saveTrain\":\n message = $translate.instant('TRAIN.SAVING_TRAIN');\n break;\n case \"saveEvaluation\":\n message = $translate.instant('TRAIN.SAVING_EVALUATION');\n break;\n case \"train\":\n default:\n message = $translate.instant('TRAIN.TRAINING');\n break;\n }\n var percentage = statusDetail.percentage.toFixed(1);\n var lang = $translate.use();\n if (lang == \"en\") {\n return message+' '+percentage+'%';\n }else{//default lang tr\n return message+' %'+percentage;\n }\n }\n\n function generateTrainingTooltip(){\n var tooltip = $translate.instant('TRAIN.TOOLTIP.TRAINING');\n if(vm.trainInfo == null) return tooltip;\n var date = $translate.instant('TRAIN.START_DATE') + \": \" + moment(Date.parse(moment(vm.trainInfo.startDate).toDate().toLocaleString(\"en-US\", { timeZone: \"Europe/Istanbul\" }))).format('DD-MM-YYYY HH:mm:ss');\n if(vm.selectedModuleFamily.classifierSource === \"INTERNAL\"){\n var evaluate = '';\n if(vm.trainInfo.evaluate){\n evaluate = $translate.instant(\"TRAIN.EVALUATE.TRUE\"); \n }else{\n evaluate = $translate.instant(\"TRAIN.EVALUATE.FALSE\");\n }\n return date+' '+evaluate; \n }else{\n return date;\n }\n }\n\n function isDisable() {\n if (!vm.hasPipeline) return true;\n if (vm.type === \"RootCause\" && !vm.hasClassifier) return true;\n if (!vm.hasData) return true;\n if (vm.trainStatus === 0) return true;\n if (vm.trainStatus === 1) return true;\n }\n\n //check\n var stop;\n vm.check = function() {\n // Don't start a new fight if we are already fighting\n if (angular.isDefined(stop)) return;\n\n stop = $interval(function() {\n if (vm.trainStatus === 0 || vm.trainStatus === 1) {\n getLatestTrainInfo();\n } else {\n vm.stopCheck();\n }\n vm.enable = !isDisable();\n }, 5000);\n };\n\n vm.stopCheck = function() {\n if (angular.isDefined(stop)) {\n $interval.cancel(stop);\n if (stop.$$state.status === 2) {\n if (vm.trainStatus === 2) {\n ModuleService\n .getModule(vm.moduleId)\n .then(function(response) {\n ModuleService.trainCompletedSuccessfully($scope, $state, response);\n });\n } else if (vm.trainStatus === -1) {\n ModuleService\n .getModule(vm.moduleId)\n .then(function(response) {\n ModuleService.trainCompletedFailed($scope, $state, response);\n });\n }\n }\n stop = undefined;\n }\n };\n\n vm.tooltipText = function() {\n var tooltip = '';\n if (!vm.hasData) {\n tooltip = $translate.instant('TRAIN.TOOLTIP.LOAD_SAMPLES');\n return tooltip;\n } else if (!vm.hasPipeline) {\n tooltip = $translate.instant('TRAIN.TOOLTIP.NO_PIPELINE');\n return tooltip;\n } else if (vm.type === \"RootCause\" && !vm.hasClassifier) {\n tooltip = $translate.instant('TRAIN.TOOLTIP.NO_CLASSIFIER');\n return tooltip;\n } else if (vm.trainStatus === 2) {\n tooltip = $translate.instant('TRAIN.TOOLTIP.READY');\n return tooltip;\n } else if (vm.trainStatus === 0) {\n tooltip = $translate.instant('TRAIN.TOOLTIP.QUEUEING');\n return tooltip;\n } else if (vm.trainStatus === 1) {\n tooltip = generateTrainingTooltip();\n return tooltip;\n } else if (vm.trainStatus === -1) {\n tooltip = $translate.instant('TRAIN.TOOLTIP.ERROR');\n return tooltip;\n }\n\n return tooltip;\n };\n\n\n $scope.$on('$destroy', function() {\n // Make sure that the interval is destroyed too\n vm.stopCheck();\n });\n //end check\n\n function init() {\n findModuleFamily();\n isTrainable();\n if (!vm.trainable) return;\n if (!auth.hasPermission(vm.permission)) return;\n getLatestTrainInfo();\n }\n init();\n\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.modules')\n .controller('ModuleSettingsController', ModuleSettingsController);\n\n /** @ngInject */\n function ModuleSettingsController($rootScope, DTOptionsBuilder, DTColumnDefBuilder,\n $scope, $state, $stateParams, $log, $translate, $filter, $mdMedia, $mdDialog, api,\n ModuleService, $$module, ModuleCategoryService) {\n var vm = this;\n vm.saved = true;\n vm.module = $$module;\n vm.type = $stateParams.type;\n vm.savePermission = \"MODULE/\" + vm.type.toUpperCase() + \"/SETTINGS/UPDATE\";\n vm.moduleId = $stateParams.id;\n vm.classificationTypes = [\n {\"name\":\"Single\",\"value\":\"SINGLE\"},\n {\"name\":\"Multi\",\"value\":\"HIER_MANY\"},\n {\"name\":\"DL_HIER\",\"value\":\"DL_HIER\"}\n ];\n\n vm.splitterTypes = [\n {\"name\":$translate.instant('MODULES.SPLITTER_TYPE.NONE'),\"value\":\"NONE\"},\n {\"name\":$translate.instant('MODULES.SPLITTER_TYPE.CLASSIC'),\"value\":\"CLASSIC\"},\n {\"name\":$translate.instant('MODULES.SPLITTER_TYPE.LIVE'),\"value\":\"LIVE\"}\n ];\n \n vm.classificationSources = [\n {\"name\":$translate.instant('MODULES.CLASSIFICATION.SOURCE.INTERNAL'),\"value\":\"INTERNAL\"},\n {\"name\":$translate.instant('MODULES.CLASSIFICATION.SOURCE.EXTERNAL'),\"value\":\"EXTERNAL\"}\n ];\n\n vm.processUnits = [\n {\"name\":\"Cpu\",\"value\":\"CPU\"},\n {\"name\":\"Gpu\",\"value\":\"GPU\"}\n ];\n\n vm.order = 'name';\n vm.pipelines = [];\n vm.classifiers = [];\n vm.features = [];\n vm.scoring = [];\n //vm.module.sentimentLanguage = \"TR\";\n vm.stopLabels = [];\n vm.stopWords = [];\n vm.baseModules = [];\n vm.addStopLabelObject = {\n \"id\": 0,\n \"word\": \"\",\n \"moduleId\": vm.module.id\n };\n vm.addStopWordObject = {\n \"id\": 0,\n \"word\": \"\",\n \"moduleId\": vm.module.id\n };\n vm.addStopWordText = '';\n\n getStopLabels();\n getStopWords();\n getBaseModules();\n\n\n vm.pipelineSearch = '';\n vm.classifierSearch = '';\n vm.filtersDefaults = angular.copy(vm.filters);\n vm.pipelinePagination = {\n current: 1,\n last: 1\n };\n\n vm.classifierPagination = {\n current: 1,\n last: 1\n };\n\n vm.addedPipeline = [];\n vm.addedClassifier = [];\n\n vm.dtOptions = DTOptionsBuilder\n .newOptions()\n .withOption('order', [0, 'desc'])\n .withPaginationType('full_numbers');\n\n if ($translate.use() === \"tr\") {\n vm.dtOptions.withLanguageSource('//cdn.datatables.net/plug-ins/1.10.16/i18n/Turkish.json');\n } else if ($translate.use() === \"en\") {\n vm.dtOptions.withLanguageSource('//cdn.datatables.net/plug-ins/1.10.16/i18n/English.json');\n }\n\n api.module.sentimentLanguage(vm.module.id)\n .then(function(r) {\n vm.module.sentimentLanguage = {\n value: \"TR\"\n }\n if (r == null || r === \"\")\n vm.module.sentimentLanguage.value = \"TR\";\n else\n vm.module.sentimentLanguage = r;\n }, function(r) {\n\n })\n\n\n api.module.splitterType(vm.module.id)\n .then(function (response) {\n if(response)\n vm.module.splitterType = response;\n else\n vm.module.splitterType = {\"value\": \"LIVE\" };\n }, function (response) {\n $log.error(response);\n });\n \n api.module.definitions('FeatureExtractor')\n .then(function(response) {\n vm.features = response;\n api.module.featureExtractors(vm.module.id)\n .then(function(response) {\n vm.module.feature = response;\n }, function(response) {\n $log.error(response);\n })\n },\n function(response) {\n $log.error(response);\n })\n\n api.module.definitions('ScoringType')\n .then(function(response) {\n vm.scoring = response;\n api.module.scoringType(vm.module.id)\n .then(function(response) {\n vm.module.scoring = response;\n }, function(response) {\n $log.error(response);\n })\n },\n function(response) {\n $log.error(response);\n })\n\n api.module.classifierType(vm.module.id)\n .then(function (response) {\n if(response)\n vm.module.classifierType = response;\n else\n vm.module.classifierType = { \"name\": \"Single\", \"value\": \"SINGLE\" };\n }, function (response) {\n $log.error(response);\n })\n\n api.module.classifierSource(vm.module.id)\n .then(function (response) {\n vm.module.classifierSource = response;\n }, function (response) {\n $log.error(response);\n });\n\n api.module.trainAlgorithmTypes()\n .then(function (response) {\n vm.trainAlgorithmTypes = response;\n }, function (response) {\n $log.error(response);\n });\n\n api.module.trainAlgorithm(vm.module.id)\n .then(function (response) {\n vm.module.trainAlgorithm = response;\n }, function (response) {\n $log.error(response);\n });\n\n api.module.processUnits()\n .then(function (response) {\n vm.processUnits = response;\n }, function (response) {\n $log.error(response);\n });\n\n api.module.processUnit(vm.module.id)\n .then(function (response) {\n vm.module.processUnit = response;\n }, function (response) {\n $log.error(response);\n });\n\n api.module.testEvaluateRatio(vm.module.id)\n .then(function (response) {\n vm.module.testEvaluateRatio = response;\n }, function (response) {\n $log.error(response);\n });\n\n api.module.batchSize(vm.module.id)\n .then(function (response) {\n vm.module.batchSize = response; \n vm.module_batchSize = parseInt(response.value);\n }, function (response) {\n $log.error(response);\n });\n\n api.module.learningRates(vm.module.id)\n .then(function (response) {\n vm.module.learningRates = response;\n vm.module_learningRates = JSON.parse(response.value);\n }, function (response) {\n $log.error(response);\n });\n\n api.module.epochNumbers(vm.module.id)\n .then(function (response) {\n vm.module.epochNumbers = response;\n vm.module_epochNumbers = JSON.parse(response.value);\n }, function (response) {\n $log.error(response);\n });\n\n api.module.maxTokenLength(vm.module.id)\n .then(function (response) {\n vm.module.maxTokenLength = response;\n vm.module_maxTokenLength = parseInt(response.value);\n }, function (response) {\n $log.error(response);\n });\n\n api.module.testSplitRatio(vm.module.id)\n .then(function (response) {\n vm.module.testSplitRatio = response;\n vm.module_testSplitRatio = parseFloat(response.value);\n }, function (response) {\n $log.error(response);\n });\n\n //vm.selectedPipeline = null;\n //vm.selectedClassifier = null;\n\n //vm.draggingPipeline = false;\n //vm.draggingClassifier = false;\n vm.msScrollOptions = {\n suppressScrollX: true\n };\n\n vm.pipelineSortableCardOptions = {\n cancel: \".unsortable\",\n appendTo: 'body',\n connectWith: '.board-list',\n delay: 75,\n distance: 7,\n forcePlaceholderSize: true,\n placeholder: 'board-list-item',\n tolerance: 'pointer',\n start: function(event, ui) {\n vm.draggingPipeline = true;\n var model = ui.item.sortable.model;\n\n angular.forEach(vm.addedPipeline, function(item) {\n if (item.name == model.name) {\n item.sorting = true;\n }\n });\n\n if (vm.addedPipeline.length > 0 && vm.addedPipeline.indexOf(model) < 0) {\n var item = vm.addedPipeline[0];\n vm.pipelines.push(item);\n vm.addedPipeline = [];\n }\n\n $scope.$apply();\n $log.info(model.name + \" start | \" + vm.draggingPipeline);\n },\n stop: function(event, ui) {\n angular.forEach(vm.addedPipeline, function(item) {\n item.sorting = false;\n item.selected = true;\n var index = vm.pipelines.indexOf(item);\n vm.pipelines.splice(index, 1);\n });\n vm.draggingPipeline = false;\n if (vm.addedPipeline.length == 0) {\n var model = ui.item.sortable.model;\n model.selected = false;\n vm.pipelines.splice(ui.item.sortable.dropindex, 0, model);\n }\n $scope.$apply();\n $log.info(ui.item.sortable.model.name + \" stop | \" + vm.draggingPipeline);\n }\n };\n\n vm.classifierSortableCardOptions = {\n cancel: \".unsortable\",\n appendTo: 'body',\n connectWith: '.board-list',\n delay: 75,\n distance: 7,\n forcePlaceholderSize: true,\n placeholder: 'board-list-item',\n tolerance: 'pointer',\n start: function(event, ui) {\n vm.draggingClassifier = true;\n var model = ui.item.sortable.model;\n angular.forEach(vm.addedClassifier, function(item) {\n if (item.name == model.name) {\n item.sorting = true;\n }\n });\n\n if (vm.addedClassifier.length > 0 && vm.addedClassifier.indexOf(model) < 0) {\n var item = vm.addedClassifier[0];\n vm.classifiers.push(item);\n vm.addedClassifier = [];\n }\n\n $scope.$apply();\n $log.info(model.name + \" start | \" + vm.draggingClassifier);\n },\n stop: function(event, ui) {\n angular.forEach(vm.addedClassifier, function(item) {\n item.sorting = false;\n item.selected = true;\n var index = vm.classifiers.indexOf(item);\n vm.classifiers.splice(index, 1);\n });\n vm.draggingClassifier = false;\n if (vm.addedClassifier.length == 0) {\n var model = ui.item.sortable.model;\n model.selected = false;\n vm.classifiers.splice(ui.item.sortable.dropindex, 0, model);\n }\n $scope.$apply();\n $log.info(ui.item.sortable.model.name + \" stop | \" + vm.draggingClassifier);\n }\n };\n\n if (vm.module.pipeline) {\n vm.module.pipeline.selected = true;\n vm.addedPipeline.push(vm.module.pipeline);\n }\n\n if (vm.module.classifier) {\n vm.module.classifier.selected = true;\n vm.addedClassifier.push(vm.module.classifier);\n }\n\n api.pipeline.list()\n .then(function(response) {\n var index = -1;\n if (vm.module.pipeline) {\n response.forEach(function(item, i) {\n if (item.id === vm.module.pipeline.id) {\n index = i;\n }\n });\n }\n\n if (index > -1)\n response.splice(index, 1);\n vm.pipelines = response;\n vm.pipelinePagination.last = calculatePageCounts(vm.pipelines.length);\n },\n function(response) {\n $log.error(response);\n });\n\n if (vm.type === 'RootCause') {\n api.module.classifiers()\n .then(function(response) {\n var index = -1;\n if (vm.module.classifier) {\n response.forEach(function(item, i) {\n if (item.id === vm.module.classifier.id) {\n index = i;\n }\n });\n }\n\n if (index > -1)\n response.splice(index, 1);\n vm.classifiers = response;\n vm.classifierPagination.last = calculatePageCounts(vm.classifiers.length);\n },\n function(response) {\n $log.error(response);\n });\n }\n\n function getStopLabels() {\n\n api.clustering.stopLabels(vm.module.id)\n .then(function(response) {\n vm.stopLabels = response.sort(function(a, b) {\n return a.id - b.id;\n });;\n },\n function(response) {\n $log.error(response);\n })\n\n }\n\n function getStopWords() {\n\n api.clustering.stopWords(vm.module.id)\n .then(function(response) {\n vm.stopWords = response.sort(function(a, b) {\n return a.id - b.id;\n });\n },\n function(response) {\n $log.error(response);\n })\n\n }\n\n function getBaseModules(){\n api.module.all()\n .then(function(response){\n vm.baseModules = response.filter(function(m){return m.base && m.id!=vm.module.id;});\n },\n function(err){\n $log.error(err);\n })\n\n }\n\n\n vm.addPipeline = function() {\n if (vm.addedPipeline.length > 0) {\n var item = vm.addedPipeline[0];\n item.selected = false;\n vm.pipelines.push(item);\n vm.addedPipeline = [];\n }\n\n item = vm.selectedPipeline;\n item.selected = true;\n vm.addedPipeline.push(item);\n var index = vm.pipelines.indexOf(item);\n vm.pipelines.splice(index, 1);\n vm.selectedPipeline = null;\n $scope.settingsForm.$setDirty();\n }\n\n vm.removePipeline = function() {\n var item = vm.addedPipeline[0];\n item.selected = false;\n vm.pipelines.push(item);\n vm.addedPipeline = [];\n $scope.settingsForm.$setDirty();\n }\n\n vm.addClassifier = function() {\n if (vm.addedClassifier.length > 0) {\n var item = vm.addedClassifier[0];\n item.selectedClassifier = false;\n vm.classifiers.push(item);\n vm.addedClassifier = [];\n }\n\n item = vm.selectedClassifier;\n item.selectedClassifier = true;\n vm.addedClassifier.push(item);\n var index = vm.classifiers.indexOf(item);\n vm.classifiers.splice(index, 1);\n vm.selectedClassifier = null;\n $scope.settingsForm.$setDirty();\n }\n\n vm.removeClassifier = function() {\n var item = vm.addedClassifier[0];\n item.selected = false;\n vm.classifiers.push(item);\n vm.addedClassifier = [];\n $scope.settingsForm.$setDirty();\n }\n\n vm.addStopLabel = function($event) {\n if (vm.addStopLabelObject.word === \"\")\n return;\n var req = vm.addStopLabelObject;\n api.clustering.saveStopLabel(req)\n .then(function(resp) {\n getStopLabels();\n vm.addStopLabelObject.word = \"\";\n ModuleService.saveStopWordLabel($scope, $state, resp, $event);\n }, function(resp) {\n $log.error(response);\n });\n }\n\n vm.addStopWord = function($event) {\n if (vm.addStopWordObject.word === \"\")\n return;\n var req = vm.addStopWordObject;\n api.clustering.saveStopWord(req)\n .then(function(resp) {\n getStopWords();\n vm.addStopWordObject.word = \"\";\n ModuleService.saveStopWordLabel($scope, $state, resp, $event);\n }, function(resp) {\n $log.error(response);\n });\n }\n\n vm.deleteStopLabel = function(obj) {\n api.clustering.deleteStopLabel(obj)\n .then(function(resp) {\n getStopLabels();\n }, function(resp) {\n $log.error(response);\n });\n }\n\n vm.deleteStopWord = function(obj) {\n api.clustering.deleteStopWord(obj)\n .then(function(resp) {\n getStopWords();\n }, function(resp) {\n $log.error(response);\n });\n }\n\n vm.setPipelineCurrentPage = function(page) {\n if (page > 0 && page <= vm.pipelinePagination.last)\n vm.pipelinePagination.current = page;\n }\n\n vm.setClassifierCurrentPage = function(page) {\n if (page > 0 && page <= vm.classifierPagination.last)\n vm.classifierPagination.current = page;\n }\n\n function calculatePageCounts(count) {\n var l = 14;\n var lastpage = Math.ceil(count / l);\n return lastpage > 0 ? lastpage : 1;\n }\n\n vm.showPipelineInfo = function() {\n return vm.addedPipeline.length == 0 && !vm.draggingPipeline;\n };\n\n vm.showClassifierInfo = function() {\n return vm.addedClassifier.length == 0 && !vm.draggingClassifier;\n };\n\n vm.cancel = function () {\n console.log(vm.module.moduleType.id);\n if (vm.module.moduleType.id === 5) {\n $state.go('app.module.test', {\n id: $stateParams.id\n });\n } else {\n $state.go('app.module.overview', {\n id: $stateParams.id\n });\n }\n }\n\n vm.saveSettings = function($event) {\n if (vm.addedPipeline.length > 0) {\n vm.module.pipeline = vm.addedPipeline[0];\n } else {\n vm.module.pipeline = null;\n }\n\n if (vm.addedClassifier.length > 0) {\n vm.module.classifier = vm.addedClassifier[0].id;\n } else {\n vm.module.classifier = null;\n }\n if(vm.module.base || vm.module.baseModuleId == \"-1\"){\n vm.module.baseModuleId = null;\n }\n console.log(vm.module);\n //config params must be of type string\n vm.module.learningRates.value = JSON.stringify(vm.module_learningRates);\n vm.module.batchSize.value = vm.module_batchSize + '';\n vm.module.epochNumbers.value = JSON.stringify(vm.module_epochNumbers);\n vm.module.maxTokenLength.value = vm.module_maxTokenLength + '';\n vm.module.testSplitRatio.value = vm.module_testSplitRatio + '';\n ModuleService.saveModuleSettings($scope, $state, $event, vm.module);\n }\n\n $scope.$watch('vm.pipelineSearch', function(text) {\n if (!vm.pipelines) return;\n\n var length = vm.pipelines.length;\n var filtered = $filter('filter')(vm.pipelines, text)\n if (filtered) {\n var length = filtered.length;\n }\n vm.pipelinePagination.last = calculatePageCounts(length);\n });\n\n $scope.$watch('vm.classifierSearch', function(text) {\n if (!vm.classifiers) return;\n\n var length = vm.classifiers.length;\n var filtered = $filter('filter')(vm.classifiers, text)\n if (filtered) {\n var length = filtered.length;\n }\n vm.classifierPagination.last = calculatePageCounts(length);\n });\n\n $scope.$watch('vm.module', function() {\n $scope.settingsForm.$setDirty();\n });\n\n vm.range = function(min, max, step) {\n step = step || 1;\n var input = [];\n var i = min;\n if(step<1){\n for (; i <= max; i += step) {\n input.push(i.toFixed(2));\n }\n }else{\n for (; i <= max; i += step) {\n input.push(i.toString());\n }\n }\n return input;\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.modules')\n .controller('ListModuleController', ListModuleController);\n\n /** @ngInject */\n function ListModuleController($scope, $state, $stateParams, $log, $utils, $document, $mdDialog, $mdSidenav, api, user, $rootScope, $translate, toastService, __env, $cookies, auth, $settings, appSettings) {\n var vm = this;\n vm.allModules = [];\n vm.allReports = [];\n vm.allPipelines = [];\n vm.allWebsources = [];\n vm.tempModules = [];\n vm.modules = [];\n vm.pipelines = [];\n vm.reports = [];\n vm.sources = [];\n vm.types = [];\n vm.workspaces = [];\n //vm.isShowModule = true;\n vm.viewType = user.hasPermission(\"REPORT/VIEW\") ? 2 : 0;\n vm.user = user;\n vm.nonCollapsedGroup = 0;\n vm.itemCountForOnePage = 10;\n vm.pagination = {\n current: 1,\n last: 1\n };\n vm.activeSources = appSettings.activeSources;\n\n vm.pagination.modules = {\n current: 1,\n last: 1\n };\n\n vm.pagination.pipelines = {\n current: 1,\n last: 1\n };\n\n\n vm.pagination.reports = {\n current: 1,\n last: 1\n };\n\n vm.pagination.sources = {\n current: 1,\n last: 1,\n size: 10,\n sort: 'createDate',\n direction: 'DESC'\n };\n\n function filterModulesByPermission() {\n vm.modules = vm.allModules.filter(function (module) {\n var moduleWorkspaceId = module.workspaceId;\n if ($rootScope.selectedWorkspace && $rootScope.selectedWorkspace.id) {\n if (moduleWorkspaceId !== $rootScope.selectedWorkspace.id) {\n return false;\n }\n }\n var permissionWorkspaces = user.permissions;\n var permission = getPermission(module.moduleType);\n var permissionWorkspace = permissionWorkspaces.filter(function (p) {\n return p.workspaceId === moduleWorkspaceId;\n })[0];\n if (permissionWorkspace) {\n if (permissionWorkspace.permissions.indexOf(permission) != -1)\n return true;\n }\n return false;\n });\n vm.filteredModules = vm.modules;\n }\n\n function filterReportsByPermission() {\n vm.reports = vm.allReports.filter(function (report) {\n var reportWorkspaceId = report.workspaceId;\n if ($rootScope.selectedWorkspace && $rootScope.selectedWorkspace.id) {\n if (reportWorkspaceId !== $rootScope.selectedWorkspace.id) {\n return false;\n }\n }\n var permissionWorkspaces = user.permissions;\n var permission = \"REPORT/VIEW\";\n var permissionWorkspace = permissionWorkspaces.filter(function (p) {\n return p.workspaceId === reportWorkspaceId;\n })[0];\n if (permissionWorkspace) {\n if (permissionWorkspace.permissions.indexOf(permission) != -1)\n return true;\n }\n return false;\n })\n }\n\n function filterPipelinesByPermission() {\n vm.pipelines = vm.allPipelines.filter(function (pipeline) {\n var pipelineWorkspaceId = pipeline.workspaceId;\n if ($rootScope.selectedWorkspace && $rootScope.selectedWorkspace.id) {\n if (pipelineWorkspaceId !== $rootScope.selectedWorkspace.id) {\n return false;\n }\n }\n var permissionWorkspaces = user.permissions;\n var permission = \"PIPELINE/VIEW\";\n var permissionWorkspace = permissionWorkspaces.filter(function (p) {\n return p.workspaceId === pipelineWorkspaceId;\n })[0];\n if (permissionWorkspace) {\n if (permissionWorkspace.permissions.indexOf(permission) != -1)\n return true;\n }\n return false;\n })\n }\n // Data\n // Module List\n\n function getModulesPipelinesReports() {\n if (vm.user.workspaces.length>0) {\n api.module.all()\n .then(function (response) {\n vm.allModules = response;\n vm.modules = response;\n vm.filteredModules = vm.modules;\n filterModulesByPermission();\n //vm.pagination.last = calculatePageCounts(vm.modules.length);\n vm.pagination.modules.last = calculatePageCounts(vm.modules.length);\n },\n function (response) {\n $log.error(response);\n });\n\n api.pipeline.list()\n .then(function (response) {\n vm.allPipelines = response;\n vm.pipelines = response;\n filterPipelinesByPermission();\n vm.pagination.pipelines.last = calculatePageCounts(vm.pipelines.length);\n //vm.pagination.last = calculatePageCounts(vm.modules.length);\n },\n function (response) {\n $log.error(response);\n });\n\n api.report.list()\n .then(function (response) {\n vm.allReports = response;\n vm.reports = response;\n filterReportsByPermission();\n //vm.pagination.last = calculatePageCounts(vm.reports.length);\n vm.pagination.reports.last = calculatePageCounts(vm.reports.length);\n },\n function (response) {\n $log.error(response);\n });\n\n } else {\n setTimeout(function () { toastService.serverError($translate.instant('MANAGEMENT.WORKSPACE.NO_WORKSPACE')); }, 2000);\n }\n }\n\n vm.getWebSources = function (page) {\n var order = vm.orderDescending == true ? \"DESC\" : \"ASC\";\n var sort;\n if(vm.order == 'createdDate'){\n sort = 'createDate';\n }else{\n sort = vm.order;\n }\n var size = vm.itemCountForOnePage;\n var search = vm.filters.search;\n \n var topicsInclude = false;\n if(vm.filters != undefined){\n if(vm.filters.topicsInclude != undefined){\n topicsInclude = vm.filters.topicsInclude;\n }\n }\n\n if (vm.activeSources.includes(\"WEBSOURCE\")) {\n \n api.source.getTemplates(vm.user.selectedWorkspace.id, page, size,sort, order, search, null, topicsInclude)\n .then(function (response) {\n response.content.forEach(function (k) {\n k.sourcetype = \"web\";\n })\n vm.sources = response.content;\n vm.pagination.sources.last = response.totalPages;\n vm.pagination.sources.current = response.number;\n vm.pagination.sources.totalElements = response.totalElements;\n },\n function (response) {\n $log.error(response);\n });\n }\n }\n\n vm.isSourceActive = function (type) {\n return vm.activeSources.includes(type);\n }\n\n function setWorkspaceLogo(workspaceId) {\n vm.workspaceLogo = null;\n if (!workspaceId) return;\n if (vm.workspaceLogos) {\n var param = vm.workspaceLogos.filter(function (k) { return k.code == workspaceId })[0]\n if (param) {\n vm.workspaceLogo = param.value;\n }\n }\n }\n\n\n getModulesPipelinesReports(); \n\n //Module Types\n api.module.types()\n .then(function (response) {\n vm.types = response;\n },\n function (response) {\n $log.error(response);\n });\n\n vm.colors = ['blue', 'blue-grey', 'orange', 'pink', 'purple'];\n vm.avatarColors = ['blue-bg', 'blue-grey-bg', 'orange-bg', 'pink-bg', 'purple-bg'];\n vm.icons = ['none', 'icon-source-fork', 'icon-linode', 'icon-tooltip-text', 'icon-nfc-tap', 'icon-emoticon', 'icon-code-tags', 'icon-emoticon']\n\n // Tasks will be filtered against these models\n vm.filters = {\n search: '',\n types: [],\n };\n vm.filtersDefaults = angular.copy(vm.filters);\n\n vm.order = 'createdDate';\n vm.orderDescending = false;\n\n vm.sortableOptions = {\n handle: '.handle',\n forceFallback: true,\n ghostClass: 'todo-item-placeholder',\n fallbackClass: 'todo-item-ghost',\n fallbackOnBody: true,\n sort: true\n };\n vm.msScrollOptions = {\n suppressScrollX: true\n };\n\n // Methods\n vm.preventDefault = preventDefault;\n vm.toggleSidenav = toggleSidenav;\n vm.toggleFilter = toggleFilter;\n vm.toggleFilterWithEmpty = toggleFilterWithEmpty;\n vm.resetFilters = resetFilters;\n vm.toggleTypeFilter = toggleTypeFilter;\n vm.isTypeFilterExists = isTypeFilterExists;\n vm.setCurrentPage = setCurrentPage;\n vm.getRoute = getRoute;\n vm.openModule = openModule;\n vm.openPipeline = openPipeline;\n vm.showPipelines = showPipelines;\n vm.openReport = openReport;\n vm.openSource = openSource;\n vm.getPermission = getPermission;\n vm.workspaceLogos = appSettings.workspaceLogos;\n setWorkspaceLogo(vm.user.selectedWorkspace.id);\n vm.enableFooter = vm.workspaceLogo ? true : __env.enableFooter;\n\n function imageExists(url, callback) {\n var img = new Image();\n img.onload = function () {\n callback(true);\n };\n img.onerror = function () {\n callback(false);\n };\n img.src = url;\n }\n\n function showPipelines() {\n vm.isShowModule = false;\n }\n\n function openModule(item) {\n //$cookies.put(\"lastworkspaceid\", item.workspaceId);\n $settings.saveUserCommonSettings(\"lastWorkspaceId\", item.workspaceId);\n $state.go(getRoute(item), {\n id: item.id\n });\n };\n\n function openPipeline(item) {\n //$cookies.put(\"lastworkspaceid\", item.workspaceId);\n $settings.saveUserCommonSettings(\"lastWorkspaceId\", item.workspaceId);\n $state.go('app.pipeline.settings', {\n id: item.id\n });\n };\n\n function openReport(item) {\n //$cookies.put(\"lastworkspaceid\", item.workspaceId);\n $settings.saveUserCommonSettings(\"lastWorkspaceId\", item.workspaceId);\n $state.go('app.report.overview', {\n id: item.id\n });\n };\n\n function openSource(item) {\n //$cookies.put(\"lastworkspaceid\", item.workspaceId);\n //$settings.saveUserCommonSettings(\"lastWorkspaceId\", item.workspaceId);\n $state.go(getSourceRoute(item), {\n websourceid: item.id\n });\n };\n\n function getSourceRoute(item) {\n switch (item.sourcetype) {\n case \"web\":\n return \"app.sources.web.edit\";\n }\n }\n\n function getRoute(item) {\n switch (item.moduleType.id) {\n case 1:\n case 2:\n case 3:\n case 4:\n case 7:\n case \"1\":\n case \"2\":\n case \"3\":\n case \"4\":\n case \"7\":\n return \"app.module.overview\";\n case \"5\":\n case \"6\":\n case 5:\n case 6:\n return \"app.module.test\";\n }\n };\n\n function getPermission(type) {\n switch (type.id) {\n case 1:\n case \"1\":\n return \"MODULE/CLASSIFICATION/VIEW\";\n case 2:\n case \"2\":\n return \"MODULE/CLUSTERING/VIEW\";\n case 3:\n case \"3\":\n return \"MODULE/TOPICMODELING/VIEW\";\n case 4:\n case \"4\":\n return \"MODULE/ROOTCAUSE/VIEW\";\n case 5:\n case \"5\":\n return \"MODULE/SENTIMENT/VIEW\";\n case 6:\n case \"6\":\n return \"MODULE/NAMEDENTITY/VIEW\";\n case 7:\n case \"7\":\n return \"MODULE/CLASSIFICATION/VIEW\";\n }\n };\n\n function setCurrentPage(page) {\n if (vm.viewType == 0) {\n if (page > 0 && page <= vm.pagination.modules.last)\n vm.pagination.modules.current = page;\n } else if (vm.viewType == 1) {\n if (page > 0 && page <= vm.pagination.pipelines.last)\n vm.pagination.pipelines.current = page;\n } else if (vm.viewType == 2) {\n if (page > 0 && page <= vm.pagination.reports.last)\n vm.pagination.reports.current = page;\n } else if (vm.viewType == 3) {\n if (page >= 0 && page < vm.pagination.sources.last){\n vm.getWebSources(page);\n vm.pagination.sources.current = page;\n\n }\n \n }\n }\n \n function calculatePageCounts(count) {\n var l = vm.itemCountForOnePage;\n var lastpage = Math.ceil(count / l);\n return lastpage;\n }\n vm.onSortChange = function () {\n vm.orderDescending = vm.order == '' ? false : vm.orderDescending;\n if(vm.viewType == 3){\n vm.getWebSources(vm.pagination.sources.current);\n }\n }\n vm.onOrderChange = function () {\n vm.orderDescending = !vm.orderDescending\n if(vm.viewType == 3){\n vm.getWebSources(0);\n }\n }\n vm.onSearchChange = function() {\n if(vm.viewType == 3){\n //add debounce here..\n vm.getWebSources(0);\n }\n }\n vm.setNumbersOfPages = function () {\n if (vm.viewType == 0) {\n vm.pagination.modules.current = 1;\n vm.pagination.modules.last = calculatePageCounts(vm.filtertedModulesLength);\n } else if (vm.viewType == 1) {\n vm.pagination.pipelines.current = 1;\n vm.pagination.pipelines.last = calculatePageCounts(vm.pipelines.length);\n } else if (vm.viewType == 2) {\n vm.pagination.reports.current = 1;\n vm.pagination.reports.last = calculatePageCounts(vm.reports.length);\n }else if(vm.viewType == 3){\n vm.pagination.sources.current = 0;\n vm.getWebSources(0);\n }\n }\n\n init();\n\n //////////\n\n /**\n * Initialize the controller\n */\n function init() {\n vm.viewType = $stateParams.view == 0 ? $stateParams.view : vm.viewType;\n $utils.googleAnalyticsSetPageview(\"/\");\n $utils.googleAnalyticsSetScreenView(\"Home\");\n }\n\n /**\n * Prevent default\n *\n * @param e\n */\n function preventDefault(e) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n\n /**\n * Toggle sidenav\n *\n * @param sidenavId\n */\n function toggleSidenav(sidenavId) {\n $mdSidenav(sidenavId).toggle();\n }\n /**\n * Toggles filter with true or false\n *\n * @param filter\n */\n function toggleFilter(filter) {\n vm.filters[filter] = !vm.filters[filter];\n\n checkFilters();\n }\n\n /**\n * Toggles filter with true or empty string\n * @param filter\n */\n function toggleFilterWithEmpty(filter) {\n if (vm.filters[filter] == '') {\n vm.filters[filter] = true;\n } else {\n vm.filters[filter] = '';\n }\n\n checkFilters();\n }\n\n /**\n * Reset filters\n */\n function resetFilters() {\n vm.showAllTasks = true;\n vm.filters = angular.copy(vm.filtersDefaults);\n var ff = vm.filters.types.filter(function(f){ return f.id > 0 && f.id <= 7 ; });\n if(ff && ff.length > 0){\n var types = [];\n vm.filters.types.forEach(function(i) { types.push(i.id);});\n var length = vm.modules.filter(function(m){return types.indexOf(m.moduleTypeId) != -1; }).length;\n if(length == 0){\n vm.pagination.modules.last = 1; \n }else {\n vm.pagination.modules.last = Math.ceil(length / vm.itemCountForOnePage);\n }\n vm.pagination.modules.current = 1;\n }\n if(!vm.filters.types || vm.filters.types.length == 0){\n if(!vm.modules || vm.modules.length == 0){\n vm.pagination.modules.last = 1; \n }else{\n vm.pagination.modules.last = Math.ceil(vm.modules.length / vm.itemCountForOnePage);\n }\n vm.pagination.modules.current = 1;\n }\n vm.filtertedModulesLength = vm.modules.length;\n vm.setNumbersOfPages();\n\n\n }\n\n vm.filtertedModulesLength = vm.modules.length;\n\n /**\n * Check filters and mark showAllTasks\n * as true if no filters selected\n */\n function checkFilters() {\n vm.showAll = !!angular.equals(vm.filtersDefaults, vm.filters);\n }\n\n /**\n * Toggles type filter\n *\n * @param tag\n */\n function toggleTypeFilter(type) {\n var i = vm.filters.types.indexOf(type);\n if (i > -1) {\n vm.filters.types.splice(i, 1);\n } else {\n vm.filters.types.push(type);\n }\n checkFilters();\n var ff = vm.filters.types.filter(function(f){ return f.id > 0 && f.id <= 7 ; });\n if(ff && ff.length > 0){\n var types = [];\n vm.filters.types.forEach(function(i) { types.push(i.id);});\n var length = vm.modules.filter(function (m) { return types.indexOf(m.moduleTypeId) != -1; }).length;\n vm.filtertedModulesLength = length;\n if(length == 0){\n vm.pagination.modules.last = 1; \n }else {\n vm.pagination.modules.last = Math.ceil(length / vm.itemCountForOnePage);\n }\n vm.pagination.modules.current = 1;\n }\n if(!vm.filters.types || vm.filters.types.length == 0){\n if(!vm.modules || vm.modules.length == 0){\n vm.pagination.modules.last = 1; \n }else{\n vm.pagination.modules.last = Math.ceil(vm.modules.length / vm.itemCountForOnePage);\n }\n vm.pagination.modules.current = 1;\n }\n if (vm.filters.types.length == 0) {\n vm.filtertedModulesLength = vm.modules.length;\n }\n vm.setNumbersOfPages();\n }\n\n /**\n * Returns if tag exists in the tagsFilter\n *\n * @param tag\n * @returns {boolean}\n */\n function isTypeFilterExists(type) {\n return vm.filters.types.indexOf(type) > -1;\n }\n\n \n $scope.$watchCollection('filtered', function () {\n if (!vm.modules) return;\n\n var length = vm.modules.length;\n if ($scope.filtered) {\n var length = $scope.filtered.length;\n }\n //vm.pagination.last = calculatePageCounts(length);\n vm.pagination.modules.last = calculatePageCounts(length);\n });\n/*\n $scope.$watch('vm.tempModules', function(newValue, oldValue) {\n console.log(vm.tempModules);\n \n });\n*/\n }\n})();\n\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.quick-panel', [])\n .config(config);\n\n /** @ngInject */\n function config($translatePartialLoaderProvider, msApiProvider)\n {\n // Translation\n $translatePartialLoaderProvider.addPart('app/quick-panel');\n\n // Api\n msApiProvider.register('quickPanel.activities', ['app/data/quick-panel/activities.json']);\n msApiProvider.register('quickPanel.contacts', ['app/data/quick-panel/contacts.json']);\n msApiProvider.register('quickPanel.events', ['app/data/quick-panel/events.json']);\n msApiProvider.register('quickPanel.notes', ['app/data/quick-panel/notes.json']);\n }\n})();\n\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.quick-panel')\n .controller('ChatTabController', ChatTabController);\n\n /** @ngInject */\n function ChatTabController(msApi, $timeout)\n {\n var vm = this;\n\n // Data\n vm.chat = {};\n vm.chatActive = false;\n vm.replyMessage = '';\n\n msApi.request('quickPanel.contacts@get', {},\n // Success\n function (response)\n {\n vm.contacts = response.data;\n }\n );\n\n // Methods\n vm.toggleChat = toggleChat;\n vm.reply = reply;\n\n //////////\n\n function toggleChat(contact)\n {\n vm.chatActive = !vm.chatActive;\n\n if ( vm.chatActive )\n {\n vm.replyMessage = '';\n vm.chat.contact = contact;\n scrollToBottomOfChat(0);\n }\n }\n\n function reply()\n {\n if ( vm.replyMessage === '' )\n {\n return;\n }\n\n if ( !vm.chat.contact.dialog )\n {\n vm.chat.contact.dialog = [];\n }\n\n vm.chat.contact.dialog.push({\n who : 'user',\n message: vm.replyMessage,\n time : 'Just now'\n });\n\n vm.replyMessage = '';\n\n scrollToBottomOfChat(400);\n }\n\n function scrollToBottomOfChat(speed)\n {\n var chatDialog = angular.element('#chat-dialog');\n\n $timeout(function ()\n {\n chatDialog.animate({\n scrollTop: chatDialog[0].scrollHeight\n }, speed);\n }, 0);\n\n }\n }\n\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .controller('MsWidgetController', MsWidgetController)\n .directive('msWidget', msWidgetDirective)\n .directive('msWidgetFront', msWidgetFrontDirective)\n .directive('msWidgetBack', msWidgetBackDirective);\n\n /** @ngInject */\n function MsWidgetController($scope, $element)\n {\n var vm = this;\n\n // Data\n vm.flipped = false;\n\n // Methods\n vm.flip = flip;\n\n //////////\n\n /**\n * Flip the widget\n */\n function flip()\n {\n if ( !isFlippable() )\n {\n return;\n }\n\n // Toggle flipped status\n vm.flipped = !vm.flipped;\n\n // Toggle the 'flipped' class\n $element.toggleClass('flipped', vm.flipped);\n }\n\n /**\n * Check if widget is flippable\n *\n * @returns {boolean}\n */\n function isFlippable()\n {\n return (angular.isDefined($scope.flippable) && $scope.flippable === true);\n }\n }\n\n /** @ngInject */\n function msWidgetDirective()\n {\n return {\n restrict : 'E',\n scope : {\n flippable: '=?'\n },\n controller: 'MsWidgetController',\n transclude: true,\n compile : function (tElement)\n {\n tElement.addClass('ms-widget');\n\n return function postLink(scope, iElement, iAttrs, MsWidgetCtrl, transcludeFn)\n {\n // Custom transclusion\n transcludeFn(function (clone)\n {\n iElement.empty();\n iElement.append(clone);\n });\n\n //////////\n };\n }\n };\n }\n\n /** @ngInject */\n function msWidgetFrontDirective()\n {\n return {\n restrict : 'E',\n require : '^msWidget',\n transclude: true,\n compile : function (tElement)\n {\n tElement.addClass('ms-widget-front');\n\n return function postLink(scope, iElement, iAttrs, MsWidgetCtrl, transcludeFn)\n {\n // Custom transclusion\n transcludeFn(function (clone)\n {\n iElement.empty();\n iElement.append(clone);\n });\n\n // Methods\n scope.flipWidget = MsWidgetCtrl.flip;\n };\n }\n };\n }\n\n /** @ngInject */\n function msWidgetBackDirective()\n {\n return {\n restrict : 'E',\n require : '^msWidget',\n transclude: true,\n compile : function (tElement)\n {\n tElement.addClass('ms-widget-back');\n\n return function postLink(scope, iElement, iAttrs, MsWidgetCtrl, transcludeFn)\n {\n // Custom transclusion\n transcludeFn(function (clone)\n {\n iElement.empty();\n iElement.append(clone);\n });\n\n // Methods\n scope.flipWidget = MsWidgetCtrl.flip;\n };\n }\n };\n }\n\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .controller('MsTimelineController', MsTimelineController)\n .directive('msTimeline', msTimelineDirective)\n .directive('msTimelineItem', msTimelineItemDirective);\n\n /** @ngInject */\n function MsTimelineController()\n {\n var vm = this;\n\n // Data\n vm.scrollEl = undefined;\n\n // Methods\n vm.setScrollEl = setScrollEl;\n vm.getScrollEl = getScrollEl;\n\n //////////\n\n /**\n * Set scroll element\n *\n * @param scrollEl\n */\n function setScrollEl(scrollEl)\n {\n vm.scrollEl = scrollEl;\n }\n\n /**\n * Get scroll element\n *\n * @returns {undefined|*}\n */\n function getScrollEl()\n {\n return vm.scrollEl;\n }\n }\n\n /** @ngInject */\n function msTimelineDirective()\n {\n return {\n scope : {\n loadMore: '&?msTimelineLoadMore'\n },\n controller: 'MsTimelineController',\n compile : function (tElement)\n {\n tElement.addClass('ms-timeline');\n\n return function postLink(scope, iElement, iAttrs, MsTimelineCtrl)\n {\n // Create an element for triggering the load more action and append it\n var loadMoreEl = angular.element('
');\n iElement.append(loadMoreEl);\n\n // Grab the scrollable element and store it in the controller for general use\n var scrollEl = angular.element('#content');\n MsTimelineCtrl.setScrollEl(scrollEl);\n\n // Threshold\n var threshold = 144;\n\n // Register onScroll event for the first time\n registerOnScroll();\n\n /**\n * onScroll Event\n */\n function onScroll()\n {\n if ( scrollEl.scrollTop() + scrollEl.height() + threshold > loadMoreEl.position().top )\n {\n // Show the loader\n loadMoreEl.addClass('show');\n\n // Unregister scroll event to prevent triggering the function over and over again\n unregisterOnScroll();\n\n // Trigger load more event\n scope.loadMore().then(\n // Success\n function ()\n {\n // Hide the loader\n loadMoreEl.removeClass('show');\n\n // Register the onScroll event again\n registerOnScroll();\n },\n\n // Error\n function ()\n {\n // Remove the loader completely\n loadMoreEl.remove();\n }\n );\n }\n }\n\n /**\n * onScroll event registerer\n */\n function registerOnScroll()\n {\n scrollEl.on('scroll', onScroll);\n }\n\n /**\n * onScroll event unregisterer\n */\n function unregisterOnScroll()\n {\n scrollEl.off('scroll', onScroll);\n }\n\n // Cleanup\n scope.$on('$destroy', function ()\n {\n unregisterOnScroll();\n });\n };\n }\n };\n }\n\n /** @ngInject */\n function msTimelineItemDirective($timeout, $q)\n {\n return {\n scope : true,\n require: '^msTimeline',\n compile: function (tElement)\n {\n tElement.addClass('ms-timeline-item').addClass('hidden');\n\n return function postLink(scope, iElement, iAttrs, MsTimelineCtrl)\n {\n var threshold = 72,\n itemLoaded = false,\n itemInViewport = false,\n scrollEl = MsTimelineCtrl.getScrollEl();\n\n //////////\n\n init();\n\n /**\n * Initialize\n */\n function init()\n {\n // Check if the timeline item has ms-card\n if ( iElement.find('ms-card') )\n {\n // If the ms-card template loaded...\n scope.$on('msCard::cardTemplateLoaded', function (event, args)\n {\n var cardEl = angular.element(args[0]);\n\n // Test the card to see if there is any image on it\n testForImage(cardEl).then(function ()\n {\n $timeout(function ()\n {\n itemLoaded = true;\n });\n });\n });\n }\n else\n {\n // Test the element to see if there is any image on it\n testForImage(iElement).then(function ()\n {\n $timeout(function ()\n {\n itemLoaded = true;\n });\n });\n }\n\n // Check if the loaded element also in the viewport\n scrollEl.on('scroll', testForVisibility);\n\n // Test for visibility for the first time without waiting for the scroll event\n testForVisibility();\n }\n\n // Item ready watcher\n var itemReadyWatcher = scope.$watch(\n function ()\n {\n return itemLoaded && itemInViewport;\n },\n function (current, old)\n {\n if ( angular.equals(current, old) )\n {\n return;\n }\n\n if ( current )\n {\n iElement.removeClass('hidden').addClass('animate');\n\n // Unbind itemReadyWatcher\n itemReadyWatcher();\n }\n }, true);\n\n /**\n * Test the given element for image\n *\n * @param element\n * @returns promise\n */\n function testForImage(element)\n {\n var deferred = $q.defer(),\n imgEl = element.find('img');\n\n if ( imgEl.length > 0 )\n {\n imgEl.on('load', function ()\n {\n deferred.resolve('Image is loaded');\n });\n }\n else\n {\n deferred.resolve('No images');\n }\n\n return deferred.promise;\n }\n\n /**\n * Test the element for visibility\n */\n function testForVisibility()\n {\n if ( scrollEl.scrollTop() + scrollEl.height() > iElement.position().top + threshold )\n {\n $timeout(function ()\n {\n itemInViewport = true;\n });\n\n // Unbind the scroll event\n scrollEl.off('scroll', testForVisibility);\n }\n }\n };\n }\n };\n }\n})();\n(function () {\n 'use strict';\n\n angular\n .module('app.core')\n .controller('MsStepperController', MsStepperController)\n .directive('msStepper', msStepperDirective)\n .directive('msStepperStep', msStepperStepDirective);\n\n /** @ngInject */\n function MsStepperController($timeout) {\n var vm = this;\n\n // Data\n vm.mainForm = undefined;\n\n vm.steps = [];\n vm.currentStep = undefined;\n vm.currentStepNumber = 1;\n\n // Methods\n vm.registerMainForm = registerMainForm;\n vm.registerStep = registerStep;\n vm.setupSteps = setupSteps;\n vm.resetForm = resetForm;\n\n vm.setCurrentStep = setCurrentStep;\n\n vm.gotoStep = gotoStep;\n vm.gotoPreviousStep = gotoPreviousStep;\n vm.gotoNextStep = gotoNextStep;\n vm.gotoFirstStep = gotoFirstStep;\n vm.gotoLastStep = gotoLastStep;\n\n vm.isFirstStep = isFirstStep;\n vm.isLastStep = isLastStep;\n\n vm.isStepCurrent = isStepCurrent;\n vm.isStepDisabled = isStepDisabled;\n vm.isStepOptional = isStepOptional;\n vm.isStepValid = isStepValid;\n vm.isStepNumberValid = isStepNumberValid;\n\n vm.isFormValid = isFormValid;\n\n vm.isStepHidden = isStepHidden;\n\n //////////\n\n /**\n * Register the main form\n *\n * @param form\n */\n function registerMainForm(form) {\n vm.mainForm = form;\n }\n\n /**\n * Register a step\n *\n * @param element\n * @param scope\n * @param form\n */\n function registerStep(element, scope, form) {\n var step = {\n element: element,\n scope: scope,\n form: form,\n stepNumber: scope.step || (vm.steps.length + 1),\n stepTitle: scope.stepTitle,\n hidden: scope.hidden\n };\n\n // Push the step into steps array\n vm.steps.push(step);\n\n // Sort steps by stepNumber\n vm.steps.sort(function (a, b) {\n return a.stepNumber - b.stepNumber;\n });\n }\n\n /**\n * Setup steps for the first time\n */\n function setupSteps() {\n vm.setCurrentStep(vm.currentStepNumber);\n }\n\n /**\n * Reset steps and the main form\n */\n function resetForm() {\n // Timeout is required here because we need to\n // let form model to reset before setting the\n // statuses\n $timeout(function () {\n // Reset all the steps\n for (var x = 0; x < vm.steps.length; x++) {\n vm.steps[x].form.$setPristine();\n vm.steps[x].form.$setUntouched();\n }\n\n // Reset the main form\n vm.mainForm.$setPristine();\n vm.mainForm.$setUntouched();\n\n // Go to first step\n gotoFirstStep();\n })\n }\n\n /**\n * Set current step\n *\n * @param stepNumber\n */\n function setCurrentStep(stepNumber) {\n // If the stepNumber is not a valid step number, bail...\n if (!isStepNumberValid(stepNumber)) {\n return;\n }\n\n // Update the current step number\n vm.currentStepNumber = stepNumber;\n\n // Hide all steps\n for (var i = 0; i < vm.steps.length; i++) {\n vm.steps[i].element.hide();\n }\n\n // Show the current step\n vm.steps[vm.currentStepNumber - 1].element.show();\n }\n\n /**\n * Go to a step\n *\n * @param stepNumber\n */\n function gotoStep(stepNumber) {\n vm.setCurrentStep(stepNumber);\n }\n\n /**\n * Go to the previous step\n */\n function gotoPreviousStep() {\n vm.setCurrentStep(vm.currentStepNumber - 1);\n }\n\n /**\n * Go to the next step\n */\n function gotoNextStep() {\n vm.setCurrentStep(vm.currentStepNumber + 1);\n }\n\n /**\n * Go to the first step\n */\n function gotoFirstStep() {\n vm.setCurrentStep(1);\n }\n\n /**\n * Go to the last step\n */\n function gotoLastStep() {\n vm.setCurrentStep(vm.steps.length);\n }\n\n /**\n * Check if the current step is the first step\n *\n * @returns {boolean}\n */\n function isFirstStep() {\n return vm.currentStepNumber === 1;\n }\n\n /**\n * Check if the current step is the last step\n *\n * @returns {boolean}\n */\n function isLastStep() {\n var i = 0;\n var result = false;\n for (var i in vm.steps) {\n var step = vm.steps[i];\n if (step.stepNumber <= vm.currentStepNumber - 1)\n continue;\n if (step.stepNumber > vm.currentStepNumber) {\n var sn = parseInt(i) + 1;\n result = isStepHidden(sn);\n if (!result) break;\n }\n }\n\n if (vm.currentStepNumber === vm.steps.length)\n result = true;\n\n return result;\n //return vm.currentStepNumber === vm.steps.length;\n }\n\n /**\n * Check if the given step is the current one\n *\n * @param stepNumber\n * @returns {null|boolean}\n */\n function isStepCurrent(stepNumber) {\n // If the stepNumber is not a valid step number, bail...\n if (!isStepNumberValid(stepNumber)) {\n return null;\n }\n\n return vm.currentStepNumber === stepNumber;\n }\n\n /**\n * Check if the given step should be disabled\n *\n * @param stepNumber\n * @returns {null|boolean}\n */\n function isStepDisabled(stepNumber) {\n // If the stepNumber is not a valid step number, bail...\n if (!isStepNumberValid(stepNumber)) {\n return null;\n }\n\n var disabled = false;\n\n for (var i = 1; i < stepNumber; i++) {\n if (!isStepValid(i)) {\n disabled = true;\n break;\n }\n }\n\n return disabled;\n }\n\n /**\n * Check if the given step is optional\n *\n * @param stepNumber\n * @returns {null|boolean}\n */\n function isStepOptional(stepNumber) {\n // If the stepNumber is not a valid step number, bail...\n if (!isStepNumberValid(stepNumber)) {\n return null;\n }\n\n return vm.steps[stepNumber - 1].scope.optionalStep;\n }\n\n function isStepHidden(stepNumber) {\n if (!vm.steps) return false;\n if (!vm.steps[stepNumber - 1]) return false;\n if (!vm.steps[stepNumber - 1].scope) return false;\n\n return vm.steps[stepNumber - 1].scope.hidden;\n }\n\n /**\n * Check if the given step is valid\n *\n * @param stepNumber\n * @returns {null|boolean}\n */\n function isStepValid(stepNumber) {\n // If the stepNumber is not a valid step number, bail...\n if (!isStepNumberValid(stepNumber)) {\n return null;\n }\n\n // If the step is optional, always return true\n if (isStepOptional(stepNumber)) {\n return true;\n }\n\n return vm.steps[stepNumber - 1].form.$valid;\n }\n\n /**\n * Check if the given step number is a valid step number\n *\n * @param stepNumber\n * @returns {boolean}\n */\n function isStepNumberValid(stepNumber) {\n return !(stepNumber < 1 || stepNumber > vm.steps.length);\n }\n\n /**\n * Check if the entire form is valid\n *\n * @returns {boolean}\n */\n function isFormValid() {\n return vm.mainForm.$valid;\n }\n }\n\n /** @ngInject */\n function msStepperDirective() {\n return {\n restrict: 'A',\n require: ['form', 'msStepper'],\n priority: 1001,\n controller: 'MsStepperController as MsStepper',\n bindToController: {\n model: '=ngModel'\n },\n transclude: true,\n templateUrl: 'app/core/directives/ms-stepper/templates/horizontal/horizontal.html',\n compile: function (tElement) {\n tElement.addClass('ms-stepper');\n\n return function postLink(scope, iElement, iAttrs, ctrls) {\n var FormCtrl = ctrls[0],\n MsStepperCtrl = ctrls[1];\n\n // Register the main form and setup\n // the steps for the first time\n MsStepperCtrl.registerMainForm(FormCtrl);\n MsStepperCtrl.setupSteps();\n };\n }\n }\n }\n\n /** @ngInject */\n function msStepperStepDirective() {\n return {\n restrict: 'E',\n require: ['form', '^msStepper'],\n priority: 1000,\n scope: {\n step: '=?',\n stepTitle: '=?',\n optionalStep: '=?',\n hidden: '=?'\n },\n compile: function (tElement) {\n tElement.addClass('ms-stepper-step');\n\n return function postLink(scope, iElement, iAttrs, ctrls) {\n var FormCtrl = ctrls[0],\n MsStepperCtrl = ctrls[1];\n\n // Is it an optional step?\n scope.optionalStep = angular.isDefined(iAttrs.optionalStep);\n\n // Is it an step is hidden?\n scope.hidden = angular.isDefined(iAttrs.hidden);\n\n // Register the step\n MsStepperCtrl.registerStep(iElement, scope, FormCtrl);\n\n // Hide the step by default\n iElement.hide();\n };\n }\n }\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .directive('msSplashScreen', msSplashScreenDirective);\n\n /** @ngInject */\n function msSplashScreenDirective($animate)\n {\n return {\n restrict: 'E',\n link : function (scope, iElement)\n {\n var splashScreenRemoveEvent = scope.$on('msSplashScreen::remove', function ()\n {\n $animate.leave(iElement).then(function ()\n {\n // De-register scope event\n splashScreenRemoveEvent();\n\n // Null-ify everything else\n scope = iElement = null;\n });\n });\n }\n };\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .directive('msSidenavHelper', msSidenavHelperDirective);\n\n /** @ngInject */\n function msSidenavHelperDirective()\n {\n return {\n restrict: 'A',\n require : '^mdSidenav',\n link : function (scope, iElement, iAttrs, MdSidenavCtrl)\n {\n // Watch md-sidenav open & locked open statuses\n // and add class to the \".page-layout\" if only\n // the sidenav open and NOT locked open\n scope.$watch(function ()\n {\n return MdSidenavCtrl.isOpen() && !MdSidenavCtrl.isLockedOpen();\n }, function (current)\n {\n if ( angular.isUndefined(current) )\n {\n return;\n }\n\n iElement.parent().toggleClass('full-height', current);\n angular.element('html').toggleClass('sidenav-open', current);\n });\n }\n };\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .directive('msSearchBar', msSearchBarDirective);\n\n /** @ngInject */\n function msSearchBarDirective($document)\n {\n return {\n restrict : 'E',\n scope : true,\n templateUrl: 'app/core/directives/ms-search-bar/ms-search-bar.html',\n compile : function (tElement)\n {\n // Add class\n tElement.addClass('ms-search-bar');\n\n return function postLink(scope, iElement)\n {\n var expanderEl,\n collapserEl;\n\n // Initialize\n init();\n\n function init()\n {\n expanderEl = iElement.find('#ms-search-bar-expander');\n collapserEl = iElement.find('#ms-search-bar-collapser');\n\n expanderEl.on('click', expand);\n collapserEl.on('click', collapse);\n }\n\n /**\n * Expand\n */\n function expand()\n {\n iElement.addClass('expanded');\n\n // Esc key event\n $document.on('keyup', escKeyEvent);\n }\n\n /**\n * Collapse\n */\n function collapse()\n {\n iElement.removeClass('expanded');\n }\n\n /**\n * Escape key event\n *\n * @param e\n */\n function escKeyEvent(e)\n {\n if ( e.keyCode === 27 )\n {\n collapse();\n $document.off('keyup', escKeyEvent);\n }\n }\n };\n }\n };\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .directive('msResponsiveTable', msResponsiveTableDirective);\n\n /** @ngInject */\n function msResponsiveTableDirective()\n {\n return {\n restrict: 'A',\n link : function (scope, iElement)\n {\n // Wrap the table\n var wrapper = angular.element('
');\n iElement.after(wrapper);\n wrapper.append(iElement);\n\n //////////\n }\n };\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .provider('msScrollConfig', msScrollConfigProvider)\n .directive('msScroll', msScrollDirective);\n\n /** @ngInject */\n function msScrollConfigProvider()\n {\n // Default configuration\n var defaultConfiguration = {\n wheelSpeed : 1,\n wheelPropagation : false,\n swipePropagation : true,\n minScrollbarLength : null,\n maxScrollbarLength : null,\n useBothWheelAxes : false,\n useKeyboard : true,\n suppressScrollX : false,\n suppressScrollY : false,\n scrollXMarginOffset : 0,\n scrollYMarginOffset : 0,\n stopPropagationOnClick: true\n };\n\n // Methods\n this.config = config;\n\n //////////\n\n /**\n * Extend default configuration with the given one\n *\n * @param configuration\n */\n function config(configuration)\n {\n defaultConfiguration = angular.extend({}, defaultConfiguration, configuration);\n }\n\n /**\n * Service\n */\n this.$get = function ()\n {\n var service = {\n getConfig: getConfig\n };\n\n return service;\n\n //////////\n\n /**\n * Return the config\n */\n function getConfig()\n {\n return defaultConfiguration;\n }\n };\n }\n\n /** @ngInject */\n function msScrollDirective($timeout, msScrollConfig, msUtils, fuseConfig)\n {\n return {\n restrict: 'AE',\n compile : function (tElement)\n {\n // Do not replace scrollbars if\n // 'disableCustomScrollbars' config enabled\n if ( fuseConfig.getConfig('disableCustomScrollbars') )\n {\n return;\n }\n\n // Do not replace scrollbars on mobile devices\n // if 'disableCustomScrollbarsOnMobile' config enabled\n if ( fuseConfig.getConfig('disableCustomScrollbarsOnMobile') && msUtils.isMobile() )\n {\n return;\n }\n\n // Add class\n tElement.addClass('ms-scroll');\n\n return function postLink(scope, iElement, iAttrs)\n {\n var options = {};\n\n // If options supplied, evaluate the given\n // value. This is because we don't want to\n // have an isolated scope but still be able\n // to use scope variables.\n // We don't want an isolated scope because\n // we should be able to use this everywhere\n // especially with other directives\n if ( iAttrs.msScroll )\n {\n options = scope.$eval(iAttrs.msScroll);\n }\n\n // Extend the given config with the ones from provider\n options = angular.extend({}, msScrollConfig.getConfig(), options);\n\n // Initialize the scrollbar\n $timeout(function ()\n {\n PerfectScrollbar.initialize(iElement[0], options);\n }, 0);\n\n // Update the scrollbar on element mouseenter\n iElement.on('mouseenter', updateScrollbar);\n\n // Watch scrollHeight and update\n // the scrollbar if it changes\n scope.$watch(function ()\n {\n return iElement.prop('scrollHeight');\n }, function (current, old)\n {\n if ( angular.isUndefined(current) || angular.equals(current, old) )\n {\n return;\n }\n\n updateScrollbar();\n });\n\n // Watch scrollWidth and update\n // the scrollbar if it changes\n scope.$watch(function ()\n {\n return iElement.prop('scrollWidth');\n }, function (current, old)\n {\n if ( angular.isUndefined(current) || angular.equals(current, old) )\n {\n return;\n }\n\n updateScrollbar();\n });\n\n /**\n * Update the scrollbar\n */\n function updateScrollbar()\n {\n PerfectScrollbar.update(iElement[0]);\n }\n\n // Cleanup on destroy\n scope.$on('$destroy', function ()\n {\n iElement.off('mouseenter');\n PerfectScrollbar.destroy(iElement[0]);\n });\n };\n }\n };\n }\n})();\n//(function ()\n//{\n// 'use strict';\n\n// angular\n// .module('app.core')\n// .directive('msRandomClass', msRandomClassDirective);\n\n// /** @ngInject */\n// function msRandomClassDirective()\n// {\n// return {\n// restrict: 'A',\n// scope : {\n// msRandomClass: '='\n// },\n// link : function (scope, iElement)\n// {\n// var randomClass = scope.msRandomClass[Math.floor(Math.random() * (scope.msRandomClass.length))];\n// iElement.addClass(randomClass);\n// }\n// };\n// }\n//})();\n(function () {\n 'use strict';\n\n angular\n .module('app.core')\n .provider('msNavigationService', msNavigationServiceProvider)\n .controller('MsNavigationController', MsNavigationController)\n // Vertical\n .directive('msNavigation', msNavigationDirective)\n .controller('MsNavigationNodeController', MsNavigationNodeController)\n .directive('msNavigationNode', msNavigationNodeDirective)\n .directive('msNavigationItem', msNavigationItemDirective)\n //Horizontal\n .directive('msNavigationHorizontal', msNavigationHorizontalDirective)\n .controller('MsNavigationHorizontalNodeController', MsNavigationHorizontalNodeController)\n .directive('msNavigationHorizontalNode', msNavigationHorizontalNodeDirective)\n .directive('msNavigationHorizontalItem', msNavigationHorizontalItemDirective);\n\n /** @ngInject */\n function msNavigationServiceProvider() {\n // Inject $log service\n var $log = angular.injector(['ng']).get('$log');\n\n // Navigation array\n var navigation = [];\n\n var service = this;\n\n // Methods\n service.saveItem = saveItem;\n service.deleteItem = deleteItem;\n service.sortByWeight = sortByWeight;\n\n //////////\n\n /**\n * Create or update the navigation item\n *\n * @param path\n * @param item\n */\n function saveItem(path, item) {\n if (!angular.isString(path)) {\n $log.error('path must be a string (eg. `dashboard.project`)');\n return;\n }\n\n var parts = path.split('.');\n\n // Generate the object id from the parts\n var id = parts[parts.length - 1];\n\n // Get the parent item from the parts\n var parent = _findOrCreateParent(parts);\n\n // Decide if we are going to update or create\n var updateItem = false;\n\n for (var i = 0; i < parent.length; i++) {\n if (parent[i]._id === id) {\n updateItem = parent[i];\n\n break;\n }\n }\n\n // Update\n if (updateItem) {\n angular.extend(updateItem, item);\n\n // Add proper ui-sref\n updateItem.uisref = _getUiSref(updateItem);\n }\n // Create\n else {\n // Create an empty children array in the item\n item.children = [];\n\n // Add the default weight if not provided or if it's not a number\n if (angular.isUndefined(item.weight) || !angular.isNumber(item.weight)) {\n item.weight = 1;\n }\n\n // Add the item id\n item._id = id;\n\n // Add the item path\n item._path = path;\n\n // Add proper ui-sref\n item.uisref = _getUiSref(item);\n\n // Push the item into the array\n parent.push(item);\n }\n }\n\n /**\n * Delete navigation item\n *\n * @param path\n */\n function deleteItem(path) {\n if (!angular.isString(path)) {\n $log.error('path must be a string (eg. `dashboard.project`)');\n return;\n }\n\n // Locate the item by using given path\n var item = navigation,\n parts = path.split('.');\n\n for (var p = 0; p < parts.length; p++) {\n var id = parts[p];\n\n for (var i = 0; i < item.length; i++) {\n if (item[i]._id === id) {\n // If we have a matching path,\n // we have found our object:\n // remove it.\n if (item[i]._path === path) {\n item.splice(i, 1);\n return true;\n }\n\n // Otherwise grab the children of\n // the current item and continue\n item = item[i].children;\n break;\n }\n }\n }\n\n return false;\n }\n\n /**\n * Sort the navigation items by their weights\n *\n * @param parent\n */\n function sortByWeight(parent) {\n // If parent not provided, sort the root items\n if (!parent) {\n parent = navigation;\n parent.sort(_byWeight);\n }\n\n // Sort the children\n for (var i = 0; i < parent.length; i++) {\n var children = parent[i].children;\n\n if (children.length > 1) {\n children.sort(_byWeight);\n }\n\n if (children.length > 0) {\n sortByWeight(children);\n }\n }\n }\n\n /* ----------------- */\n /* Private Functions */\n /* ----------------- */\n\n /**\n * Find or create parent\n *\n * @param parts\n * @returns {Array|Boolean}\n * @private\n */\n function _findOrCreateParent(parts) {\n // Store the main navigation\n var parent = navigation;\n\n // If it's going to be a root item\n // return the navigation itself\n if (parts.length === 1) {\n return parent;\n }\n\n // Remove the last element from the parts as\n // we don't need that to figure out the parent\n parts.pop();\n\n // Find and return the parent\n for (var i = 0; i < parts.length; i++) {\n var _id = parts[i],\n createParent = true;\n\n for (var p = 0; p < parent.length; p++) {\n if (parent[p]._id === _id) {\n parent = parent[p].children;\n createParent = false;\n\n break;\n }\n }\n\n // If there is no parent found, create one, push\n // it into the current parent and assign it as a\n // new parent\n if (createParent) {\n var item = {\n _id: _id,\n _path: parts.join('.'),\n title: _id,\n weight: 1,\n children: []\n };\n\n parent.push(item);\n parent = item.children;\n }\n }\n\n return parent;\n }\n\n /**\n * Sort by weight\n *\n * @param x\n * @param y\n * @returns {number}\n * @private\n */\n function _byWeight(x, y) {\n return parseInt(x.weight) - parseInt(y.weight);\n }\n\n /**\n * Setup the ui-sref using state & state parameters\n *\n * @param item\n * @returns {string}\n * @private\n */\n function _getUiSref(item) {\n var uisref = '';\n\n if (angular.isDefined(item.state)) {\n uisref = item.state;\n\n if (angular.isDefined(item.stateParams) && angular.isObject(item.stateParams)) {\n uisref = uisref + '(' + angular.toJson(item.stateParams) + ')';\n }\n }\n\n return uisref;\n }\n\n /* ----------------- */\n /* Service */\n /* ----------------- */\n\n this.$get = function () {\n var activeItem = null,\n navigationScope = null,\n folded = null,\n foldedOpen = null;\n\n var service = {\n saveItem: saveItem,\n deleteItem: deleteItem,\n sort: sortByWeight,\n clearNavigation: clearNavigation,\n setActiveItem: setActiveItem,\n getActiveItem: getActiveItem,\n getNavigationObject: getNavigationObject,\n setNavigationScope: setNavigationScope,\n setFolded: setFolded,\n getFolded: getFolded,\n setFoldedOpen: setFoldedOpen,\n getFoldedOpen: getFoldedOpen,\n toggleFolded: toggleFolded\n };\n\n return service;\n\n //////////\n\n /**\n * Clear the entire navigation\n */\n function clearNavigation() {\n // Clear the navigation array\n navigation = [];\n\n // Clear the vm.navigation from main controller\n if (navigationScope) {\n navigationScope.vm.navigation = [];\n }\n }\n\n /**\n * Set active item\n *\n * @param node\n * @param scope\n */\n function setActiveItem(node, scope) {\n activeItem = {\n node: node,\n scope: scope\n };\n }\n\n /**\n * Return active item\n */\n function getActiveItem() {\n return activeItem;\n }\n\n /**\n * Return navigation object\n *\n * @param root\n * @returns {Array}\n */\n function getNavigationObject(root) {\n if (root) {\n for (var i = 0; i < navigation.length; i++) {\n if (navigation[i]._id === root) {\n return [navigation[i]];\n }\n }\n }\n\n return navigation;\n }\n\n /**\n * Store navigation's scope for later use\n *\n * @param scope\n */\n function setNavigationScope(scope) {\n navigationScope = scope;\n }\n\n /**\n * Set folded status\n *\n * @param status\n */\n function setFolded(status) {\n folded = status;\n }\n\n /**\n * Return folded status\n *\n * @returns {*}\n */\n function getFolded() {\n return folded;\n }\n\n /**\n * Set folded open status\n *\n * @param status\n */\n function setFoldedOpen(status) {\n foldedOpen = status;\n }\n\n /**\n * Return folded open status\n *\n * @returns {*}\n */\n function getFoldedOpen() {\n return foldedOpen;\n }\n\n\n /**\n * Toggle fold on stored navigation's scope\n */\n function toggleFolded() {\n navigationScope.toggleFolded();\n }\n };\n }\n\n /** @ngInject */\n function MsNavigationController($scope, msNavigationService) {\n var vm = this;\n\n // Data\n if ($scope.root) {\n vm.navigation = msNavigationService.getNavigationObject($scope.root);\n }\n else {\n vm.navigation = msNavigationService.getNavigationObject();\n }\n\n // Methods\n vm.toggleHorizontalMobileMenu = toggleHorizontalMobileMenu;\n\n //////////\n\n init();\n\n /**\n * Initialize\n */\n function init() {\n // Sort the navigation before doing anything else\n msNavigationService.sort();\n }\n\n /**\n * Toggle horizontal mobile menu\n */\n function toggleHorizontalMobileMenu() {\n angular.element('body').toggleClass('ms-navigation-horizontal-mobile-menu-active');\n }\n }\n\n /** @ngInject */\n function msNavigationDirective($rootScope, $timeout, $mdSidenav, msNavigationService) {\n return {\n restrict: 'E',\n scope: {\n folded: '=',\n root: '@'\n },\n controller: 'MsNavigationController as vm',\n templateUrl: 'app/core/directives/ms-navigation/templates/vertical.html',\n transclude: true,\n compile: function (tElement) {\n tElement.addClass('ms-navigation');\n\n return function postLink(scope, iElement) {\n var bodyEl = angular.element('body'),\n foldExpanderEl = angular.element('
'),\n foldCollapserEl = angular.element('
'),\n sidenav = $mdSidenav('navigation');\n\n // Store the navigation in the service for public access\n msNavigationService.setNavigationScope(scope);\n\n // Initialize\n init();\n\n /**\n * Initialize\n */\n function init() {\n // Set the folded status for the first time.\n // First, we have to check if we have a folded\n // status available in the service already. This\n // will prevent navigation to act weird if we already\n // set the fold status, remove the navigation and\n // then re-initialize it, which happens if we\n // change to a view without a navigation and then\n // come back with history.back() function.\n\n // If the service didn't initialize before, set\n // the folded status from scope, otherwise we\n // won't touch anything because the folded status\n // already set in the service...\n if (msNavigationService.getFolded() === null) {\n msNavigationService.setFolded(scope.folded);\n }\n\n if (msNavigationService.getFolded()) {\n // Collapse everything.\n // This must be inside a $timeout because by the\n // time we call this, the 'msNavigation::collapse'\n // event listener is not registered yet. $timeout\n // will ensure that it will be called after it is\n // registered.\n $timeout(function () {\n $rootScope.$broadcast('msNavigation::collapse');\n });\n\n // Add class to the body\n bodyEl.addClass('ms-navigation-folded');\n\n // Set fold expander\n setFoldExpander();\n }\n }\n\n // Sidenav locked open status watcher\n scope.$watch(function () {\n return sidenav.isLockedOpen();\n }, function (current, old) {\n if (angular.isUndefined(current) || angular.equals(current, old)) {\n return;\n }\n\n var folded = msNavigationService.getFolded();\n\n if (folded) {\n if (current) {\n // Collapse everything\n $rootScope.$broadcast('msNavigation::collapse');\n }\n else {\n // Expand the active one and its parents\n var activeItem = msNavigationService.getActiveItem();\n if (activeItem) {\n activeItem.scope.$emit('msNavigation::stateMatched');\n }\n }\n }\n });\n\n // Folded status watcher\n scope.$watch('folded', function (current, old) {\n if (angular.isUndefined(current) || angular.equals(current, old)) {\n return;\n }\n\n setFolded(current);\n });\n\n /**\n * Set folded status\n *\n * @param folded\n */\n function setFolded(folded) {\n // Store folded status on the service for global access\n msNavigationService.setFolded(folded);\n\n if (folded) {\n // Collapse everything\n $rootScope.$broadcast('msNavigation::collapse');\n\n // Add class to the body\n bodyEl.addClass('ms-navigation-folded');\n\n // Set fold expander\n setFoldExpander();\n }\n else {\n // Expand the active one and its parents\n var activeItem = msNavigationService.getActiveItem();\n if (activeItem) {\n activeItem.scope.$emit('msNavigation::stateMatched');\n }\n\n // Remove body class\n bodyEl.removeClass('ms-navigation-folded ms-navigation-folded-open');\n\n // Remove fold collapser\n removeFoldCollapser();\n }\n }\n\n /**\n * Set fold expander\n */\n function setFoldExpander() {\n iElement.parent().append(foldExpanderEl);\n\n // Let everything settle for a moment\n // before registering the event listener\n $timeout(function () {\n foldExpanderEl.on('mouseenter touchstart', onFoldExpanderHover);\n });\n }\n\n /**\n * Set fold collapser\n */\n function setFoldCollapser() {\n bodyEl.find('#main').append(foldCollapserEl);\n foldCollapserEl.on('mouseenter touchstart', onFoldCollapserHover);\n }\n\n /**\n * Remove fold collapser\n */\n function removeFoldCollapser() {\n foldCollapserEl.remove();\n }\n\n /**\n * onHover event of foldExpander\n */\n function onFoldExpanderHover(event) {\n if (event) {\n event.preventDefault();\n }\n\n // Set folded open status\n msNavigationService.setFoldedOpen(true);\n\n // Expand the active one and its parents\n var activeItem = msNavigationService.getActiveItem();\n if (activeItem) {\n activeItem.scope.$emit('msNavigation::stateMatched');\n }\n\n // Add class to the body\n bodyEl.addClass('ms-navigation-folded-open');\n\n // Remove the fold opener\n foldExpanderEl.remove();\n\n // Set fold collapser\n setFoldCollapser();\n }\n\n /**\n * onHover event of foldCollapser\n */\n function onFoldCollapserHover(event) {\n if (event) {\n event.preventDefault();\n }\n\n // Set folded open status\n msNavigationService.setFoldedOpen(false);\n\n // Collapse everything\n $rootScope.$broadcast('msNavigation::collapse');\n\n // Remove body class\n bodyEl.removeClass('ms-navigation-folded-open');\n\n // Remove the fold collapser\n foldCollapserEl.remove();\n\n // Set fold expander\n setFoldExpander();\n }\n\n /**\n * Public access for toggling folded status externally\n */\n scope.toggleFolded = function () {\n var folded = msNavigationService.getFolded();\n\n setFolded(!folded);\n };\n\n /**\n * On $stateChangeStart\n */\n scope.$on('$stateChangeStart', function () {\n // Close the sidenav\n sidenav.close();\n\n // If navigation is folded open, close it\n if (msNavigationService.getFolded()) {\n onFoldCollapserHover();\n }\n });\n\n // Cleanup\n scope.$on('$destroy', function () {\n foldCollapserEl.off('mouseenter touchstart');\n foldExpanderEl.off('mouseenter touchstart');\n });\n };\n }\n };\n }\n\n /** @ngInject */\n function MsNavigationNodeController($scope, $element, $rootScope, $animate, $state, msNavigationService) {\n var vm = this;\n\n // Data\n vm.element = $element;\n vm.node = $scope.node;\n vm.hasChildren = undefined;\n vm.collapsed = undefined;\n vm.collapsable = undefined;\n vm.group = undefined;\n vm.animateHeightClass = 'animate-height';\n\n // Methods\n vm.toggleCollapsed = toggleCollapsed;\n vm.collapse = collapse;\n vm.expand = expand;\n vm.getClass = getClass;\n vm.isHidden = isHidden;\n\n //////////\n\n init();\n\n /**\n * Initialize\n */\n function init() {\n // Setup the initial values\n\n // Has children?\n vm.hasChildren = vm.node.children.length > 0;\n\n // Is group?\n vm.group = !!(angular.isDefined(vm.node.group) && vm.node.group === true);\n\n // Is collapsable?\n if (!vm.hasChildren || vm.group) {\n vm.collapsable = false;\n }\n else {\n vm.collapsable = !!(angular.isUndefined(vm.node.collapsable) || typeof vm.node.collapsable !== 'boolean' || vm.node.collapsable === true);\n }\n\n // Is collapsed?\n if (!vm.collapsable) {\n vm.collapsed = false;\n }\n else {\n vm.collapsed = !!(angular.isUndefined(vm.node.collapsed) || typeof vm.node.collapsed !== 'boolean' || vm.node.collapsed === true);\n }\n\n // Expand all parents if we have a matching state or\n // the current state is a child of the node's state\n if (vm.node.state === $state.current.name || $state.includes(vm.node.state)) {\n // If state params are defined, make sure they are\n // equal, otherwise do not set the active item\n if (angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params)) {\n return;\n }\n\n $scope.$emit('msNavigation::stateMatched');\n\n // Also store the current active menu item\n msNavigationService.setActiveItem(vm.node, $scope);\n }\n\n $scope.$on('msNavigation::stateMatched', function () {\n // Expand if the current scope is collapsable and is collapsed\n if (vm.collapsable && vm.collapsed) {\n $scope.$evalAsync(function () {\n vm.collapsed = false;\n });\n }\n });\n\n // Listen for collapse event\n $scope.$on('msNavigation::collapse', function (event, path) {\n if (vm.collapsed || !vm.collapsable) {\n return;\n }\n\n // If there is no path defined, collapse\n if (angular.isUndefined(path)) {\n vm.collapse();\n }\n // If there is a path defined, do not collapse\n // the items that are inside that path. This will\n // prevent parent items from collapsing\n else {\n var givenPathParts = path.split('.'),\n activePathParts = [];\n\n var activeItem = msNavigationService.getActiveItem();\n if (activeItem) {\n activePathParts = activeItem.node._path.split('.');\n }\n\n // Test for given path\n if (givenPathParts.indexOf(vm.node._id) > -1) {\n return;\n }\n\n // Test for active path\n if (activePathParts.indexOf(vm.node._id) > -1) {\n return;\n }\n\n vm.collapse();\n }\n });\n\n // Listen for $stateChangeSuccess event\n $scope.$on('$stateChangeSuccess', function () {\n if (vm.node.state === $state.current.name) {\n // If state params are defined, make sure they are\n // equal, otherwise do not set the active item\n if (angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params)) {\n return;\n }\n\n // Update active item on state change\n msNavigationService.setActiveItem(vm.node, $scope);\n\n // Collapse everything except the one we're using\n $rootScope.$broadcast('msNavigation::collapse', vm.node._path);\n }\n });\n }\n\n /**\n * Toggle collapsed\n */\n function toggleCollapsed() {\n if (vm.collapsed) {\n vm.expand();\n }\n else {\n vm.collapse();\n }\n }\n\n /**\n * Collapse\n */\n function collapse() {\n // Grab the element that we are going to collapse\n var collapseEl = vm.element.children('ul');\n\n // Grab the height\n var height = collapseEl[0].offsetHeight;\n\n $scope.$evalAsync(function () {\n // Set collapsed status\n vm.collapsed = true;\n\n // Add collapsing class to the node\n vm.element.addClass('collapsing');\n\n // Animate the height\n $animate.animate(collapseEl,\n {\n 'display': 'block',\n 'height': height + 'px'\n },\n {\n 'height': '0px'\n },\n vm.animateHeightClass\n ).then(\n function () {\n // Clear the inline styles after animation done\n collapseEl.css({\n 'display': '',\n 'height': ''\n });\n\n // Clear collapsing class from the node\n vm.element.removeClass('collapsing');\n }\n );\n\n // Broadcast the collapse event so child items can also be collapsed\n $scope.$broadcast('msNavigation::collapse');\n });\n }\n\n /**\n * Expand\n */\n function expand() {\n // Grab the element that we are going to expand\n var expandEl = vm.element.children('ul');\n\n // Move the element out of the dom flow and\n // make it block so we can get its height\n expandEl.css({\n 'position': 'absolute',\n 'visibility': 'hidden',\n 'display': 'block',\n 'height': 'auto'\n });\n\n // Grab the height\n var height = expandEl[0].offsetHeight;\n\n // Reset the style modifications\n expandEl.css({\n 'position': '',\n 'visibility': '',\n 'display': '',\n 'height': ''\n });\n\n $scope.$evalAsync(function () {\n // Set collapsed status\n vm.collapsed = false;\n\n // Add expanding class to the node\n vm.element.addClass('expanding');\n\n // Animate the height\n $animate.animate(expandEl,\n {\n 'display': 'block',\n 'height': '0px'\n },\n {\n 'height': height + 'px'\n },\n vm.animateHeightClass\n ).then(\n function () {\n // Clear the inline styles after animation done\n expandEl.css({\n 'height': ''\n });\n\n // Clear expanding class from the node\n vm.element.removeClass('expanding');\n }\n );\n\n // If item expanded, broadcast the collapse event from rootScope so that the other expanded items\n // can be collapsed. This is necessary for keeping only one parent expanded at any time\n $rootScope.$broadcast('msNavigation::collapse', vm.node._path);\n });\n }\n\n /**\n * Return the class\n *\n * @returns {*}\n */\n function getClass() {\n return vm.node.class;\n }\n\n /**\n * Check if node should be hidden\n *\n * @returns {boolean}\n */\n function isHidden() {\n if (angular.isDefined(vm.node.hidden) && angular.isFunction(vm.node.hidden)) {\n if(vm.node.group) return false;\n /*if(vm.node.children && vm.node.children.length > 0){\n vm.node.children.forEach(function(n){\n n.hidden(n.title);\n });\n }*/\n return vm.node.hidden(vm.node);\n }\n\n return false;\n }\n }\n\n /** @ngInject */\n function msNavigationNodeDirective() {\n return {\n restrict: 'A',\n bindToController: {\n node: '=msNavigationNode'\n },\n controller: 'MsNavigationNodeController as vm',\n compile: function (tElement) {\n tElement.addClass('ms-navigation-node');\n\n return function postLink(scope, iElement, iAttrs, MsNavigationNodeCtrl) {\n // Add custom classes\n iElement.addClass(MsNavigationNodeCtrl.getClass());\n\n // Add group class if it's a group\n if (MsNavigationNodeCtrl.group) {\n iElement.addClass('group');\n }\n };\n }\n };\n }\n\n /** @ngInject */\n function msNavigationItemDirective() {\n return {\n restrict: 'A',\n require: '^msNavigationNode',\n compile: function (tElement) {\n tElement.addClass('ms-navigation-item');\n\n return function postLink(scope, iElement, iAttrs, MsNavigationNodeCtrl) {\n // If the item is collapsable...\n if (MsNavigationNodeCtrl.collapsable) {\n iElement.on('click', MsNavigationNodeCtrl.toggleCollapsed);\n }\n\n // Cleanup\n scope.$on('$destroy', function () {\n iElement.off('click');\n });\n };\n }\n };\n }\n\n /** @ngInject */\n function msNavigationHorizontalDirective(msNavigationService) {\n return {\n restrict: 'E',\n scope: {\n root: '@'\n },\n controller: 'MsNavigationController as vm',\n templateUrl: 'app/core/directives/ms-navigation/templates/horizontal.html',\n transclude: true,\n compile: function (tElement) {\n tElement.addClass('ms-navigation-horizontal');\n\n return function postLink(scope) {\n // Store the navigation in the service for public access\n msNavigationService.setNavigationScope(scope);\n };\n }\n };\n }\n\n /** @ngInject */\n function MsNavigationHorizontalNodeController($scope, $element, $rootScope, $state, msNavigationService) {\n var vm = this;\n\n // Data\n vm.element = $element;\n vm.node = $scope.node;\n vm.hasChildren = undefined;\n vm.group = undefined;\n\n // Methods\n vm.getClass = getClass;\n vm.isHidden = isHidden;\n\n //////////\n\n init();\n\n /**\n * Initialize\n */\n function init() {\n // Setup the initial values\n \n // Is active\n vm.isActive = false;\n\n // Has children?\n vm.hasChildren = vm.node.children.length > 0;\n\n // Is group?\n vm.group = !!(angular.isDefined(vm.node.group) && vm.node.group === true);\n\n // Mark all parents as active if we have a matching state\n // or the current state is a child of the node's state\n if (vm.node.state === $state.current.name || $state.includes(vm.node.state)) {\n // If state params are defined, make sure they are\n // equal, otherwise do not set the active item\n if (angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params)) {\n return;\n }\n\n $scope.$emit('msNavigation::stateMatched');\n\n // Also store the current active menu item\n msNavigationService.setActiveItem(vm.node, $scope);\n }\n\n $scope.$on('msNavigation::stateMatched', function () {\n // Mark as active if has children\n if (vm.hasChildren) {\n $scope.$evalAsync(function () {\n vm.isActive = true;\n });\n }\n });\n\n // Listen for clearActive event\n $scope.$on('msNavigation::clearActive', function () {\n if (!vm.hasChildren) {\n return;\n }\n\n var activePathParts = [];\n\n var activeItem = msNavigationService.getActiveItem();\n if (activeItem) {\n activePathParts = activeItem.node._path.split('.');\n }\n\n // Test for active path\n if (activePathParts.indexOf(vm.node._id) > -1) {\n $scope.$evalAsync(function () {\n vm.isActive = true;\n });\n }\n else {\n $scope.$evalAsync(function () {\n vm.isActive = false;\n });\n }\n\n });\n\n // Listen for $stateChangeSuccess event\n $scope.$on('$stateChangeSuccess', function () {\n if (vm.node.state === $state.current.name) {\n // If state params are defined, make sure they are\n // equal, otherwise do not set the active item\n if (angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params)) {\n return;\n }\n\n // Update active item on state change\n msNavigationService.setActiveItem(vm.node, $scope);\n\n // Clear all active states everything except the one we're using\n $rootScope.$broadcast('msNavigation::clearActive');\n }\n });\n }\n\n /**\n * Return the class\n *\n * @returns {*}\n */\n function getClass() {\n return vm.node.class;\n }\n\n /**\n * Check if node should be hidden\n *\n * @returns {boolean}\n */\n function isHidden() {\n if (angular.isDefined(vm.node.hidden) && angular.isFunction(vm.node.hidden)) {\n return vm.node.hidden($scope, $state);\n }\n\n return false;\n }\n }\n\n /** @ngInject */\n function msNavigationHorizontalNodeDirective() {\n return {\n restrict: 'A',\n bindToController: {\n node: '=msNavigationHorizontalNode'\n },\n controller: 'MsNavigationHorizontalNodeController as vm',\n compile: function (tElement) {\n tElement.addClass('ms-navigation-horizontal-node');\n\n return function postLink(scope, iElement, iAttrs, MsNavigationHorizontalNodeCtrl) {\n // Add custom classes\n iElement.addClass(MsNavigationHorizontalNodeCtrl.getClass());\n\n // Add group class if it's a group\n if (MsNavigationHorizontalNodeCtrl.group) {\n iElement.addClass('group');\n }\n };\n }\n };\n }\n\n /** @ngInject */\n function msNavigationHorizontalItemDirective($mdMedia) {\n return {\n restrict: 'A',\n require: '^msNavigationHorizontalNode',\n compile: function (tElement) {\n tElement.addClass('ms-navigation-horizontal-item');\n\n return function postLink(scope, iElement, iAttrs, MsNavigationHorizontalNodeCtrl) {\n iElement.on('click', onClick);\n\n function onClick() {\n if (!MsNavigationHorizontalNodeCtrl.hasChildren || $mdMedia('gt-md')) {\n return;\n }\n\n iElement.toggleClass('expanded');\n }\n\n // Cleanup\n scope.$on('$destroy', function () {\n iElement.off('click');\n });\n };\n }\n };\n }\n\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.core')\n .provider('msNavigationVerticalService', msNavigationVerticalService)\n .controller('MsNavigationControllerVertical', MsNavigationControllerVertical)\n // Vertical\n .directive('msNavigationVertical', msNavigationDirectiveVertical)\n .controller('MsNavigationNodeControllerVertical', MsNavigationNodeControllerVertical)\n .directive('msNavigationNodeDirectiveVertical', msNavigationNodeDirectiveVertical)\n .directive('msNavigationItemDirectiveVertical', msNavigationItemDirectiveVertical)\n\n /** @ngInject */\n function msNavigationVerticalService() {\n // Inject $log service\n var $log = angular.injector(['ng']).get('$log');\n\n // Navigation array\n var navigation = [];\n\n var service = this;\n\n // Methods\n service.saveItem = saveItem;\n service.deleteItem = deleteItem;\n service.sortByWeight = sortByWeight;\n\n //////////\n\n /**\n * Create or update the navigation item\n *\n * @param path\n * @param item\n */\n function saveItem(path, item) {\n if (!angular.isString(path)) {\n $log.error('path must be a string (eg. `dashboard.project`)');\n return;\n }\n\n var parts = path.split('.');\n\n // Generate the object id from the parts\n var id = parts[parts.length - 1];\n\n // Get the parent item from the parts\n var parent = _findOrCreateParent(parts);\n\n // Decide if we are going to update or create\n var updateItem = false;\n\n for (var i = 0; i < parent.length; i++) {\n if (parent[i]._id === id) {\n updateItem = parent[i];\n\n break;\n }\n }\n\n // Update\n if (updateItem) {\n angular.extend(updateItem, item);\n\n // Add proper ui-sref\n updateItem.uisref = _getUiSref(updateItem);\n }\n // Create\n else {\n // Create an empty children array in the item\n item.children = [];\n\n // Add the default weight if not provided or if it's not a number\n if (angular.isUndefined(item.weight) || !angular.isNumber(item.weight)) {\n item.weight = 1;\n }\n\n item.click = function(){\n console.log(\"bastı\");\n }\n\n // Add the item id\n item._id = id;\n\n // Add the item path\n item._path = path;\n\n // Add proper ui-sref\n item.uisref = _getUiSref(item);\n\n // Push the item into the array\n parent.push(item);\n }\n }\n\n /**\n * Delete navigation item\n *\n * @param path\n */\n function deleteItem(path) {\n if (!angular.isString(path)) {\n $log.error('path must be a string (eg. `dashboard.project`)');\n return;\n }\n\n // Locate the item by using given path\n var item = navigation,\n parts = path.split('.');\n\n for (var p = 0; p < parts.length; p++) {\n var id = parts[p];\n\n for (var i = 0; i < item.length; i++) {\n if (item[i]._id === id) {\n // If we have a matching path,\n // we have found our object:\n // remove it.\n if (item[i]._path === path) {\n item.splice(i, 1);\n return true;\n }\n\n // Otherwise grab the children of\n // the current item and continue\n item = item[i].children;\n break;\n }\n }\n }\n\n return false;\n }\n\n /**\n * Sort the navigation items by their weights\n *\n * @param parent\n */\n function sortByWeight(parent) {\n // If parent not provided, sort the root items\n if (!parent) {\n parent = navigation;\n parent.sort(_byWeight);\n }\n\n // Sort the children\n for (var i = 0; i < parent.length; i++) {\n var children = parent[i].children;\n\n if (children.length > 1) {\n children.sort(_byWeight);\n }\n\n if (children.length > 0) {\n sortByWeight(children);\n }\n }\n }\n\n /* ----------------- */\n /* Private Functions */\n /* ----------------- */\n\n /**\n * Find or create parent\n *\n * @param parts\n * @returns {Array|Boolean}\n * @private\n */\n function _findOrCreateParent(parts) {\n // Store the main navigation\n var parent = navigation;\n\n // If it's going to be a root item\n // return the navigation itself\n if (parts.length === 1) {\n return parent;\n }\n\n // Remove the last element from the parts as\n // we don't need that to figure out the parent\n parts.pop();\n\n // Find and return the parent\n for (var i = 0; i < parts.length; i++) {\n var _id = parts[i],\n createParent = true;\n\n for (var p = 0; p < parent.length; p++) {\n if (parent[p]._id === _id) {\n parent = parent[p].children;\n createParent = false;\n\n break;\n }\n }\n\n // If there is no parent found, create one, push\n // it into the current parent and assign it as a\n // new parent\n if (createParent) {\n var item = {\n _id: _id,\n _path: parts.join('.'),\n title: _id,\n weight: 1,\n children: []\n };\n\n parent.push(item);\n parent = item.children;\n }\n }\n\n return parent;\n }\n\n /**\n * Sort by weight\n *\n * @param x\n * @param y\n * @returns {number}\n * @private\n */\n function _byWeight(x, y) {\n return parseInt(x.weight) - parseInt(y.weight);\n }\n\n /**\n * Setup the ui-sref using state & state parameters\n *\n * @param item\n * @returns {string}\n * @private\n */\n function _getUiSref(item) {\n var uisref = '';\n\n if (angular.isDefined(item.state)) {\n uisref = item.state;\n\n if (angular.isDefined(item.stateParams) && angular.isObject(item.stateParams)) {\n uisref = uisref + '(' + angular.toJson(item.stateParams) + ')';\n }\n }\n\n return uisref;\n }\n\n /* ----------------- */\n /* Service */\n /* ----------------- */\n\n this.$get = function () {\n var activeItem = null,\n navigationScope = null,\n folded = null,\n foldedOpen = null;\n\n var service = {\n saveItem: saveItem,\n deleteItem: deleteItem,\n sort: sortByWeight,\n clearNavigation: clearNavigation,\n setActiveItem: setActiveItem,\n getActiveItem: getActiveItem,\n getNavigationObject: getNavigationObject,\n setNavigationScope: setNavigationScope,\n setFolded: setFolded,\n getFolded: getFolded,\n setFoldedOpen: setFoldedOpen,\n getFoldedOpen: getFoldedOpen,\n toggleFolded: toggleFolded\n };\n\n return service;\n\n //////////\n\n /**\n * Clear the entire navigation\n */\n function clearNavigation() {\n // Clear the navigation array\n navigation = [];\n\n // Clear the vm.navigation from main controller\n if (navigationScope) {\n navigationScope.vm.navigation = [];\n }\n }\n\n /**\n * Set active item\n *\n * @param node\n * @param scope\n */\n function setActiveItem(node, scope) {\n activeItem = {\n node: node,\n scope: scope\n };\n }\n\n /**\n * Return active item\n */\n function getActiveItem() {\n return activeItem;\n }\n\n /**\n * Return navigation object\n *\n * @param root\n * @returns {Array}\n */\n function getNavigationObject(root) {\n if (root) {\n for (var i = 0; i < navigation.length; i++) {\n if (navigation[i]._id === root) {\n return [navigation[i]];\n }\n }\n }\n\n return navigation;\n }\n\n /**\n * Store navigation's scope for later use\n *\n * @param scope\n */\n function setNavigationScope(scope) {\n navigationScope = scope;\n }\n\n /**\n * Set folded status\n *\n * @param status\n */\n function setFolded(status) {\n folded = status;\n }\n\n /**\n * Return folded status\n *\n * @returns {*}\n */\n function getFolded() {\n return folded;\n }\n\n /**\n * Set folded open status\n *\n * @param status\n */\n function setFoldedOpen(status) {\n foldedOpen = status;\n }\n\n /**\n * Return folded open status\n *\n * @returns {*}\n */\n function getFoldedOpen() {\n return foldedOpen;\n }\n\n\n /**\n * Toggle fold on stored navigation's scope\n */\n function toggleFolded() {\n navigationScope.toggleFolded();\n }\n };\n }\n\n /** @ngInject */\n function MsNavigationControllerVertical($scope, msNavigationVerticalService) {\n var vm = this;\n\n // Data\n if ($scope.root) {\n vm.navigation = msNavigationVerticalService.getNavigationObject($scope.root);\n }\n else {\n vm.navigation = msNavigationVerticalService.getNavigationObject();\n }\n\n // Methods\n vm.toggleHorizontalMobileMenu = toggleHorizontalMobileMenu;\n\n //////////\n\n init();\n\n /**\n * Initialize\n */\n function init() {\n // Sort the navigation before doing anything else\n msNavigationVerticalService.sort();\n }\n\n /**\n * Toggle horizontal mobile menu\n */\n function toggleHorizontalMobileMenu() {\n angular.element('body').toggleClass('ms-navigation-horizontal-mobile-menu-active');\n }\n }\n\n /** @ngInject */\n function msNavigationDirectiveVertical($rootScope, $timeout, $mdSidenav, msNavigationVerticalService) {\n return {\n restrict: 'E',\n scope: {\n folded: '=',\n root: '@'\n },\n controller: 'MsNavigationControllerVertical as vm',\n templateUrl: 'app/core/directives/ms-navigation/templates/vertical.html',\n transclude: true,\n compile: function (tElement) {\n tElement.addClass('ms-navigation');\n\n return function postLink(scope, iElement) {\n var bodyEl = angular.element('body'),\n foldExpanderEl = angular.element('
'),\n foldCollapserEl = angular.element('
'),\n sidenav = $mdSidenav('navigationvertical');\n\n // Store the navigation in the service for public access\n msNavigationVerticalService.setNavigationScope(scope);\n\n // Initialize\n init();\n\n /**\n * Initialize\n */\n function init() {\n // Set the folded status for the first time.\n // First, we have to check if we have a folded\n // status available in the service already. This\n // will prevent navigation to act weird if we already\n // set the fold status, remove the navigation and\n // then re-initialize it, which happens if we\n // change to a view without a navigation and then\n // come back with history.back() function.\n\n // If the service didn't initialize before, set\n // the folded status from scope, otherwise we\n // won't touch anything because the folded status\n // already set in the service...\n if (msNavigationVerticalService.getFolded() === null) {\n msNavigationVerticalService.setFolded(scope.folded);\n }\n\n if (msNavigationVerticalService.getFolded()) {\n // Collapse everything.\n // This must be inside a $timeout because by the\n // time we call this, the 'msNavigation::collapse'\n // event listener is not registered yet. $timeout\n // will ensure that it will be called after it is\n // registered.\n $timeout(function () {\n $rootScope.$broadcast('msNavigationVertical::collapse');\n });\n\n // Add class to the body\n bodyEl.addClass('ms-navigation-folded');\n\n // Set fold expander\n setFoldExpander();\n }\n }\n\n // Sidenav locked open status watcher\n scope.$watch(function () {\n return sidenav.isLockedOpen();\n }, function (current, old) {\n if (angular.isUndefined(current) || angular.equals(current, old)) {\n return;\n }\n\n var folded = msNavigationVerticalService.getFolded();\n\n if (folded) {\n if (current) {\n // Collapse everything\n $rootScope.$broadcast('msNavigationVertical::collapse');\n }\n else {\n // Expand the active one and its parents\n var activeItem = msNavigationVerticalService.getActiveItem();\n if (activeItem) {\n activeItem.scope.$emit('msNavigationVertical::stateMatched');\n }\n }\n }\n });\n\n // Folded status watcher\n scope.$watch('folded', function (current, old) {\n if (angular.isUndefined(current) || angular.equals(current, old)) {\n return;\n }\n\n setFolded(current);\n });\n\n /**\n * Set folded status\n *\n * @param folded\n */\n function setFolded(folded) {\n // Store folded status on the service for global access\n msNavigationVerticalService.setFolded(folded);\n\n if (folded) {\n // Collapse everything\n $rootScope.$broadcast('msNavigationVertical::collapse');\n\n // Add class to the body\n bodyEl.addClass('ms-navigation-folded');\n\n // Set fold expander\n setFoldExpander();\n }\n else {\n // Expand the active one and its parents\n var activeItem = msNavigationVerticalService.getActiveItem();\n if (activeItem) {\n activeItem.scope.$emit('msNavigationVertical::stateMatched');\n }\n\n // Remove body class\n bodyEl.removeClass('ms-navigation-folded ms-navigation-folded-open');\n\n // Remove fold collapser\n removeFoldCollapser();\n }\n }\n\n /**\n * Set fold expander\n */\n function setFoldExpander() {\n iElement.parent().append(foldExpanderEl);\n\n // Let everything settle for a moment\n // before registering the event listener\n $timeout(function () {\n foldExpanderEl.on('mouseenter touchstart', onFoldExpanderHover);\n });\n }\n\n /**\n * Set fold collapser\n */\n function setFoldCollapser() {\n bodyEl.find('#main').append(foldCollapserEl);\n foldCollapserEl.on('mouseenter touchstart', onFoldCollapserHover);\n }\n\n /**\n * Remove fold collapser\n */\n function removeFoldCollapser() {\n foldCollapserEl.remove();\n }\n\n /**\n * onHover event of foldExpander\n */\n function onFoldExpanderHover(event) {\n if (event) {\n event.preventDefault();\n }\n\n // Set folded open status\n msNavigationVerticalService.setFoldedOpen(true);\n\n // Expand the active one and its parents\n var activeItem = msNavigationVerticalService.getActiveItem();\n if (activeItem) {\n activeItem.scope.$emit('msNavigationVertical::stateMatched');\n }\n\n // Add class to the body\n bodyEl.addClass('ms-navigation-folded-open');\n\n // Remove the fold opener\n foldExpanderEl.remove();\n\n // Set fold collapser\n setFoldCollapser();\n }\n\n /**\n * onHover event of foldCollapser\n */\n function onFoldCollapserHover(event) {\n if (event) {\n event.preventDefault();\n }\n\n // Set folded open status\n msNavigationVerticalService.setFoldedOpen(false);\n\n // Collapse everything\n $rootScope.$broadcast('msNavigationVertical::collapse');\n\n // Remove body class\n bodyEl.removeClass('ms-navigation-folded-open');\n\n // Remove the fold collapser\n foldCollapserEl.remove();\n\n // Set fold expander\n setFoldExpander();\n }\n\n /**\n * Public access for toggling folded status externally\n */\n scope.toggleFolded = function () {\n var folded = msNavigationVerticalService.getFolded();\n\n setFolded(!folded);\n };\n\n /**\n * On $stateChangeStart\n */\n scope.$on('$stateChangeStart', function () {\n // Close the sidenav\n sidenav.close();\n\n // If navigation is folded open, close it\n if (msNavigationVerticalService.getFolded()) {\n onFoldCollapserHover();\n }\n });\n\n // Cleanup\n scope.$on('$destroy', function () {\n foldCollapserEl.off('mouseenter touchstart');\n foldExpanderEl.off('mouseenter touchstart');\n });\n };\n }\n };\n }\n\n /** @ngInject */\n function MsNavigationNodeControllerVertical($scope, $element, $rootScope, $animate, $state, msNavigationVerticalService) {\n var vm = this;\n\n // Data\n vm.element = $element;\n vm.node = $scope.node;\n vm.hasChildren = undefined;\n vm.collapsed = undefined;\n vm.collapsable = undefined;\n vm.group = undefined;\n vm.animateHeightClass = 'animate-height';\n vm.moreAndMoreCount = 10;\n // Methods\n vm.toggleCollapsed = toggleCollapsed;\n vm.collapse = collapse;\n vm.expand = expand;\n vm.getClass = getClass;\n vm.isHidden = isHidden;\n vm.click = click;\n vm.moreAndMore = moreAndMore;\n\n //////////\n\n init();\n\n function moreAndMore() {\n vm.moreAndMoreCount += 10;\n }\n\n /**\n * Initialize\n */\n function init() {\n // Setup the initial values\n\n // Has children?\n vm.hasChildren = vm.node.children.length > 0;\n\n // Is group?\n vm.group = !!(angular.isDefined(vm.node.group) && vm.node.group === true);\n\n // Is collapsable?\n if (!vm.hasChildren || vm.group) {\n vm.collapsable = false;\n }\n else {\n vm.collapsable = !!(angular.isUndefined(vm.node.collapsable) || typeof vm.node.collapsable !== 'boolean' || vm.node.collapsable === true);\n }\n\n // Is collapsed?\n if (!vm.collapsable) {\n vm.collapsed = false;\n }\n else {\n vm.collapsed = !!(angular.isUndefined(vm.node.collapsed) || typeof vm.node.collapsed !== 'boolean' || vm.node.collapsed === true);\n }\n\n // Expand all parents if we have a matching state or\n // the current state is a child of the node's state\n if (vm.node.state === $state.current.name || $state.includes(vm.node.state)) {\n // If state params are defined, make sure they are\n // equal, otherwise do not set the active item\n if (angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params)) {\n return;\n }\n\n $scope.$emit('msNavigationVerticalService::stateMatched');\n\n // Also store the current active menu item\n msNavigationVerticalService.setActiveItem(vm.node, $scope);\n }\n\n $scope.$on('msNavigationVertical::stateMatched', function () {\n // Expand if the current scope is collapsable and is collapsed\n if (vm.collapsable && vm.collapsed) {\n $scope.$evalAsync(function () {\n vm.collapsed = false;\n });\n }\n });\n\n // Listen for collapse event\n $scope.$on('msNavigationVertical::collapse', function (event, path) {\n if (vm.collapsed || !vm.collapsable) {\n return;\n }\n\n // If there is no path defined, collapse\n if (angular.isUndefined(path)) {\n vm.collapse();\n }\n // If there is a path defined, do not collapse\n // the items that are inside that path. This will\n // prevent parent items from collapsing\n else {\n var givenPathParts = path.split('.'),\n activePathParts = [];\n\n var activeItem = msNavigationVerticalService.getActiveItem();\n if (activeItem) {\n activePathParts = activeItem.node._path.split('.');\n }\n\n // Test for given path\n if (givenPathParts.indexOf(vm.node._id) > -1) {\n return;\n }\n\n // Test for active path\n if (activePathParts.indexOf(vm.node._id) > -1) {\n return;\n }\n\n vm.collapse();\n }\n });\n\n // Listen for $stateChangeSuccess event\n $scope.$on('$stateChangeSuccess', function () {\n if (vm.node.state === $state.current.name) {\n // If state params are defined, make sure they are\n // equal, otherwise do not set the active item\n if (angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params)) {\n return;\n }\n\n // Update active item on state change\n msNavigationVerticalService.setActiveItem(vm.node, $scope);\n\n // Collapse everything except the one we're using\n $rootScope.$broadcast('msNavigationVertical::collapse', vm.node._path);\n }\n });\n }\n\n /**\n * Toggle collapsed\n */\n function toggleCollapsed() {\n if (vm.collapsed) {\n vm.expand();\n }\n else {\n vm.collapse();\n }\n }\n\n /**\n * Collapse\n */\n function collapse() {\n // Grab the element that we are going to collapse\n var collapseEl = vm.element.children('ul');\n\n // Grab the height\n var height = collapseEl[0].offsetHeight;\n\n $scope.$evalAsync(function () {\n // Set collapsed status\n vm.collapsed = true;\n\n // Add collapsing class to the node\n vm.element.addClass('collapsing');\n\n // Animate the height\n $animate.animate(collapseEl,\n {\n 'display': 'block',\n 'height': height + 'px'\n },\n {\n 'height': '0px'\n },\n vm.animateHeightClass\n ).then(\n function () {\n // Clear the inline styles after animation done\n collapseEl.css({\n 'display': '',\n 'height': ''\n });\n\n // Clear collapsing class from the node\n vm.element.removeClass('collapsing');\n }\n );\n\n // Broadcast the collapse event so child items can also be collapsed\n $scope.$broadcast('msNavigation::collapse');\n });\n }\n\n /**\n * Expand\n */\n function expand() {\n // Grab the element that we are going to expand\n var expandEl = vm.element.children('ul');\n\n // Move the element out of the dom flow and\n // make it block so we can get its height\n expandEl.css({\n 'position': 'absolute',\n 'visibility': 'hidden',\n 'display': 'block',\n 'height': 'auto'\n });\n\n // Grab the height\n var height = expandEl[0].offsetHeight;\n\n // Reset the style modifications\n expandEl.css({\n 'position': '',\n 'visibility': '',\n 'display': '',\n 'height': ''\n });\n\n $scope.$evalAsync(function () {\n // Set collapsed status\n vm.collapsed = false;\n\n // Add expanding class to the node\n vm.element.addClass('expanding');\n\n // Animate the height\n $animate.animate(expandEl,\n {\n 'display': 'block',\n 'height': '0px'\n },\n {\n 'height': height + 'px'\n },\n vm.animateHeightClass\n ).then(\n function () {\n // Clear the inline styles after animation done\n expandEl.css({\n 'height': ''\n });\n\n // Clear expanding class from the node\n vm.element.removeClass('expanding');\n }\n );\n\n // If item expanded, broadcast the collapse event from rootScope so that the other expanded items\n // can be collapsed. This is necessary for keeping only one parent expanded at any time\n $rootScope.$broadcast('msNavigation::collapse', vm.node._path);\n });\n }\n\n /**\n * Return the class\n *\n * @returns {*}\n */\n function getClass() {\n return vm.node.class;\n }\n\n /**\n * Check if node should be hidden\n *\n * @returns {boolean}\n */\n function isHidden() {\n if (angular.isDefined(vm.node.hidden) && angular.isFunction(vm.node.hidden)) {\n return vm.node.hidden(vm.node);\n }\n\n return false;\n }\n\n function click(){\n if (angular.isDefined(vm.node.hidden) && angular.isFunction(vm.node.hidden)) {\n vm.node.click();\n }\n }\n }\n\n /** @ngInject */\n function msNavigationNodeDirectiveVertical() {\n return {\n restrict: 'A',\n bindToController: {\n node: '=msNavigationNodeDirectiveVertical'\n },\n controller: 'MsNavigationNodeControllerVertical as vm',\n compile: function (tElement) {\n tElement.addClass('ms-navigation-node-vertical');\n\n return function postLink(scope, iElement, iAttrs, msNavigationNodeDirectiveVertical) {\n // Add custom classes\n iElement.addClass(msNavigationNodeDirectiveVertical.getClass());\n\n // Add group class if it's a group\n if (msNavigationNodeDirectiveVertical.group) {\n iElement.addClass('group');\n }\n };\n }\n };\n }\n\n /** @ngInject */\n function msNavigationItemDirectiveVertical() {\n return {\n restrict: 'A',\n require: '^msNavigationNodeDirectiveVertical',\n compile: function (tElement) {\n tElement.addClass('ms-navigation-item-vertical');\n\n return function postLink(scope, iElement, iAttrs, msNavigationNodeDirectiveVertical) {\n // If the item is collapsable...\n if (msNavigationNodeDirectiveVertical.collapsable) {\n iElement.on('click', function(){\n msNavigationNodeDirectiveVertical.toggleCollapsed();\n console.log(\"bastı iç\");\n });\n }\n\n // Cleanup\n scope.$on('$destroy', function () {\n iElement.off('click');\n });\n };\n }\n };\n }\n\n\n\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.core')\n .provider('msNavigationSidebarService', msNavigationSidebarServiceProvider)\n .controller('MsNavigationSidebarController', MsNavigationSidebarController)\n // Vertical\n .directive('msNavigationSidebar', msNavigationSidebarDirective)\n .controller('MsNavigationSidebarNodeController', MsNavigationSidebarNodeController)\n .directive('msNavigationSidebarNode', msNavigationSidebarNodeDirective)\n .directive('msNavigationSidebarItem', msNavigationSidebarItemDirective);\n\n /** @ngInject */\n function msNavigationSidebarServiceProvider() {\n // Inject $log service\n var $log = angular.injector(['ng']).get('$log');\n\n // Navigation array\n var navigation = [];\n\n var service = this;\n\n // Methods\n service.saveItem = saveItem;\n service.deleteItem = deleteItem;\n service.sortByWeight = sortByWeight;\n\n //////////\n\n /**\n * Create or update the navigation item\n *\n * @param path\n * @param item\n */\n function saveItem(path, item) {\n if (!angular.isString(path)) {\n $log.error('path must be a string (eg. `dashboard.project`)');\n return;\n }\n\n var parts = path.split('.');\n\n // Generate the object id from the parts\n var id = parts[parts.length - 1];\n\n // Get the parent item from the parts\n var parent = _findOrCreateParent(parts);\n\n // Decide if we are going to update or create\n var updateItem = false;\n\n for (var i = 0; i < parent.length; i++) {\n if (parent[i]._id === id) {\n updateItem = parent[i];\n\n break;\n }\n }\n\n // Update\n if (updateItem) {\n angular.extend(updateItem, item);\n\n // Add proper ui-sref\n updateItem.uisref = _getUiSref(updateItem);\n }\n // Create\n else {\n // Create an empty children array in the item\n item.children = [];\n\n // Add the default weight if not provided or if it's not a number\n if (angular.isUndefined(item.weight) || !angular.isNumber(item.weight)) {\n item.weight = 1;\n }\n\n // Add the item id\n item._id = id;\n\n // Add the item path\n item._path = path;\n\n // Add proper ui-sref\n item.uisref = _getUiSref(item);\n\n // Push the item into the array\n parent.push(item);\n }\n }\n\n /**\n * Delete navigation item\n *\n * @param path\n */\n function deleteItem(path) {\n if (!angular.isString(path)) {\n $log.error('path must be a string (eg. `dashboard.project`)');\n return;\n }\n\n // Locate the item by using given path\n var item = navigation,\n parts = path.split('.');\n\n for (var p = 0; p < parts.length; p++) {\n var id = parts[p];\n\n for (var i = 0; i < item.length; i++) {\n if (item[i]._id === id) {\n // If we have a matching path,\n // we have found our object:\n // remove it.\n if (item[i]._path === path) {\n item.splice(i, 1);\n return true;\n }\n\n // Otherwise grab the children of\n // the current item and continue\n item = item[i].children;\n break;\n }\n }\n }\n\n return false;\n }\n\n /**\n * Sort the navigation items by their weights\n *\n * @param parent\n */\n function sortByWeight(parent) {\n // If parent not provided, sort the root items\n if (!parent) {\n parent = navigation;\n parent.sort(_byWeight);\n }\n\n // Sort the children\n for (var i = 0; i < parent.length; i++) {\n var children = parent[i].children;\n\n if (children.length > 1) {\n children.sort(_byWeight);\n }\n\n if (children.length > 0) {\n sortByWeight(children);\n }\n }\n }\n\n /* ----------------- */\n /* Private Functions */\n /* ----------------- */\n\n /**\n * Find or create parent\n *\n * @param parts\n * @returns {Array|Boolean}\n * @private\n */\n function _findOrCreateParent(parts) {\n // Store the main navigation\n var parent = navigation;\n\n // If it's going to be a root item\n // return the navigation itself\n if (parts.length === 1) {\n return parent;\n }\n\n // Remove the last element from the parts as\n // we don't need that to figure out the parent\n parts.pop();\n\n // Find and return the parent\n for (var i = 0; i < parts.length; i++) {\n var _id = parts[i],\n createParent = true;\n\n for (var p = 0; p < parent.length; p++) {\n if (parent[p]._id === _id) {\n parent = parent[p].children;\n createParent = false;\n\n break;\n }\n }\n\n // If there is no parent found, create one, push\n // it into the current parent and assign it as a\n // new parent\n if (createParent) {\n var item = {\n _id: _id,\n _path: parts.join('.'),\n title: _id,\n weight: 1,\n children: []\n };\n\n parent.push(item);\n parent = item.children;\n }\n }\n\n return parent;\n }\n\n /**\n * Sort by weight\n *\n * @param x\n * @param y\n * @returns {number}\n * @private\n */\n function _byWeight(x, y) {\n return parseInt(x.weight) - parseInt(y.weight);\n }\n\n /**\n * Setup the ui-sref using state & state parameters\n *\n * @param item\n * @returns {string}\n * @private\n */\n function _getUiSref(item) {\n var uisref = '';\n\n if (angular.isDefined(item.state)) {\n uisref = item.state;\n\n if (angular.isDefined(item.stateParams) && angular.isObject(item.stateParams)) {\n uisref = uisref + '(' + angular.toJson(item.stateParams) + ')';\n }\n }\n\n return uisref;\n }\n\n /* ----------------- */\n /* Service */\n /* ----------------- */\n\n this.$get = function () {\n var activeItem = null,\n navigationScope = null,\n folded = null,\n foldedOpen = null;\n\n var service = {\n saveItem: saveItem,\n deleteItem: deleteItem,\n sort: sortByWeight,\n clearNavigation: clearNavigation,\n clearNavigationItems:clearNavigationItems,\n setActiveItem: setActiveItem,\n getActiveItem: getActiveItem,\n getNavigationObject: getNavigationObject,\n setNavigationScope: setNavigationScope,\n setFolded: setFolded,\n getFolded: getFolded,\n setFoldedOpen: setFoldedOpen,\n getFoldedOpen: getFoldedOpen,\n toggleFolded: toggleFolded\n };\n\n return service;\n\n //////////\n\n /**\n * Clear the entire navigation\n */\n function clearNavigation() {\n // Clear the navigation array\n navigation = [];\n\n // Clear the vm.navigation from main controller\n if (navigationScope) {\n navigationScope.vm.navigation = [];\n }\n }\n\n /**\n * Clear the navigation items\n */\n function clearNavigationItems() {\n // Clear the navigation array\n navigation = [];\n }\n\n /**\n * Set active item\n *\n * @param node\n * @param scope\n */\n function setActiveItem(node, scope) {\n activeItem = {\n node: node,\n scope: scope\n };\n }\n\n /**\n * Return active item\n */\n function getActiveItem() {\n return activeItem;\n }\n\n /**\n * Return navigation object\n *\n * @param root\n * @returns {Array}\n */\n function getNavigationObject(root) {\n if (root) {\n for (var i = 0; i < navigation.length; i++) {\n if (navigation[i]._id === root) {\n return [navigation[i]];\n }\n }\n }\n\n return navigation;\n }\n\n /**\n * Store navigation's scope for later use\n *\n * @param scope\n */\n function setNavigationScope(scope) {\n navigationScope = scope;\n }\n\n /**\n * Set folded status\n *\n * @param status\n */\n function setFolded(status) {\n folded = status;\n }\n\n /**\n * Return folded status\n *\n * @returns {*}\n */\n function getFolded() {\n return folded;\n }\n\n /**\n * Set folded open status\n *\n * @param status\n */\n function setFoldedOpen(status) {\n foldedOpen = status;\n }\n\n /**\n * Return folded open status\n *\n * @returns {*}\n */\n function getFoldedOpen() {\n return foldedOpen;\n }\n\n\n /**\n * Toggle fold on stored navigation's scope\n */\n function toggleFolded() {\n navigationScope.toggleFolded();\n }\n };\n }\n\n /** @ngInject */\n function MsNavigationSidebarController($scope, msNavigationSidebarService) {\n var vm = this;\n\n // Data\n if ($scope.root) {\n vm.navigation = msNavigationSidebarService.getNavigationObject($scope.root);\n }\n else {\n vm.navigation = msNavigationSidebarService.getNavigationObject();\n }\n\n // Methods\n vm.toggleHorizontalMobileMenu = toggleHorizontalMobileMenu;\n\n //////////\n\n init();\n\n /**\n * Initialize\n */\n function init() {\n // Sort the navigation before doing anything else\n msNavigationSidebarService.sort();\n }\n\n /**\n * Toggle horizontal mobile menu\n */\n function toggleHorizontalMobileMenu() {\n angular.element('body').toggleClass('ms-navigation-horizontal-mobile-menu-active');\n }\n }\n\n /** @ngInject */\n function msNavigationSidebarDirective($rootScope, $timeout, $mdSidenav, msNavigationSidebarService) {\n return {\n restrict: 'E',\n scope: {\n folded: '=',\n root: '@'\n },\n controller: 'MsNavigationSidebarController as vm',\n templateUrl: 'app/core/directives/ms-navigation/templates/sidebar.html',\n transclude: true,\n compile: function (tElement) {\n tElement.addClass('ms-navigation');\n\n return function postLink(scope, iElement) {\n var bodyEl = angular.element('body'),\n foldExpanderEl = angular.element('
'),\n foldCollapserEl = angular.element('
'),\n sidenav = $mdSidenav('navigation');\n\n // Store the navigation in the service for public access\n msNavigationSidebarService.setNavigationScope(scope);\n\n // Initialize\n init();\n\n /**\n * Initialize\n */\n function init() {\n // Set the folded status for the first time.\n // First, we have to check if we have a folded\n // status available in the service already. This\n // will prevent navigation to act weird if we already\n // set the fold status, remove the navigation and\n // then re-initialize it, which happens if we\n // change to a view without a navigation and then\n // come back with history.back() function.\n\n // If the service didn't initialize before, set\n // the folded status from scope, otherwise we\n // won't touch anything because the folded status\n // already set in the service...\n if (msNavigationSidebarService.getFolded() === null) {\n msNavigationSidebarService.setFolded(scope.folded);\n }\n\n if (msNavigationSidebarService.getFolded()) {\n // Collapse everything.\n // This must be inside a $timeout because by the\n // time we call this, the 'msNavigation::collapse'\n // event listener is not registered yet. $timeout\n // will ensure that it will be called after it is\n // registered.\n $timeout(function () {\n $rootScope.$broadcast('msNavigation::collapse');\n });\n\n // Add class to the body\n bodyEl.addClass('ms-navigation-folded');\n\n // Set fold expander\n setFoldExpander();\n }\n }\n\n // Sidenav locked open status watcher\n scope.$watch(function () {\n return sidenav.isLockedOpen();\n }, function (current, old) {\n if (angular.isUndefined(current) || angular.equals(current, old)) {\n return;\n }\n\n var folded = msNavigationSidebarService.getFolded();\n\n if (folded) {\n if (current) {\n // Collapse everything\n $rootScope.$broadcast('msNavigation::collapse');\n }\n else {\n // Expand the active one and its parents\n var activeItem = msNavigationSidebarService.getActiveItem();\n if (activeItem) {\n activeItem.scope.$emit('msNavigation::stateMatched');\n }\n }\n }\n });\n\n // Folded status watcher\n scope.$watch('folded', function (current, old) {\n if (angular.isUndefined(current) || angular.equals(current, old)) {\n return;\n }\n\n setFolded(current);\n });\n\n /**\n * Set folded status\n *\n * @param folded\n */\n function setFolded(folded) {\n // Store folded status on the service for global access\n msNavigationSidebarService.setFolded(folded);\n\n if (folded) {\n // Collapse everything\n $rootScope.$broadcast('msNavigation::collapse');\n\n // Add class to the body\n bodyEl.addClass('ms-navigation-folded');\n\n // Set fold expander\n setFoldExpander();\n }\n else {\n // Expand the active one and its parents\n var activeItem = msNavigationSidebarService.getActiveItem();\n if (activeItem) {\n activeItem.scope.$emit('msNavigation::stateMatched');\n }\n\n // Remove body class\n bodyEl.removeClass('ms-navigation-folded ms-navigation-folded-open');\n\n // Remove fold collapser\n removeFoldCollapser();\n }\n }\n\n /**\n * Set fold expander\n */\n function setFoldExpander() {\n iElement.parent().append(foldExpanderEl);\n\n // Let everything settle for a moment\n // before registering the event listener\n $timeout(function () {\n foldExpanderEl.on('mouseenter touchstart', onFoldExpanderHover);\n });\n }\n\n /**\n * Set fold collapser\n */\n function setFoldCollapser() {\n bodyEl.find('#main').append(foldCollapserEl);\n foldCollapserEl.on('mouseenter touchstart', onFoldCollapserHover);\n }\n\n /**\n * Remove fold collapser\n */\n function removeFoldCollapser() {\n foldCollapserEl.remove();\n }\n\n /**\n * onHover event of foldExpander\n */\n function onFoldExpanderHover(event) {\n if (event) {\n event.preventDefault();\n }\n\n // Set folded open status\n msNavigationSidebarService.setFoldedOpen(true);\n\n // Expand the active one and its parents\n var activeItem = msNavigationSidebarService.getActiveItem();\n if (activeItem) {\n activeItem.scope.$emit('msNavigation::stateMatched');\n }\n\n // Add class to the body\n bodyEl.addClass('ms-navigation-folded-open');\n\n // Remove the fold opener\n foldExpanderEl.remove();\n\n // Set fold collapser\n setFoldCollapser();\n }\n\n /**\n * onHover event of foldCollapser\n */\n function onFoldCollapserHover(event) {\n if (event) {\n event.preventDefault();\n }\n\n // Set folded open status\n msNavigationSidebarService.setFoldedOpen(false);\n\n // Collapse everything\n $rootScope.$broadcast('msNavigation::collapse');\n\n // Remove body class\n bodyEl.removeClass('ms-navigation-folded-open');\n\n // Remove the fold collapser\n foldCollapserEl.remove();\n\n // Set fold expander\n setFoldExpander();\n }\n\n /**\n * Public access for toggling folded status externally\n */\n scope.toggleFolded = function () {\n var folded = msNavigationSidebarService.getFolded();\n\n setFolded(!folded);\n };\n\n /**\n * On $stateChangeStart\n */\n scope.$on('$stateChangeStart', function () {\n // Close the sidenav\n sidenav.close();\n\n // If navigation is folded open, close it\n if (msNavigationSidebarService.getFolded()) {\n onFoldCollapserHover();\n }\n });\n\n // Cleanup\n scope.$on('$destroy', function () {\n foldCollapserEl.off('mouseenter touchstart');\n foldExpanderEl.off('mouseenter touchstart');\n });\n };\n }\n };\n }\n\n /** @ngInject */\n function MsNavigationSidebarNodeController($scope, $element, $rootScope, $animate, $state, msNavigationSidebarService, $translate) {\n var vm = this;\n\n // Data\n vm.element = $element;\n vm.node = $scope.node;\n vm.hasChildren = undefined;\n vm.collapsed = undefined;\n vm.collapsable = undefined;\n vm.group = undefined;\n vm.animateHeightClass = 'animate-height';\n vm.moreAndMoreCount = 10;\n // Methods\n vm.toggleCollapsed = toggleCollapsed;\n vm.collapse = collapse;\n vm.expand = expand;\n vm.getClass = getClass;\n vm.isHidden = isHidden;\n vm.click = click;\n vm.clickAverage = clickAverage;\n vm.moreAndMore = moreAndMore;\n vm.getNodeTitle = getNodeTitle;\n vm.searchCategories = searchCategories;\n\n function click(flag) {\n if (vm.node.default && flag) return;\n if (angular.isDefined(vm.node.hidden) && angular.isFunction(vm.node.hidden)) {\n if (vm.node.default) {\n vm.node.click(vm.node.stateParams);\n return;\n }\n vm.loading = true;\n vm.node.click(vm.node.stateParams)\n .then(function (answer) {\n if (!answer) return;\n //vm.node.children = answer;\n vm.loading = false;\n if (answer.length == 0 && vm.node.children.length == 0)\n vm.hasChildren = false;\n });\n }\n }\n\n function clickAverage(){\n if (angular.isDefined(vm.node.hidden) && angular.isFunction(vm.node.hidden)) {\n vm.loading = true;\n vm.node.clickAverage(vm.node.stateParams)\n .then(function (answer) {\n if (!answer) return;\n //vm.node.children = answer;\n vm.loading = false;\n if (answer.length == 0 && vm.node.children.length == 0)\n vm.hasChildren = false;\n });;\n }\n }\n\n function searchCategories() {\n if (angular.isDefined(vm.node.hidden) && angular.isFunction(vm.node.hidden)) {\n vm.node.searchCategories(vm.node.stateParams);\n vm.moreAndMoreCount = 10;\n } else {\n vm.node.searchCategories({\n parent: null,\n id: null,\n search: vm.node.stateParams.search\n });\n vm.moreAndMoreCount = 10;\n }\n }\n\n vm.collapsableClicked = false;\n\n function moreAndMore(flag) {\n if (flag) {\n if (vm.collapsableClicked) return;\n vm.collapsableClicked = flag;\n } else {\n vm.moreAndMoreCount += 10;\n }\n if (vm.node.stateParams) vm.node.stateParams.flag = flag;\n if (vm.node.default) return;\n if (angular.isDefined(vm.node.hidden) && angular.isFunction(vm.node.hidden)) {\n vm.loading = true;\n vm.node.moreAndMore(vm.node.stateParams)\n .then(function (answer) {\n if (!answer) return;\n vm.loading = false;\n if (answer.length == 0 && vm.node.children.length == 0)\n vm.hasChildren = false;\n });\n } else {\n if (vm.node.children.length > 0) {\n vm.loading = true;\n vm.node.children[0].moreAndMore({\n parent: null,\n id: null,\n search: vm.node.stateParams ? vm.node.stateParams.search : null,\n flag: false\n }).then(function (answer) {\n if (!answer) return;\n vm.loading = false;\n if (answer.length == 0 && vm.node.children.length == 0)\n vm.hasChildren = false;\n });\n }\n }\n }\n\n function getNodeTitle(node) {\n var title = node.title;\n if (node.localVariables) {\n var localVariable = node.localVariables.filter(function (k) { return $translate.use() == k.language; })[0];\n if (localVariable) title = localVariable.value;\n }\n return title;\n }\n\n //////////\n\n init();\n\n /**\n * Initialize\n */\n function init() {\n // Setup the initial values\n\n // Has children?\n vm.hasChildren = vm.node.childrenCount > 0;\n\n // Is group?\n vm.group = !!(angular.isDefined(vm.node.group) && vm.node.group === true);\n\n // Is collapsable?\n if (!vm.hasChildren || vm.group) {\n vm.collapsable = false;\n }\n else {\n vm.collapsable = !!(angular.isUndefined(vm.node.collapsable) || typeof vm.node.collapsable !== 'boolean' || vm.node.collapsable === true);\n }\n\n // Is collapsed?\n if (!vm.collapsable) {\n vm.collapsed = false;\n }\n else {\n vm.collapsed = !!(angular.isUndefined(vm.node.collapsed) || typeof vm.node.collapsed !== 'boolean' || vm.node.collapsed === true);\n }\n\n // Expand all parents if we have a matching state or\n // the current state is a child of the node's state\n if (vm.node.state === $state.current.name || $state.includes(vm.node.state)) {\n // If state params are defined, make sure they are\n // equal, otherwise do not set the active item\n if (angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params)) {\n return;\n }\n\n $scope.$emit('msNavigation::stateMatched');\n\n // Also store the current active menu item\n msNavigationSidebarService.setActiveItem(vm.node, $scope);\n }\n\n $scope.$on('msNavigation::stateMatched', function () {\n // Expand if the current scope is collapsable and is collapsed\n if (vm.collapsable && vm.collapsed) {\n $scope.$evalAsync(function () {\n vm.collapsed = false;\n });\n }\n });\n\n // Listen for collapse event\n $scope.$on('msNavigation::collapse', function (event, path) {\n if (vm.collapsed || !vm.collapsable) {\n return;\n }\n\n // If there is no path defined, collapse\n if (angular.isUndefined(path)) {\n vm.collapse();\n }\n // If there is a path defined, do not collapse\n // the items that are inside that path. This will\n // prevent parent items from collapsing\n else {\n var givenPathParts = path.split('.'),\n activePathParts = [];\n\n var activeItem = msNavigationSidebarService.getActiveItem();\n if (activeItem) {\n activePathParts = activeItem.node._path.split('.');\n }\n\n // Test for given path\n if (givenPathParts.indexOf(vm.node._id) > -1) {\n return;\n }\n\n // Test for active path\n if (activePathParts.indexOf(vm.node._id) > -1) {\n return;\n }\n\n vm.collapse();\n }\n });\n\n // Listen for $stateChangeSuccess event\n $scope.$on('$stateChangeSuccess', function () {\n if (vm.node.state === $state.current.name) {\n // If state params are defined, make sure they are\n // equal, otherwise do not set the active item\n if (angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params)) {\n return;\n }\n\n // Update active item on state change\n msNavigationSidebarService.setActiveItem(vm.node, $scope);\n\n // Collapse everything except the one we're using\n $rootScope.$broadcast('msNavigation::collapse', vm.node._path);\n }\n });\n }\n\n /**\n * Toggle collapsed\n */\n function toggleCollapsed() {\n if (vm.collapsed) {\n vm.expand();\n }\n else {\n vm.collapse();\n }\n }\n\n /**\n * Collapse\n */\n function collapse() {\n // Grab the element that we are going to collapse\n var collapseEl = vm.element.children('ul');\n\n // Grab the height\n var height = collapseEl[0].offsetHeight;\n\n $scope.$evalAsync(function () {\n // Set collapsed status\n vm.collapsed = true;\n\n // Add collapsing class to the node\n vm.element.addClass('collapsing');\n\n // Animate the height\n $animate.animate(collapseEl,\n {\n 'display': 'block',\n 'height': height + 'px'\n },\n {\n 'height': '0px'\n },\n vm.animateHeightClass\n ).then(\n function () {\n // Clear the inline styles after animation done\n collapseEl.css({\n 'display': '',\n 'height': ''\n });\n\n // Clear collapsing class from the node\n vm.element.removeClass('collapsing');\n }\n );\n\n // Broadcast the collapse event so child items can also be collapsed\n $scope.$broadcast('msNavigation::collapse');\n });\n }\n\n /**\n * Expand\n */\n function expand() {\n // Grab the element that we are going to expand\n var expandEl = vm.element.children('ul');\n\n // Move the element out of the dom flow and\n // make it block so we can get its height\n expandEl.css({\n 'position': 'absolute',\n 'visibility': 'hidden',\n 'display': 'block',\n 'height': 'auto'\n });\n\n // Grab the height\n var height = expandEl[0].offsetHeight;\n\n // Reset the style modifications\n expandEl.css({\n 'position': '',\n 'visibility': '',\n 'display': '',\n 'height': ''\n });\n\n $scope.$evalAsync(function () {\n // Set collapsed status\n vm.collapsed = false;\n\n // Add expanding class to the node\n vm.element.addClass('expanding');\n\n // Animate the height\n $animate.animate(expandEl,\n {\n 'display': 'block',\n 'height': '0px'\n },\n {\n 'height': height + 'px'\n },\n vm.animateHeightClass\n ).then(\n function () {\n // Clear the inline styles after animation done\n expandEl.css({\n 'height': ''\n });\n\n // Clear expanding class from the node\n vm.element.removeClass('expanding');\n }\n );\n\n // If item expanded, broadcast the collapse event from rootScope so that the other expanded items\n // can be collapsed. This is necessary for keeping only one parent expanded at any time\n $rootScope.$broadcast('msNavigation::collapse', vm.node._path);\n });\n }\n\n /**\n * Return the class\n *\n * @returns {*}\n */\n function getClass() {\n return vm.node.class;\n }\n\n /**\n * Check if node should be hidden\n *\n * @returns {boolean}\n */\n function isHidden() {\n if (angular.isDefined(vm.node.hidden) && angular.isFunction(vm.node.hidden)) {\n if(vm.node.group) return false;\n /*if(vm.node.children && vm.node.children.length > 0){\n vm.node.children.forEach(function(n){\n n.hidden(n.title);\n });\n }*/\n return vm.node.hidden(vm.node);\n }\n\n return false;\n }\n }\n\n /** @ngInject */\n function msNavigationSidebarNodeDirective() {\n return {\n restrict: 'A',\n bindToController: {\n node: '=msNavigationSidebarNode'\n },\n controller: 'MsNavigationSidebarNodeController as vm',\n compile: function (tElement) {\n tElement.addClass('ms-navigation-node');\n\n return function postLink(scope, iElement, iAttrs, MsNavigationSidebarNodeCtrl) {\n // Add custom classes\n iElement.addClass(MsNavigationSidebarNodeCtrl.getClass());\n\n // Add group class if it's a group\n if (MsNavigationSidebarNodeCtrl.group) {\n iElement.addClass('group');\n }\n };\n }\n };\n }\n\n /** @ngInject */\n function msNavigationSidebarItemDirective() {\n return {\n restrict: 'A',\n require: '^msNavigationSidebarNode',\n compile: function (tElement) {\n tElement.addClass('ms-navigation-item');\n\n return function postLink(scope, iElement, iAttrs, MsNavigationSidebarNodeCtrl) {\n // If the item is collapsable...\n if (MsNavigationSidebarNodeCtrl.collapsable) {\n iElement.on('click', MsNavigationSidebarNodeCtrl.toggleCollapsed);\n }\n\n // Cleanup\n scope.$on('$destroy', function () {\n iElement.off('click');\n });\n };\n }\n };\n }\n\n\n})();\n\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .factory('msNavFoldService', msNavFoldService)\n .directive('msNavIsFolded', msNavIsFoldedDirective)\n .controller('MsNavController', MsNavController)\n .directive('msNav', msNavDirective)\n .directive('msNavTitle', msNavTitleDirective)\n .directive('msNavButton', msNavButtonDirective)\n .directive('msNavToggle', msNavToggleDirective);\n\n /** @ngInject */\n function msNavFoldService()\n {\n var foldable = {};\n\n var service = {\n setFoldable : setFoldable,\n isNavFoldedOpen: isNavFoldedOpen,\n toggleFold : toggleFold,\n openFolded : openFolded,\n closeFolded : closeFolded\n };\n\n return service;\n\n //////////\n\n /**\n * Set the foldable\n *\n * @param scope\n * @param element\n */\n function setFoldable(scope, element)\n {\n foldable = {\n 'scope' : scope,\n 'element': element\n };\n }\n\n /**\n * Is folded open\n */\n function isNavFoldedOpen()\n {\n return foldable.scope.isNavFoldedOpen();\n }\n\n /**\n * Toggle fold\n */\n function toggleFold()\n {\n foldable.scope.toggleFold();\n }\n\n /**\n * Open folded navigation\n */\n function openFolded()\n {\n foldable.scope.openFolded();\n }\n\n /**\n * Close folded navigation\n */\n function closeFolded()\n {\n foldable.scope.closeFolded();\n }\n }\n\n /** @ngInject */\n function msNavIsFoldedDirective($document, $rootScope, msNavFoldService)\n {\n return {\n restrict: 'A',\n link : function (scope, iElement, iAttrs)\n {\n var isFolded = (iAttrs.msNavIsFolded === 'true'),\n isFoldedOpen = false,\n body = angular.element($document[0].body),\n openOverlay = angular.element('
'),\n closeOverlay = angular.element('
'),\n sidenavEl = iElement.parent();\n\n // Initialize the service\n msNavFoldService.setFoldable(scope, iElement, isFolded);\n\n // Set the fold status for the first time\n if ( isFolded )\n {\n fold();\n }\n else\n {\n unfold();\n }\n\n /**\n * Is nav folded open\n */\n function isNavFoldedOpen()\n {\n return isFoldedOpen;\n }\n\n /**\n * Toggle fold\n */\n function toggleFold()\n {\n isFolded = !isFolded;\n\n if ( isFolded )\n {\n fold();\n }\n else\n {\n unfold();\n }\n }\n\n /**\n * Fold the navigation\n */\n function fold()\n {\n // Add classes\n body.addClass('ms-nav-folded');\n\n // Collapse everything and scroll to the top\n $rootScope.$broadcast('msNav::forceCollapse');\n iElement.scrollTop(0);\n\n // Append the openOverlay to the element\n sidenavEl.append(openOverlay);\n\n // Event listeners\n openOverlay.on('mouseenter touchstart', function (event)\n {\n openFolded(event);\n isFoldedOpen = true;\n });\n }\n\n /**\n * Open folded navigation\n */\n function openFolded(event)\n {\n if ( angular.isDefined(event) )\n {\n event.preventDefault();\n }\n\n body.addClass('ms-nav-folded-open');\n\n // Update the location\n $rootScope.$broadcast('msNav::expandMatchingToggles');\n\n // Remove open overlay\n sidenavEl.find(openOverlay).remove();\n\n // Append close overlay and bind its events\n sidenavEl.parent().append(closeOverlay);\n closeOverlay.on('mouseenter touchstart', function (event)\n {\n closeFolded(event);\n isFoldedOpen = false;\n });\n }\n\n /**\n * Close folded navigation\n */\n function closeFolded(event)\n {\n if ( angular.isDefined(event) )\n {\n event.preventDefault();\n }\n\n // Collapse everything and scroll to the top\n $rootScope.$broadcast('msNav::forceCollapse');\n iElement.scrollTop(0);\n\n body.removeClass('ms-nav-folded-open');\n\n // Remove close overlay\n sidenavEl.parent().find(closeOverlay).remove();\n\n // Append open overlay and bind its events\n sidenavEl.append(openOverlay);\n openOverlay.on('mouseenter touchstart', function (event)\n {\n openFolded(event);\n isFoldedOpen = true;\n });\n }\n\n /**\n * Unfold the navigation\n */\n function unfold()\n {\n body.removeClass('ms-nav-folded ms-nav-folded-open');\n\n // Update the location\n $rootScope.$broadcast('msNav::expandMatchingToggles');\n\n iElement.off('mouseenter mouseleave');\n }\n\n // Expose functions to the scope\n scope.toggleFold = toggleFold;\n scope.openFolded = openFolded;\n scope.closeFolded = closeFolded;\n scope.isNavFoldedOpen = isNavFoldedOpen;\n\n // Cleanup\n scope.$on('$destroy', function ()\n {\n openOverlay.off('mouseenter touchstart');\n closeOverlay.off('mouseenter touchstart');\n iElement.off('mouseenter mouseleave');\n });\n }\n };\n }\n\n\n /** @ngInject */\n function MsNavController()\n {\n var vm = this,\n disabled = false,\n toggleItems = [],\n lockedItems = [];\n\n // Data\n\n // Methods\n vm.isDisabled = isDisabled;\n vm.enable = enable;\n vm.disable = disable;\n vm.setToggleItem = setToggleItem;\n vm.getLockedItems = getLockedItems;\n vm.setLockedItem = setLockedItem;\n vm.clearLockedItems = clearLockedItems;\n\n //////////\n\n /**\n * Is navigation disabled\n *\n * @returns {boolean}\n */\n function isDisabled()\n {\n return disabled;\n }\n\n /**\n * Disable the navigation\n */\n function disable()\n {\n disabled = true;\n }\n\n /**\n * Enable the navigation\n */\n function enable()\n {\n disabled = false;\n }\n\n /**\n * Set toggle item\n *\n * @param element\n * @param scope\n */\n function setToggleItem(element, scope)\n {\n toggleItems.push({\n 'element': element,\n 'scope' : scope\n });\n }\n\n /**\n * Get locked items\n *\n * @returns {Array}\n */\n function getLockedItems()\n {\n return lockedItems;\n }\n\n /**\n * Set locked item\n *\n * @param element\n * @param scope\n */\n function setLockedItem(element, scope)\n {\n lockedItems.push({\n 'element': element,\n 'scope' : scope\n });\n }\n\n /**\n * Clear locked items list\n */\n function clearLockedItems()\n {\n lockedItems = [];\n }\n }\n\n /** @ngInject */\n function msNavDirective($rootScope, $mdComponentRegistry, msNavFoldService)\n {\n return {\n restrict : 'E',\n scope : {},\n controller: 'MsNavController',\n compile : function (tElement)\n {\n tElement.addClass('ms-nav');\n\n return function postLink(scope)\n {\n // Update toggle status according to the ui-router current state\n $rootScope.$broadcast('msNav::expandMatchingToggles');\n\n // Update toggles on state changes\n var stateChangeSuccessEvent = $rootScope.$on('$stateChangeSuccess', function ()\n {\n $rootScope.$broadcast('msNav::expandMatchingToggles');\n\n // Close navigation sidenav on stateChangeSuccess\n $mdComponentRegistry.when('navigation').then(function (navigation)\n {\n navigation.close();\n\n if ( msNavFoldService.isNavFoldedOpen() )\n {\n msNavFoldService.closeFolded();\n }\n });\n });\n\n // Cleanup\n scope.$on('$destroy', function ()\n {\n stateChangeSuccessEvent();\n })\n };\n }\n };\n }\n\n /** @ngInject */\n function msNavTitleDirective()\n {\n return {\n restrict: 'A',\n compile : function (tElement)\n {\n tElement.addClass('ms-nav-title');\n\n return function postLink()\n {\n\n };\n }\n };\n }\n\n /** @ngInject */\n function msNavButtonDirective()\n {\n return {\n restrict: 'AE',\n compile : function (tElement)\n {\n tElement.addClass('ms-nav-button');\n\n return function postLink()\n {\n\n };\n }\n };\n }\n\n /** @ngInject */\n function msNavToggleDirective($rootScope, $q, $animate, $state)\n {\n return {\n restrict: 'A',\n require : '^msNav',\n scope : true,\n compile : function (tElement, tAttrs)\n {\n tElement.addClass('ms-nav-toggle');\n\n // Add collapsed attr\n if ( angular.isUndefined(tAttrs.collapsed) )\n {\n tAttrs.collapsed = true;\n }\n\n tElement.attr('collapsed', tAttrs.collapsed);\n\n return function postLink(scope, iElement, iAttrs, MsNavCtrl)\n {\n var classes = {\n expanded : 'expanded',\n expandAnimation : 'expand-animation',\n collapseAnimation: 'collapse-animation'\n };\n\n // Store all related states\n var links = iElement.find('a');\n var states = [];\n var regExp = /\\(.*\\)/g;\n\n angular.forEach(links, function (link)\n {\n var state = angular.element(link).attr('ui-sref');\n\n if ( angular.isUndefined(state) )\n {\n return;\n }\n\n // Remove any parameter definition from the state name before storing it\n state = state.replace(regExp, '');\n\n states.push(state);\n });\n\n // Store toggle-able element and its scope in the main nav controller\n MsNavCtrl.setToggleItem(iElement, scope);\n\n // Click handler\n iElement.children('.ms-nav-button').on('click', toggle);\n\n // Toggle function\n function toggle()\n {\n // If navigation is disabled, do nothing...\n if ( MsNavCtrl.isDisabled() )\n {\n return;\n }\n\n // Disable the entire navigation to prevent spamming\n MsNavCtrl.disable();\n\n if ( isCollapsed() )\n {\n // Clear the locked items list\n MsNavCtrl.clearLockedItems();\n\n // Emit pushToLockedList event\n scope.$emit('msNav::pushToLockedList');\n\n // Collapse everything but locked items\n $rootScope.$broadcast('msNav::collapse');\n\n // Expand and then...\n expand().then(function ()\n {\n // Enable the entire navigation after animations completed\n MsNavCtrl.enable();\n });\n }\n else\n {\n // Collapse with all children\n scope.$broadcast('msNav::forceCollapse');\n }\n }\n\n // Cleanup\n scope.$on('$destroy', function ()\n {\n iElement.children('.ms-nav-button').off('click');\n });\n\n /*---------------------*/\n /* Scope Events */\n /*---------------------*/\n\n /**\n * Collapse everything but locked items\n */\n scope.$on('msNav::collapse', function ()\n {\n // Only collapse toggles that are not locked\n var lockedItems = MsNavCtrl.getLockedItems();\n var locked = false;\n\n angular.forEach(lockedItems, function (lockedItem)\n {\n if ( angular.equals(lockedItem.scope, scope) )\n {\n locked = true;\n }\n });\n\n if ( locked )\n {\n return;\n }\n\n // Collapse and then...\n collapse().then(function ()\n {\n // Enable the entire navigation after animations completed\n MsNavCtrl.enable();\n });\n });\n\n /**\n * Collapse everything\n */\n scope.$on('msNav::forceCollapse', function ()\n {\n // Collapse and then...\n collapse().then(function ()\n {\n // Enable the entire navigation after animations completed\n MsNavCtrl.enable();\n });\n });\n\n /**\n * Expand toggles that match with the current states\n */\n scope.$on('msNav::expandMatchingToggles', function ()\n {\n var currentState = $state.current.name;\n var shouldExpand = false;\n\n angular.forEach(states, function (state)\n {\n if ( currentState === state )\n {\n shouldExpand = true;\n }\n });\n\n if ( shouldExpand )\n {\n expand();\n }\n else\n {\n collapse();\n }\n });\n\n /**\n * Add toggle to the locked list\n */\n scope.$on('msNav::pushToLockedList', function ()\n {\n // Set expanded item on main nav controller\n MsNavCtrl.setLockedItem(iElement, scope);\n });\n\n /*---------------------*/\n /* Internal functions */\n /*---------------------*/\n\n /**\n * Is element collapsed\n *\n * @returns {bool}\n */\n function isCollapsed()\n {\n return iElement.attr('collapsed') === 'true';\n }\n\n /**\n * Is element expanded\n *\n * @returns {bool}\n */\n function isExpanded()\n {\n return !isCollapsed();\n }\n\n /**\n * Expand the toggle\n *\n * @returns $promise\n */\n function expand()\n {\n // Create a new deferred object\n var deferred = $q.defer();\n\n // If the menu item is already expanded, do nothing..\n if ( isExpanded() )\n {\n // Reject the deferred object\n deferred.reject({'error': true});\n\n // Return the promise\n return deferred.promise;\n }\n\n // Set element attr\n iElement.attr('collapsed', false);\n\n // Grab the element to expand\n var elementToExpand = angular.element(iElement.find('ms-nav-toggle-items')[0]);\n\n // Move the element out of the dom flow and\n // make it block so we can get its height\n elementToExpand.css({\n 'position' : 'absolute',\n 'visibility': 'hidden',\n 'display' : 'block',\n 'height' : 'auto'\n });\n\n // Grab the height\n var height = elementToExpand[0].offsetHeight;\n\n // Reset the style modifications\n elementToExpand.css({\n 'position' : '',\n 'visibility': '',\n 'display' : '',\n 'height' : ''\n });\n\n // Animate the height\n scope.$evalAsync(function ()\n {\n $animate.animate(elementToExpand,\n {\n 'display': 'block',\n 'height' : '0px'\n },\n {\n 'height': height + 'px'\n },\n classes.expandAnimation\n ).then(\n function ()\n {\n // Add expanded class\n elementToExpand.addClass(classes.expanded);\n\n // Clear the inline styles after animation done\n elementToExpand.css({'height': ''});\n\n // Resolve the deferred object\n deferred.resolve({'success': true});\n }\n );\n });\n\n // Return the promise\n return deferred.promise;\n }\n\n /**\n * Collapse the toggle\n *\n * @returns $promise\n */\n function collapse()\n {\n // Create a new deferred object\n var deferred = $q.defer();\n\n // If the menu item is already collapsed, do nothing..\n if ( isCollapsed() )\n {\n // Reject the deferred object\n deferred.reject({'error': true});\n\n // Return the promise\n return deferred.promise;\n }\n\n // Set element attr\n iElement.attr('collapsed', true);\n\n // Grab the element to collapse\n var elementToCollapse = angular.element(iElement.find('ms-nav-toggle-items')[0]);\n\n // Grab the height\n var height = elementToCollapse[0].offsetHeight;\n\n // Animate the height\n scope.$evalAsync(function ()\n {\n $animate.animate(elementToCollapse,\n {\n 'height': height + 'px'\n },\n {\n 'height': '0px'\n },\n classes.collapseAnimation\n ).then(\n function ()\n {\n // Remove expanded class\n elementToCollapse.removeClass(classes.expanded);\n\n // Clear the inline styles after animation done\n elementToCollapse.css({\n 'display': '',\n 'height' : ''\n });\n\n // Resolve the deferred object\n deferred.resolve({'success': true});\n }\n );\n });\n\n // Return the promise\n return deferred.promise;\n }\n };\n }\n };\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .directive('msMaterialColorPicker', msMaterialColorPicker);\n\n /** @ngInject */\n function msMaterialColorPicker($mdMenu, $mdColorPalette, fuseGenerator)\n {\n return {\n require : 'ngModel',\n restrict : 'E',\n scope : {\n ngModel : '=',\n msModelType: '@?'\n },\n templateUrl: 'app/core/directives/ms-material-color-picker/ms-material-color-picker.html',\n link : function ($scope, element, attrs, ngModel)\n {\n // Material Color Palette\n $scope.palettes = $mdColorPalette;\n $scope.selectedPalette = false;\n $scope.selectedHues = false;\n\n /**\n * ModelType: 'obj', 'class'(default)\n * @type {string|string}\n */\n $scope.msModelType = $scope.msModelType || 'class';\n\n /**\n * Initialize / Watch model changes\n */\n $scope.$watch('ngModel', setSelectedColor);\n\n /**\n * Activate Hue Selection\n * @param palette\n * @param hues\n */\n $scope.activateHueSelection = function (palette, hues)\n {\n $scope.selectedPalette = palette;\n $scope.selectedHues = hues;\n };\n\n /**\n * Select Color\n * @type {selectColor}\n */\n $scope.selectColor = function (palette, hue)\n {\n // Update Selected Color\n updateSelectedColor(palette, hue);\n\n // Update Model Value\n updateModel();\n\n // Hide The picker\n $mdMenu.hide();\n };\n\n $scope.removeColor = function ()\n {\n\n $scope.selectedColor = {\n palette: '',\n hue : '',\n class : ''\n };\n\n $scope.activateHueSelection(false, false);\n\n updateModel();\n };\n\n /**\n * Set SelectedColor by model type\n */\n function setSelectedColor()\n {\n if ( !ngModel.$viewValue || ngModel.$viewValue === '' )\n {\n return;\n }\n\n var palette, hue;\n\n // If ModelType Class\n if ( $scope.msModelType === 'class' )\n {\n var color = ngModel.$viewValue.split('-');\n if ( color.length >= 5 )\n {\n palette = color[1] + '-' + color[2];\n hue = color[3];\n }\n else\n {\n palette = color[1];\n hue = color[2];\n }\n }\n // If ModelType Object\n else if ( $scope.msModelType === 'obj' )\n {\n palette = ngModel.$viewValue.palette;\n hue = ngModel.$viewValue.hue || 500;\n }\n\n // Update Selected Color\n updateSelectedColor(palette, hue);\n }\n\n\n /**\n * Update Selected Color\n * @param palette\n * @param hue\n */\n function updateSelectedColor(palette, hue)\n {\n $scope.selectedColor = {\n palette : palette,\n hue : hue,\n class : 'md-' + palette + '-' + hue + '-bg',\n bgColorValue: fuseGenerator.rgba($scope.palettes[palette][hue].value),\n fgColorValue: fuseGenerator.rgba($scope.palettes[palette][hue].contrast)\n };\n\n // If Model object not Equals the selectedColor update it\n // it can be happen when the model only have pallete and hue values\n if ( $scope.msModelType === 'obj' && !angular.equals($scope.selectedColor, ngModel.$viewValue) )\n {\n // Update Model Value\n updateModel();\n }\n\n $scope.activateHueSelection(palette, $scope.palettes[palette]);\n }\n\n /**\n * Update Model Value by model type\n */\n function updateModel()\n {\n if ( $scope.msModelType === 'class' )\n {\n ngModel.$setViewValue($scope.selectedColor.class);\n }\n else if ( $scope.msModelType === 'obj' )\n {\n ngModel.$setViewValue($scope.selectedColor);\n }\n }\n }\n };\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .provider('msDatepickerFixConfig', msDatepickerFixConfigProvider)\n .directive('msDatepickerFix', msDatepickerFix);\n\n /** @ngInject */\n function msDatepickerFixConfigProvider()\n {\n\n // Default configuration\n var defaultConfiguration = {\n // To view\n formatter: function (val)\n {\n if ( !val )\n {\n return '';\n }\n\n return new Date(val);\n },\n // To model\n parser : function (val)\n {\n if ( !val )\n {\n return '';\n }\n var offset = moment(val).utcOffset();\n var date = new Date(moment(val).add(offset, 'm'));\n return date;\n }\n };\n\n // Methods\n this.config = config;\n\n //////////\n\n /**\n * Extend default configuration with the given one\n *\n * @param configuration\n */\n function config(configuration)\n {\n defaultConfiguration = angular.extend({}, defaultConfiguration, configuration);\n }\n\n /**\n * Service\n */\n this.$get = function ()\n {\n return defaultConfiguration;\n };\n }\n\n /** @ngInject */\n function msDatepickerFix(msDatepickerFixConfig)\n {\n return {\n require: 'ngModel',\n link : function (scope, elem, attrs, ngModel)\n {\n ngModel.$formatters.unshift(msDatepickerFixConfig.formatter); // to view\n ngModel.$parsers.unshift(msDatepickerFixConfig.parser); // to model\n }\n };\n }\n})();\n\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .controller('MsFormWizardController', MsFormWizardController)\n .directive('msFormWizard', msFormWizardDirective)\n .directive('msFormWizardForm', msFormWizardFormDirective);\n\n /** @ngInject */\n function MsFormWizardController()\n {\n var vm = this;\n\n // Data\n vm.forms = [];\n vm.selectedIndex = 0;\n\n // Methods\n vm.registerForm = registerForm;\n\n vm.previousStep = previousStep;\n vm.nextStep = nextStep;\n vm.firstStep = firstStep;\n vm.lastStep = lastStep;\n\n vm.totalSteps = totalSteps;\n vm.isFirstStep = isFirstStep;\n vm.isLastStep = isLastStep;\n\n vm.currentStepInvalid = currentStepInvalid;\n vm.previousStepInvalid = previousStepInvalid;\n vm.formsIncomplete = formsIncomplete;\n vm.resetForm = resetForm;\n\n //////////\n\n /**\n * Register form\n *\n * @param form\n */\n function registerForm(form)\n {\n vm.forms.push(form);\n }\n\n /**\n * Go to previous step\n */\n function previousStep()\n {\n if ( isFirstStep() )\n {\n return;\n }\n\n vm.selectedIndex--;\n }\n\n /**\n * Go to next step\n */\n function nextStep()\n {\n if ( isLastStep() )\n {\n return;\n }\n\n vm.selectedIndex++;\n }\n\n /**\n * Go to first step\n */\n function firstStep()\n {\n vm.selectedIndex = 0;\n }\n\n /**\n * Go to last step\n */\n function lastStep()\n {\n vm.selectedIndex = totalSteps() - 1;\n }\n\n /**\n * Return total steps\n *\n * @returns {int}\n */\n function totalSteps()\n {\n return vm.forms.length;\n }\n\n /**\n * Is first step?\n *\n * @returns {boolean}\n */\n function isFirstStep()\n {\n return vm.selectedIndex === 0;\n }\n\n /**\n * Is last step?\n *\n * @returns {boolean}\n */\n function isLastStep()\n {\n return vm.selectedIndex === totalSteps() - 1;\n }\n\n /**\n * Is current step invalid?\n *\n * @returns {boolean}\n */\n function currentStepInvalid()\n {\n return angular.isDefined(vm.forms[vm.selectedIndex]) && vm.forms[vm.selectedIndex].$invalid;\n }\n\n /**\n * Is previous step invalid?\n *\n * @returns {boolean}\n */\n function previousStepInvalid()\n {\n return vm.selectedIndex > 0 && angular.isDefined(vm.forms[vm.selectedIndex - 1]) && vm.forms[vm.selectedIndex - 1].$invalid;\n }\n\n /**\n * Check if there is any incomplete forms\n *\n * @returns {boolean}\n */\n function formsIncomplete()\n {\n for ( var x = 0; x < vm.forms.length; x++ )\n {\n if ( vm.forms[x].$invalid )\n {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Reset form\n */\n function resetForm()\n {\n // Go back to the first step\n vm.selectedIndex = 0;\n\n // Make sure all the forms are back in the $pristine & $untouched status\n for ( var x = 0; x < vm.forms.length; x++ )\n {\n vm.forms[x].$setPristine();\n vm.forms[x].$setUntouched();\n }\n }\n }\n\n /** @ngInject */\n function msFormWizardDirective()\n {\n return {\n restrict : 'E',\n scope : true,\n controller: 'MsFormWizardController as msWizard',\n compile : function (tElement)\n {\n tElement.addClass('ms-form-wizard');\n\n return function postLink()\n {\n\n };\n }\n }\n\n }\n\n /** @ngInject */\n function msFormWizardFormDirective()\n {\n return {\n restrict: 'A',\n require : ['form', '^msFormWizard'],\n compile : function (tElement)\n {\n tElement.addClass('ms-form-wizard-form');\n\n return function postLink(scope, iElement, iAttrs, ctrls)\n {\n var formCtrl = ctrls[0],\n MsFormWizardCtrl = ctrls[1];\n\n MsFormWizardCtrl.registerForm(formCtrl);\n }\n }\n }\n }\n\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .directive('msCard', msCardDirective);\n\n /** @ngInject */\n function msCardDirective()\n {\n return {\n restrict: 'E',\n scope : {\n templatePath: '=template',\n card : '=ngModel',\n vm : '=viewModel'\n },\n template: '
',\n compile : function (tElement)\n {\n // Add class\n tElement.addClass('ms-card');\n\n return function postLink(scope, iElement)\n {\n // Methods\n scope.cardTemplateLoaded = cardTemplateLoaded;\n\n //////////\n\n /**\n * Emit cardTemplateLoaded event\n */\n function cardTemplateLoaded()\n {\n scope.$emit('msCard::cardTemplateLoaded', iElement);\n }\n };\n }\n };\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .provider('fuseTheming', fuseThemingProvider);\n\n /** @ngInject */\n function fuseThemingProvider()\n {\n // Inject Cookies Service\n var $cookies;\n\n angular.injector(['ngCookies']).invoke([\n '$cookies', function (_$cookies)\n {\n $cookies = _$cookies;\n }\n ]);\n\n // Inject $log service\n var $log = angular.injector(['ng']).get('$log');\n\n var registeredPalettes,\n registeredThemes;\n\n // Methods\n this.setRegisteredPalettes = setRegisteredPalettes;\n this.setRegisteredThemes = setRegisteredThemes;\n\n //////////\n\n /**\n * Set registered palettes\n *\n * @param _registeredPalettes\n */\n function setRegisteredPalettes(_registeredPalettes)\n {\n registeredPalettes = _registeredPalettes;\n }\n\n /**\n * Set registered themes\n *\n * @param _registeredThemes\n */\n function setRegisteredThemes(_registeredThemes)\n {\n registeredThemes = _registeredThemes;\n }\n\n /**\n * Service\n */\n this.$get = function ()\n {\n var service = {\n getRegisteredPalettes: getRegisteredPalettes,\n getRegisteredThemes : getRegisteredThemes,\n setActiveTheme : setActiveTheme,\n setThemesList : setThemesList,\n themes : {\n list : {},\n active: {\n 'name' : '',\n 'theme': {}\n }\n }\n };\n\n return service;\n\n //////////\n\n /**\n * Get registered palettes\n *\n * @returns {*}\n */\n function getRegisteredPalettes()\n {\n return registeredPalettes;\n }\n\n /**\n * Get registered themes\n *\n * @returns {*}\n */\n function getRegisteredThemes()\n {\n return registeredThemes;\n }\n\n /**\n * Set active theme\n *\n * @param themeName\n */\n function setActiveTheme(themeName)\n {\n // If theme does not exist, fallback to the default theme\n if ( angular.isUndefined(service.themes.list[themeName]) )\n {\n // If there is no theme called \"default\"...\n if ( angular.isUndefined(service.themes.list.default) )\n {\n $log.error('You must have at least one theme named \"default\"');\n return;\n }\n\n $log.warn('The theme \"' + themeName + '\" does not exist! Falling back to the \"default\" theme.');\n\n // Otherwise set theme to default theme\n service.themes.active.name = 'default';\n service.themes.active.theme = service.themes.list.default;\n //$cookies.put('selectedTheme', service.themes.active.name);\n\n return;\n }\n\n service.themes.active.name = themeName;\n service.themes.active.theme = service.themes.list[themeName];\n //$cookies.put('selectedTheme', themeName);\n }\n\n /**\n * Set available themes list\n *\n * @param themeList\n */\n function setThemesList(themeList)\n {\n service.themes.list = themeList;\n }\n };\n }\n})();\n\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .config(config);\n\n /** @ngInject */\n function config($mdThemingProvider, fusePalettes, fuseThemes, fuseThemingProvider)\n {\n // Inject Cookies Service\n var $cookies;\n angular.injector(['ngCookies']).invoke([\n '$cookies', function (_$cookies)\n {\n $cookies = _$cookies;\n }\n ]);\n\n // Check if custom theme exist in cookies\n var customTheme = $cookies.getObject('customTheme');\n if ( customTheme )\n {\n fuseThemes['custom'] = customTheme;\n }\n\n $mdThemingProvider.alwaysWatchTheme(true);\n\n // Define custom palettes\n angular.forEach(fusePalettes, function (palette)\n {\n $mdThemingProvider.definePalette(palette.name, palette.options);\n });\n\n // Register custom themes\n angular.forEach(fuseThemes, function (theme, themeName)\n {\n $mdThemingProvider.theme(themeName)\n .primaryPalette(theme.primary.name, theme.primary.hues)\n .accentPalette(theme.accent.name, theme.accent.hues)\n .warnPalette(theme.warn.name, theme.warn.hues)\n .backgroundPalette(theme.background.name, theme.background.hues);\n });\n\n // Store generated PALETTES and THEMES objects from $mdThemingProvider\n // in our custom provider, so we can inject them into other areas\n fuseThemingProvider.setRegisteredPalettes($mdThemingProvider._PALETTES);\n fuseThemingProvider.setRegisteredThemes($mdThemingProvider._THEMES);\n }\n\n})();\n(function ()\n{\n 'use strict';\n\n var fuseThemes = {\n 'default' : {\n primary : {\n name: 'fuse-pale-blue',\n hues: {\n 'default': '700',\n 'hue-1' : '500',\n 'hue-2' : '600',\n 'hue-3' : '400'\n }\n },\n accent : {\n name: 'light-blue',\n hues: {\n 'default': '600',\n 'hue-1' : '400',\n 'hue-2' : '700',\n 'hue-3' : 'A100'\n }\n },\n warn : {name: 'red'},\n background: {\n name: 'grey',\n hues: {\n 'default': 'A100',\n 'hue-1' : '100',\n 'hue-2' : '50',\n 'hue-3' : '300'\n }\n }\n },\n 'pink': {\n primary : {\n name: 'blue-grey',\n hues: {\n 'default': '800',\n 'hue-1' : '600',\n 'hue-2' : '400',\n 'hue-3' : 'A100'\n }\n },\n accent : {\n name: 'pink',\n hues: {\n 'default': '400',\n 'hue-1' : '300',\n 'hue-2' : '600',\n 'hue-3' : 'A100'\n }\n },\n warn : {name: 'blue'},\n background: {\n name: 'grey',\n hues: {\n 'default': 'A100',\n 'hue-1' : '100',\n 'hue-2' : '50',\n 'hue-3' : '300'\n }\n }\n },\n 'teal' : {\n primary : {\n name: 'fuse-blue',\n hues: {\n 'default': '900',\n 'hue-1' : '600',\n 'hue-2' : '500',\n 'hue-3' : 'A100'\n }\n },\n accent : {\n name: 'teal',\n hues: {\n 'default': '500',\n 'hue-1' : '400',\n 'hue-2' : '600',\n 'hue-3' : 'A100'\n }\n },\n warn : {name: 'deep-orange'},\n background: {\n name: 'grey',\n hues: {\n 'default': 'A100',\n 'hue-1' : '100',\n 'hue-2' : '50',\n 'hue-3' : '300'\n }\n }\n }\n };\n\n angular\n .module('app.core')\n .constant('fuseThemes', fuseThemes);\n})();\n(function () {\n 'use strict';\n\n var fusePalettes = [\n {\n name: 'fuse-blue',\n options: {\n '50': '#ebf1fa',\n '100': '#c2d4ef',\n '200': '#9ab8e5',\n '300': '#78a0dc',\n '400': '#5688d3',\n '500': '#3470ca',\n '600': '#2e62b1',\n '700': '#275498',\n '800': '#21467e',\n '900': '#1a3865',\n 'A100': '#c2d4ef',\n 'A200': '#9ab8e5',\n 'A400': '#5688d3',\n 'A700': '#275498',\n 'contrastDefaultColor': 'light',\n 'contrastDarkColors': '50 100 200 A100',\n 'contrastStrongLightColors': '300 400'\n }\n },\n {\n name: 'fuse-pale-blue',\n options: {\n '50': '#ececee',\n '100': '#c5c6cb',\n '200': '#9ea1a9',\n '300': '#7d818c',\n '400': '#5c616f',\n '500': '#3c4252',\n '600': '#353a48',\n '700': '#2d323e',\n '800': '#262933',\n '900': '#1e2129',\n 'A100': '#c5c6cb',\n 'A200': '#9ea1a9',\n 'A400': '#5c616f',\n 'A700': '#2d323e',\n 'contrastDefaultColor': 'light',\n 'contrastDarkColors': '50 100 200 A100',\n 'contrastStrongLightColors': '300 400'\n }\n }\n ];\n\n angular\n .module('app.core')\n .constant('fusePalettes', fusePalettes);\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .factory('fuseGenerator', fuseGeneratorService);\n\n /** @ngInject */\n function fuseGeneratorService($cookies, $log, fuseTheming)\n {\n // Storage for simplified themes object\n var themes = {};\n\n var service = {\n generate: generate,\n rgba : rgba\n };\n\n return service;\n\n //////////\n\n /**\n * Generate less variables for each theme from theme's\n * palette by using material color naming conventions\n */\n function generate()\n {\n var registeredThemes = fuseTheming.getRegisteredThemes();\n var registeredPalettes = fuseTheming.getRegisteredPalettes();\n\n // First, create a simplified object that stores\n // all registered themes and their colors\n\n // Iterate through registered themes\n angular.forEach(registeredThemes, function (registeredTheme)\n {\n themes[registeredTheme.name] = {};\n\n // Iterate through color types (primary, accent, warn & background)\n angular.forEach(registeredTheme.colors, function (colorType, colorTypeName)\n {\n themes[registeredTheme.name][colorTypeName] = {\n 'name' : colorType.name,\n 'levels': {\n 'default': {\n 'color' : rgba(registeredPalettes[colorType.name][colorType.hues.default].value),\n 'contrast1': rgba(registeredPalettes[colorType.name][colorType.hues.default].contrast, 1),\n 'contrast2': rgba(registeredPalettes[colorType.name][colorType.hues.default].contrast, 2),\n 'contrast3': rgba(registeredPalettes[colorType.name][colorType.hues.default].contrast, 3),\n 'contrast4': rgba(registeredPalettes[colorType.name][colorType.hues.default].contrast, 4)\n },\n 'hue1' : {\n 'color' : rgba(registeredPalettes[colorType.name][colorType.hues['hue-1']].value),\n 'contrast1': rgba(registeredPalettes[colorType.name][colorType.hues['hue-1']].contrast, 1),\n 'contrast2': rgba(registeredPalettes[colorType.name][colorType.hues['hue-1']].contrast, 2),\n 'contrast3': rgba(registeredPalettes[colorType.name][colorType.hues['hue-1']].contrast, 3),\n 'contrast4': rgba(registeredPalettes[colorType.name][colorType.hues['hue-1']].contrast, 4)\n },\n 'hue2' : {\n 'color' : rgba(registeredPalettes[colorType.name][colorType.hues['hue-2']].value),\n 'contrast1': rgba(registeredPalettes[colorType.name][colorType.hues['hue-2']].contrast, 1),\n 'contrast2': rgba(registeredPalettes[colorType.name][colorType.hues['hue-2']].contrast, 2),\n 'contrast3': rgba(registeredPalettes[colorType.name][colorType.hues['hue-2']].contrast, 3),\n 'contrast4': rgba(registeredPalettes[colorType.name][colorType.hues['hue-2']].contrast, 4)\n },\n 'hue3' : {\n 'color' : rgba(registeredPalettes[colorType.name][colorType.hues['hue-3']].value),\n 'contrast1': rgba(registeredPalettes[colorType.name][colorType.hues['hue-3']].contrast, 1),\n 'contrast2': rgba(registeredPalettes[colorType.name][colorType.hues['hue-3']].contrast, 2),\n 'contrast3': rgba(registeredPalettes[colorType.name][colorType.hues['hue-3']].contrast, 3),\n 'contrast4': rgba(registeredPalettes[colorType.name][colorType.hues['hue-3']].contrast, 4)\n }\n }\n };\n });\n });\n\n // Process themes one more time and then store them in the service for external use\n processAndStoreThemes(themes);\n\n // Iterate through simplified themes\n // object and create style variables\n var styleVars = {};\n\n // Iterate through registered themes\n angular.forEach(themes, function (theme, themeName)\n {\n styleVars = {};\n styleVars['@themeName'] = themeName;\n\n // Iterate through color types (primary, accent, warn & background)\n angular.forEach(theme, function (colorTypes, colorTypeName)\n {\n // Iterate through color levels (default, hue1, hue2 & hue3)\n angular.forEach(colorTypes.levels, function (colors, colorLevelName)\n {\n // Iterate through color name (color, contrast1, contrast2, contrast3 & contrast4)\n angular.forEach(colors, function (color, colorName)\n {\n styleVars['@' + colorTypeName + ucfirst(colorLevelName) + ucfirst(colorName)] = color;\n });\n });\n });\n\n // Render styles\n render(styleVars);\n });\n }\n\n // ---------------------------\n // INTERNAL HELPER FUNCTIONS\n // ---------------------------\n\n /**\n * Process and store themes for global use\n *\n * @param _themes\n */\n function processAndStoreThemes(_themes)\n {\n // Here we will go through every registered theme one more time\n // and try to simplify their objects as much as possible for\n // easier access to their properties.\n var themes = angular.copy(_themes);\n\n // Iterate through themes\n angular.forEach(themes, function (theme)\n {\n // Iterate through color types (primary, accent, warn & background)\n angular.forEach(theme, function (colorType, colorTypeName)\n {\n theme[colorTypeName] = colorType.levels;\n theme[colorTypeName].color = colorType.levels.default.color;\n theme[colorTypeName].contrast1 = colorType.levels.default.contrast1;\n theme[colorTypeName].contrast2 = colorType.levels.default.contrast2;\n theme[colorTypeName].contrast3 = colorType.levels.default.contrast3;\n theme[colorTypeName].contrast4 = colorType.levels.default.contrast4;\n delete theme[colorTypeName].default;\n });\n });\n\n // Store themes and set selected theme for the first time\n fuseTheming.setThemesList(themes);\n\n // Remember selected theme.\n var selectedTheme = $cookies.get('selectedTheme');\n\n if ( selectedTheme )\n {\n $cookies.remove(\"selectedTheme\");\n }\n //else\n //{\n fuseTheming.setActiveTheme('default');\n //}\n }\n\n\n /**\n * Render css files\n *\n * @param styleVars\n */\n function render(styleVars)\n {\n var cssTemplate = '[md-theme=\"@themeName\"] a {\\n color: @accentDefaultColor;\\n}\\n\\n[md-theme=\"@themeName\"] .secondary-text,\\n[md-theme=\"@themeName\"] .icon {\\n color: @backgroundDefaultContrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .hint-text,\\n[md-theme=\"@themeName\"] .disabled-text {\\n color: @backgroundDefaultContrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .fade-text,\\n[md-theme=\"@themeName\"] .divider {\\n color: @backgroundDefaultContrast4;\\n}\\n\\n/* Primary */\\n[md-theme=\"@themeName\"] .md-primary-bg {\\n background-color: @primaryDefaultColor;\\n color: @primaryDefaultContrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg .secondary-text,\\n[md-theme=\"@themeName\"] .md-primary-bg .icon {\\n color: @primaryDefaultContrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg .hint-text,\\n[md-theme=\"@themeName\"] .md-primary-bg .disabled-text {\\n color: @primaryDefaultContrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg .fade-text,\\n[md-theme=\"@themeName\"] .md-primary-bg .divider {\\n color: @primaryDefaultContrast4;\\n}\\n\\n/* Primary, Hue-1 */\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 {\\n background-color: @primaryHue1Color;\\n color: @primaryHue1Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .secondary-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .icon {\\n color: @primaryHue1Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .hint-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .disabled-text {\\n color: @primaryHue1Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .fade-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .divider {\\n color: @primaryHue1Contrast4;\\n}\\n\\n/* Primary, Hue-2 */\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 {\\n background-color: @primaryHue2Color;\\n color: @primaryHue2Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .secondary-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .icon {\\n color: @primaryHue2Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .hint-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .disabled-text {\\n color: @primaryHue2Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .fade-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .divider {\\n color: @primaryHue2Contrast4;\\n}\\n\\n/* Primary, Hue-3 */\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 {\\n background-color: @primaryHue3Color;\\n color: @primaryHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .secondary-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .icon {\\n color: @primaryHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .hint-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .disabled-text {\\n color: @primaryHue3Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .fade-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .divider {\\n color: @primaryHue3Contrast4;\\n}\\n\\n/* Primary foreground */\\n[md-theme=\"@themeName\"] .md-primary-fg {\\n color: @primaryDefaultColor !important;\\n}\\n\\n/* Primary foreground, Hue-1 */\\n[md-theme=\"@themeName\"] .md-primary-fg.md-hue-1 {\\n color: @primaryHue1Color !important;\\n}\\n\\n/* Primary foreground, Hue-2 */\\n[md-theme=\"@themeName\"] .md-primary-fg.md-hue-2 {\\n color: @primaryHue2Color !important;\\n}\\n\\n/* Primary foreground, Hue-3 */\\n[md-theme=\"@themeName\"] .md-primary-fg.md-hue-3 {\\n color: @primaryHue3Color !important;\\n}\\n\\n\\n/* Accent */\\n[md-theme=\"@themeName\"] .md-accent-bg {\\n background-color: @accentDefaultColor;\\n color: @accentDefaultContrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg .secondary-text,\\n[md-theme=\"@themeName\"] .md-accent-bg .icon {\\n color: @accentDefaultContrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg .hint-text,\\n[md-theme=\"@themeName\"] .md-accent-bg .disabled-text {\\n color: @accentDefaultContrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg .fade-text,\\n[md-theme=\"@themeName\"] .md-accent-bg .divider {\\n color: @accentDefaultContrast4;\\n}\\n\\n/* Accent, Hue-1 */\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 {\\n background-color: @accentHue1Color;\\n color: @accentHue1Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .secondary-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .icon {\\n color: @accentHue1Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .hint-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .disabled-text {\\n color: @accentHue1Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .fade-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .divider {\\n color: @accentHue1Contrast4;\\n}\\n\\n/* Accent, Hue-2 */\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 {\\n background-color: @accentHue2Color;\\n color: @accentHue2Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .secondary-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .icon {\\n color: @accentHue2Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .hint-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .disabled-text {\\n color: @accentHue2Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .fade-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .divider {\\n color: @accentHue2Contrast4;\\n}\\n\\n/* Accent, Hue-3 */\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 {\\n background-color: @accentHue3Color;\\n color: @accentHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .secondary-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .icon {\\n color: @accentHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .hint-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .disabled-text {\\n color: @accentHue3Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .fade-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .divider {\\n color: @accentHue3Contrast4;\\n}\\n\\n/* Accent foreground */\\n[md-theme=\"@themeName\"] .md-accent-fg {\\n color: @accentDefaultColor !important;\\n}\\n\\n/* Accent foreground, Hue-1 */\\n[md-theme=\"@themeName\"] .md-accent-fg.md-hue-1 {\\n color: @accentHue1Color !important;\\n}\\n\\n/* Accent foreground, Hue-2 */\\n[md-theme=\"@themeName\"] .md-accent-fg.md-hue-2 {\\n color: @accentHue2Color !important;\\n}\\n\\n/* Accent foreground, Hue-3 */\\n[md-theme=\"@themeName\"] .md-accent-fg.md-hue-3 {\\n color: @accentHue3Color !important;\\n}\\n\\n\\n/* Warn */\\n[md-theme=\"@themeName\"] .md-warn-bg {\\n background-color: @warnDefaultColor;\\n color: @warnDefaultContrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg .secondary-text,\\n[md-theme=\"@themeName\"] .md-warn-bg .icon {\\n color: @warnDefaultContrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg .hint-text,\\n[md-theme=\"@themeName\"] .md-warn-bg .disabled-text {\\n color: @warnDefaultContrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg .fade-text,\\n[md-theme=\"@themeName\"] .md-warn-bg .divider {\\n color: @warnDefaultContrast4;\\n}\\n\\n/* Warn, Hue-1 */\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 {\\n background-color: @warnHue1Color;\\n color: @warnHue1Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .secondary-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .icon {\\n color: @warnHue1Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .hint-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .disabled-text {\\n color: @warnHue1Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .fade-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .divider {\\n color: @warnHue1Contrast4;\\n}\\n\\n/* Warn, Hue-2 */\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 {\\n background-color: @warnHue2Color;\\n color: @warnHue2Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .secondary-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .icon {\\n color: @warnHue2Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .hint-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .disabled-text {\\n color: @warnHue2Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .fade-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .divider {\\n color: @warnHue2Contrast4;\\n}\\n\\n/* Warn, Hue-3 */\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 {\\n background-color: @warnHue3Color;\\n color: @warnHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .secondary-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .icon {\\n color: @warnHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .hint-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .disabled-text {\\n color: @warnHue3Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .fade-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .divider {\\n color: @warnHue3Contrast4;\\n}\\n\\n/* Warn foreground */\\n[md-theme=\"@themeName\"] .md-warn-fg {\\n color: @warnDefaultColor !important;\\n}\\n\\n/* Warn foreground, Hue-1 */\\n[md-theme=\"@themeName\"] .md-warn-fg.md-hue-1 {\\n color: @warnHue1Color !important;\\n}\\n\\n/* Warn foreground, Hue-2 */\\n[md-theme=\"@themeName\"] .md-warn-fg.md-hue-2 {\\n color: @warnHue2Color !important;\\n}\\n\\n/* Warn foreground, Hue-3 */\\n[md-theme=\"@themeName\"] .md-warn-fg.md-hue-3 {\\n color: @warnHue3Color !important;\\n}\\n\\n/* Background */\\n[md-theme=\"@themeName\"] .md-background-bg {\\n background-color: @backgroundDefaultColor;\\n color: @backgroundDefaultContrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg .secondary-text,\\n[md-theme=\"@themeName\"] .md-background-bg .icon {\\n color: @backgroundDefaultContrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg .hint-text,\\n[md-theme=\"@themeName\"] .md-background-bg .disabled-text {\\n color: @backgroundDefaultContrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg .fade-text,\\n[md-theme=\"@themeName\"] .md-background-bg .divider {\\n color: @backgroundDefaultContrast4;\\n}\\n\\n/* Background, Hue-1 */\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 {\\n background-color: @backgroundHue1Color;\\n color: @backgroundHue1Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .secondary-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .icon {\\n color: @backgroundHue1Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .hint-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .disabled-text {\\n color: @backgroundHue1Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .fade-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .divider {\\n color: @backgroundHue1Contrast4;\\n}\\n\\n/* Background, Hue-2 */\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 {\\n background-color: @backgroundHue2Color;\\n color: @backgroundHue2Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .secondary-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .icon {\\n color: @backgroundHue2Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .hint-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .disabled-text {\\n color: @backgroundHue2Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .fade-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .divider {\\n color: @backgroundHue2Contrast4;\\n}\\n\\n/* Background, Hue-3 */\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 {\\n background-color: @backgroundHue3Color;\\n color: @backgroundHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .secondary-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .icon {\\n color: @backgroundHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .hint-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .disabled-text {\\n color: @backgroundHue3Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .fade-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .divider {\\n color: @backgroundHue3Contrast4;\\n}\\n\\n/* Background foreground */\\n[md-theme=\"@themeName\"] .md-background-fg {\\n color: @backgroundDefaultColor !important;\\n}\\n\\n/* Background foreground, Hue-1 */\\n[md-theme=\"@themeName\"] .md-background-fg.md-hue-1 {\\n color: @backgroundHue1Color !important;\\n}\\n\\n/* Background foreground, Hue-2 */\\n[md-theme=\"@themeName\"] .md-background-fg.md-hue-2 {\\n color: @backgroundHue2Color !important;\\n}\\n\\n/* Background foreground, Hue-3 */\\n[md-theme=\"@themeName\"] .md-background-fg.md-hue-3 {\\n color: @backgroundHue3Color !important;\\n}';\n\n var regex = new RegExp(Object.keys(styleVars).join('|'), 'gi');\n var css = cssTemplate.replace(regex, function (matched)\n {\n return styleVars[matched];\n });\n\n var headEl = angular.element('head');\n var styleEl = angular.element('');\n styleEl.html(css);\n headEl.append(styleEl);\n }\n\n /**\n * Convert color array to rgb/rgba\n * Also apply contrasts if needed\n *\n * @param color\n * @param _contrastLevel\n * @returns {string}\n */\n function rgba(color, _contrastLevel)\n {\n var contrastLevel = _contrastLevel || false;\n\n // Convert 255,255,255,0.XX to 255,255,255\n // According to Google's Material design specs, white primary\n // text must have opacity of 1 and we will fix that here\n // because Angular Material doesn't care about that spec\n if ( color.length === 4 && color[0] === 255 && color[1] === 255 && color[2] === 255 )\n {\n color.splice(3, 4);\n }\n\n // If contrast level provided, apply it to the current color\n if ( contrastLevel )\n {\n color = applyContrast(color, contrastLevel);\n }\n\n // Convert color array to color string (rgb/rgba)\n if ( color.length === 3 )\n {\n return 'rgb(' + color.join(',') + ')';\n }\n else if ( color.length === 4 )\n {\n return 'rgba(' + color.join(',') + ')';\n }\n else\n {\n $log.error('Invalid number of arguments supplied in the color array: ' + color.length + '\\n' + 'The array must have 3 or 4 colors.');\n }\n }\n\n /**\n * Apply given contrast level to the given color\n *\n * @param color\n * @param contrastLevel\n */\n function applyContrast(color, contrastLevel)\n {\n var contrastLevels = {\n 'white': {\n '1': '1',\n '2': '0.7',\n '3': '0.3',\n '4': '0.12'\n },\n 'black': {\n '1': '0.87',\n '2': '0.54',\n '3': '0.26',\n '4': '0.12'\n }\n };\n\n // If white\n if ( color[0] === 255 && color[1] === 255 && color[2] === 255 )\n {\n color[3] = contrastLevels.white[contrastLevel];\n }\n // If black\n else if ( color[0] === 0 && color[1] === 0, color[2] === 0 )\n {\n color[3] = contrastLevels.black[contrastLevel];\n }\n\n return color;\n }\n\n /**\n * Uppercase first\n */\n function ucfirst(string)\n {\n return string.charAt(0).toUpperCase() + string.slice(1);\n }\n }\n\n})();\n\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .controller('MsThemeOptionsController', MsThemeOptionsController)\n .directive('msThemeOptions', msThemeOptions);\n\n /** @ngInject */\n function MsThemeOptionsController($cookies, fuseTheming)\n {\n var vm = this;\n\n // Data\n vm.themes = fuseTheming.themes;\n vm.layoutMode = 'wide';\n vm.layoutStyle = $cookies.get('layoutStyle') || 'verticalNavigation';\n\n // Methods\n vm.setActiveTheme = setActiveTheme;\n vm.updateLayoutMode = updateLayoutMode;\n vm.updateLayoutStyle = updateLayoutStyle;\n\n //////////\n\n /**\n * Set active theme\n *\n * @param themeName\n */\n function setActiveTheme(themeName)\n {\n // Set active theme\n fuseTheming.setActiveTheme(themeName);\n }\n\n /**\n * Update layout mode\n */\n function updateLayoutMode()\n {\n var bodyEl = angular.element('body');\n\n // Update class on body element\n bodyEl.toggleClass('boxed', (vm.layoutMode === 'boxed'));\n }\n\n /**\n * Update layout style\n */\n function updateLayoutStyle()\n {\n // Update the cookie\n $cookies.put('layoutStyle', vm.layoutStyle);\n\n // Reload the page to apply the changes\n location.reload();\n }\n }\n\n /** @ngInject */\n function msThemeOptions()\n {\n return {\n restrict : 'E',\n scope : {\n panelOpen: '=?'\n },\n controller : 'MsThemeOptionsController as vm',\n templateUrl: 'app/core/theme-options/theme-options.html',\n compile : function (tElement)\n {\n tElement.addClass('ms-theme-options');\n\n return function postLink(scope, iElement)\n {\n var bodyEl = angular.element('body'),\n backdropEl = angular.element('
');\n\n // Panel open status\n scope.panelOpen = scope.panelOpen || false;\n\n /**\n * Toggle options panel\n */\n function toggleOptionsPanel()\n {\n if ( scope.panelOpen )\n {\n closeOptionsPanel();\n }\n else\n {\n openOptionsPanel();\n }\n }\n\n function openOptionsPanel()\n {\n // Set panelOpen status\n scope.panelOpen = true;\n\n // Add open class\n iElement.addClass('open');\n\n // Append the backdrop\n bodyEl.append(backdropEl);\n\n // Register the event\n backdropEl.on('click touch', closeOptionsPanel);\n }\n\n /**\n * Close options panel\n */\n function closeOptionsPanel()\n {\n // Set panelOpen status\n scope.panelOpen = false;\n\n // Remove open class\n iElement.removeClass('open');\n\n // De-register the event\n backdropEl.off('click touch', closeOptionsPanel);\n\n // Remove the backdrop\n backdropEl.remove();\n }\n\n // Expose the toggle function\n scope.toggleOptionsPanel = toggleOptionsPanel;\n };\n }\n };\n }\n})();\n(function () {\n 'use strict';\n\n angular.module('app.exception', [])\n .config(['$httpProvider', function ($httpProvider) {\n $httpProvider.interceptors.push('httpInterceptors');\n }]);\n})();\n(function () {\n 'use strict';\n\n angular\n .module('app.exception')\n .factory('toastService', toastService);\n\n toastService.$inject = ['$document', '$http', '$mdToast'];\n\n function toastService($document, $http, $mdToast) {\n var service = {\n message: '',\n serverError: serverError\n };\n\n return service;\n\n function serverError(errorMessage) {\n //The toastController gets an instance of toastService, so the error message is exposed\n //via the message property and the controller provides it to the toast.html view\n this.message = errorMessage;\n var parent = $document[0].querySelector('#main');\n var toast = $mdToast.simple()\n .content(this.message)\n .action('OK')\n .highlightAction(true)\n .hideDelay(5000)\n .position('top right')\n .theme(\"error-toast\")\n .parent(parent);\n\n $mdToast.show(toast);\n\n //$mdToast.show({\n // controller: 'toastController',\n // controllerAs: 'vm',\n // templateUrl: 'views/toast.html',\n // hideDelay: 0,\n // position: 'bottom left'\n //});\n\n }\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .factory('msUtils', msUtils);\n\n /** @ngInject */\n function msUtils($window)\n {\n // Private variables\n var mobileDetect = new MobileDetect($window.navigator.userAgent),\n browserInfo = null;\n\n var service = {\n exists : exists,\n detectBrowser: detectBrowser,\n isMobile : isMobile,\n toggleInArray: toggleInArray\n };\n\n return service;\n\n //////////\n\n /**\n * Check if item exists in a list\n *\n * @param item\n * @param list\n * @returns {boolean}\n */\n function exists(item, list)\n {\n return list.indexOf(item) > -1;\n }\n\n /**\n * Returns browser information\n * from user agent data\n *\n * Found at http://www.quirksmode.org/js/detect.html\n * but modified and updated to fit for our needs\n */\n function detectBrowser()\n {\n // If we already tested, do not test again\n if ( browserInfo )\n {\n return browserInfo;\n }\n\n var browserData = [\n {\n string : $window.navigator.userAgent,\n subString : 'Edge',\n versionSearch: 'Edge',\n identity : 'Edge'\n },\n {\n string : $window.navigator.userAgent,\n subString: 'Chrome',\n identity : 'Chrome'\n },\n {\n string : $window.navigator.userAgent,\n subString : 'OmniWeb',\n versionSearch: 'OmniWeb/',\n identity : 'OmniWeb'\n },\n {\n string : $window.navigator.vendor,\n subString : 'Apple',\n versionSearch: 'Version',\n identity : 'Safari'\n },\n {\n prop : $window.opera,\n identity: 'Opera'\n },\n {\n string : $window.navigator.vendor,\n subString: 'iCab',\n identity : 'iCab'\n },\n {\n string : $window.navigator.vendor,\n subString: 'KDE',\n identity : 'Konqueror'\n },\n {\n string : $window.navigator.userAgent,\n subString: 'Firefox',\n identity : 'Firefox'\n },\n {\n string : $window.navigator.vendor,\n subString: 'Camino',\n identity : 'Camino'\n },\n {\n string : $window.navigator.userAgent,\n subString: 'Netscape',\n identity : 'Netscape'\n },\n {\n string : $window.navigator.userAgent,\n subString : 'MSIE',\n identity : 'Explorer',\n versionSearch: 'MSIE'\n },\n {\n string : $window.navigator.userAgent,\n subString : 'Trident/7',\n identity : 'Explorer',\n versionSearch: 'rv'\n },\n {\n string : $window.navigator.userAgent,\n subString : 'Gecko',\n identity : 'Mozilla',\n versionSearch: 'rv'\n },\n {\n string : $window.navigator.userAgent,\n subString : 'Mozilla',\n identity : 'Netscape',\n versionSearch: 'Mozilla'\n }\n ];\n\n var osData = [\n {\n string : $window.navigator.platform,\n subString: 'Win',\n identity : 'Windows'\n },\n {\n string : $window.navigator.platform,\n subString: 'Mac',\n identity : 'Mac'\n },\n {\n string : $window.navigator.platform,\n subString: 'Linux',\n identity : 'Linux'\n },\n {\n string : $window.navigator.platform,\n subString: 'iPhone',\n identity : 'iPhone'\n },\n {\n string : $window.navigator.platform,\n subString: 'iPod',\n identity : 'iPod'\n },\n {\n string : $window.navigator.platform,\n subString: 'iPad',\n identity : 'iPad'\n },\n {\n string : $window.navigator.platform,\n subString: 'Android',\n identity : 'Android'\n }\n ];\n\n var versionSearchString = '';\n\n function searchString(data)\n {\n for ( var i = 0; i < data.length; i++ )\n {\n var dataString = data[i].string;\n var dataProp = data[i].prop;\n\n versionSearchString = data[i].versionSearch || data[i].identity;\n\n if ( dataString )\n {\n if ( dataString.indexOf(data[i].subString) !== -1 )\n {\n return data[i].identity;\n\n }\n }\n else if ( dataProp )\n {\n return data[i].identity;\n }\n }\n }\n\n function searchVersion(dataString)\n {\n var index = dataString.indexOf(versionSearchString);\n\n if ( index === -1 )\n {\n return;\n }\n\n return parseInt(dataString.substring(index + versionSearchString.length + 1));\n }\n\n var browser = searchString(browserData) || 'unknown-browser';\n var version = searchVersion($window.navigator.userAgent) || searchVersion($window.navigator.appVersion) || 'unknown-version';\n var os = searchString(osData) || 'unknown-os';\n\n // Prepare and store the object\n browser = browser.toLowerCase();\n version = browser + '-' + version;\n os = os.toLowerCase();\n\n browserInfo = {\n browser: browser,\n version: version,\n os : os\n };\n\n return browserInfo;\n }\n\n /**\n * Return if current device is a\n * mobile device or not\n */\n function isMobile()\n {\n return mobileDetect.mobile();\n }\n\n /**\n * Toggle in array (push or splice)\n *\n * @param item\n * @param array\n */\n function toggleInArray(item, array)\n {\n if ( array.indexOf(item) === -1 )\n {\n array.push(item);\n }\n else\n {\n array.splice(array.indexOf(item), 1);\n }\n }\n }\n}());\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .provider('msApi', msApiProvider);\n\n /** @ngInject **/\n function msApiProvider()\n {\n /* ----------------- */\n /* Provider */\n /* ----------------- */\n var provider = this;\n\n // Inject required services\n var $log = angular.injector(['ng']).get('$log'),\n $resource = angular.injector(['ngResource']).get('$resource');\n\n // Data\n var baseUrl = '';\n var api = [];\n\n // Methods\n provider.setBaseUrl = setBaseUrl;\n provider.getBaseUrl = getBaseUrl;\n provider.getApiObject = getApiObject;\n provider.register = register;\n\n //////////\n\n /**\n * Set base url for API endpoints\n *\n * @param url {string}\n */\n function setBaseUrl(url)\n {\n baseUrl = url;\n }\n\n /**\n * Return the base url\n *\n * @returns {string}\n */\n function getBaseUrl()\n {\n return baseUrl;\n }\n\n /**\n * Return the api object\n *\n * @returns {object}\n */\n function getApiObject()\n {\n return api;\n }\n\n /**\n * Register API endpoint\n *\n * @param key\n * @param resource\n */\n function register(key, resource)\n {\n if ( !angular.isString(key) )\n {\n $log.error('\"path\" must be a string (eg. `dashboard.project`)');\n return;\n }\n\n if ( !angular.isArray(resource) )\n {\n $log.error('\"resource\" must be an array and it must follow $resource definition');\n return;\n }\n\n // Prepare the resource object\n var resourceObj = {\n url : baseUrl + (resource[0] || ''),\n paramDefaults: resource[1] || [],\n actions : resource[2] || [],\n options : resource[3] || {}\n };\n\n // Assign the resource\n api[key] = $resource(resourceObj.url, resourceObj.paramDefaults, resourceObj.actions, resourceObj.options);\n }\n\n /* ----------------- */\n /* Service */\n /* ----------------- */\n this.$get = function ($q, $log)\n {\n // Data\n\n // Methods\n var service = {\n setBaseUrl: setBaseUrl,\n getBaseUrl: getBaseUrl,\n register : register,\n resolve : resolve,\n request : request\n };\n\n return service;\n\n //////////\n\n /**\n * Resolve an API endpoint\n *\n * @param action {string}\n * @param parameters {object}\n * @returns {promise|boolean}\n */\n function resolve(action, parameters)\n {\n var actionParts = action.split('@'),\n resource = actionParts[0],\n method = actionParts[1],\n params = parameters || {};\n\n if ( !resource || !method )\n {\n $log.error('msApi.resolve requires correct action parameter (resourceName@methodName)');\n return false;\n }\n\n // Create a new deferred object\n var deferred = $q.defer();\n\n // Get the correct resource definition from api object\n var apiObject = api[resource];\n\n if ( !apiObject )\n {\n $log.error('Resource \"' + resource + '\" is not defined in the api service!');\n deferred.reject('Resource \"' + resource + '\" is not defined in the api service!');\n }\n else\n {\n apiObject[method](params,\n\n // Success\n function (response)\n {\n deferred.resolve(response);\n },\n\n // Error\n function (response)\n {\n deferred.reject(response);\n }\n );\n }\n\n // Return the promise\n return deferred.promise;\n }\n\n /**\n * Make a request to an API endpoint\n *\n * @param action {string}\n * @param [parameters] {object}\n * @param [success] {function}\n * @param [error] {function}\n *\n * @returns {promise|boolean}\n */\n function request(action, parameters, success, error)\n {\n var actionParts = action.split('@'),\n resource = actionParts[0],\n method = actionParts[1],\n params = parameters || {};\n\n if ( !resource || !method )\n {\n $log.error('msApi.resolve requires correct action parameter (resourceName@methodName)');\n return false;\n }\n\n // Create a new deferred object\n var deferred = $q.defer();\n\n // Get the correct resource definition from api object\n var apiObject = api[resource];\n\n if ( !apiObject )\n {\n $log.error('Resource \"' + resource + '\" is not defined in the api service!');\n deferred.reject('Resource \"' + resource + '\" is not defined in the api service!');\n }\n else\n {\n apiObject[method](params,\n\n // SUCCESS\n function (response)\n {\n // Resolve the promise\n deferred.resolve(response);\n\n // Call the success function if there is one\n if ( angular.isDefined(success) && angular.isFunction(success) )\n {\n success(response);\n }\n },\n\n // ERROR\n function (response)\n {\n // Reject the promise\n deferred.reject(response);\n\n // Call the error function if there is one\n if ( angular.isDefined(error) && angular.isFunction(error) )\n {\n error(response);\n }\n }\n );\n }\n\n // Return the promise\n return deferred.promise;\n }\n };\n }\n})();\n(function () {\n 'use strict';\n\n angular\n .module('app.exception')\n .factory('httpInterceptors', httpInterceptors);\n\n httpInterceptors.$inject = ['$rootScope', '$q', '$location', '$translate', '$window'];\n\n function httpInterceptors($rootScope, $q, $location, $translate, $window) {\n\n var service = {\n responseError: responseError\n };\n\n return service;\n\n function responseError(response) {\n var message = 'An unexpected error has occurred. Please try again.'\n switch (response.status) {\n //...can handle different error codes differently\n case -1:\n message = \"Connection refused. Please check service status.\";\n $rootScope.$broadcast('httpError', { message: message });\n break;\n case 401:\n message = \"Unauthenticated Access\";\n if (response) {\n console.log(response);\n }\n if ($window.location.pathname === \"/loginsaml\") {\n $rootScope.$broadcast('httpError', { message: $translate.instant('SHARED.LOGIN_FAIL') });\n break;\n }else if ($window.location.pathname === \"/login\") {\n $rootScope.$broadcast('httpError', { message: $translate.instant('SHARED.LOGIN_FAIL') });\n break;\n } else {\n $window.location.reload();\n break;\n }\n case 403:\n message = \"Unauthorized Access\";\n if (response) {\n console.log(response);\n }\n if ($window.location.pathname === \"/loginsaml\") {\n $rootScope.$broadcast('httpError', { message: $translate.instant('SHARED.LOGIN_UNAUTHORIZED') });\n break;\n }else if ($window.location.pathname === \"/login\") {\n $rootScope.$broadcast('httpError', { message: $translate.instant('SHARED.LOGIN_UNAUTHORIZED') });\n break;\n } else {\n $window.location.reload();\n break;\n }\n case 406:\n //$state.transitionTo('app.auth_login');\n message = \"Application expired\";\n $rootScope.$broadcast('httpError', { message: message });\n if ($window.location.pathname === \"/loginsaml\") {\n $rootScope.$broadcast('httpError', { message: message });\n break;\n } else if ($window.location.pathname === \"/login\") {\n $rootScope.$broadcast('httpError', { message: message });\n break;\n } else {\n $window.location.reload();\n break;\n }\n case 500:\n if (response.data) {\n if (response.data.errors) {\n message = '';\n angular.forEach(response.data.errors, function (error) {\n message += error+ '. ';\n });\n }\n console.log(response.data.message);\n }\n\n $rootScope.$broadcast('httpError', { message: message });\n\n break;\n }\n\n return $q.reject(response);\n }\n\n\n }\n})();\n\n'use strict';\n\n// From http://odetocode.com/blogs/scott/archive/2013/07/03/building-a-filereader-service-for-angularjs-the-service.aspx\n\nangular.module('filereader', [])\n .factory('FileReader', ['$q', '$window', function ($q, $window) {\n\n // Wrap the onLoad event in the promise\n var onLoad = function (reader, deferred, scope) {\n return function () {\n scope.$apply(function () {\n deferred.resolve(reader.result);\n });\n };\n };\n\n // Wrap the onLoad event in the promise\n var onError = function (reader, deferred, scope) {\n return function () {\n scope.$apply(function () {\n deferred.reject(reader.result);\n });\n };\n };\n\n // Wrap the onProgress event by broadcasting an event\n var onProgress = function (reader, scope) {\n return function (event) {\n scope.$broadcast('fileProgress', {\n total: event.total,\n loaded: event.loaded\n });\n };\n };\n\n // Instantiate a new Filereader with the wrapped properties\n var getReader = function (deferred, scope) {\n var reader = new $window.FileReader();\n reader.onload = onLoad(reader, deferred, scope);\n reader.onerror = onError(reader, deferred, scope);\n reader.onprogress = onProgress(reader, scope);\n return reader;\n };\n\n // Read a file as a data url\n var readAsDataURL = function (file, scope) {\n var deferred = $q.defer();\n\n var reader = getReader(deferred, scope);\n reader.readAsDataURL(file);\n\n return deferred.promise;\n };\n\n // Read a file as a text\n var readAsText = function (file, encoding, scope) {\n var deferred = $q.defer();\n\n var reader = getReader(deferred, scope);\n reader.readAsText(file, encoding);\n\n return deferred.promise;\n };\n\n // Read a file as a binary data\n var readAsBinaryString = function (file, scope) {\n var deferred = $q.defer();\n\n var reader = getReader(deferred, scope);\n reader.readAsBinaryString(file);\n\n return deferred.promise;\n };\n\n return {\n readAsDataURL: readAsDataURL,\n readAsBinaryString: readAsBinaryString,\n readAsText: readAsText\n };\n }]);\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .factory('apiResolver', apiResolverService);\n\n /** @ngInject */\n function apiResolverService($q, $log, api)\n {\n var service = {\n resolve: resolve\n };\n\n return service;\n\n //////////\n /**\n * Resolve api\n * @param action\n * @param parameters\n */\n function resolve(action, parameters)\n {\n var actionParts = action.split('@'),\n resource = actionParts[0],\n method = actionParts[1],\n params = parameters || {};\n\n if ( !resource || !method )\n {\n $log.error('apiResolver.resolve requires correct action parameter (ResourceName@methodName)');\n return false;\n }\n\n // Create a new deferred object\n var deferred = $q.defer();\n\n // Get the correct api object from api service\n var apiObject = getApiObject(resource);\n\n if ( !apiObject )\n {\n $log.error('Resource \"' + resource + '\" is not defined in the api service!');\n deferred.reject('Resource \"' + resource + '\" is not defined in the api service!');\n }\n else\n {\n apiObject[method](params,\n\n // Success\n function (response)\n {\n deferred.resolve(response);\n },\n\n // Error\n function (response)\n {\n deferred.reject(response);\n }\n );\n }\n\n // Return the promise\n return deferred.promise;\n }\n\n /**\n * Get correct api object\n *\n * @param resource\n * @returns {*}\n */\n function getApiObject(resource)\n {\n // Split the resource in case if we have a dot notated object\n var resourceParts = resource.split('.'),\n apiObject = api;\n\n // Loop through the resource parts and go all the way through\n // the api object and return the correct one\n for ( var l = 0; l < resourceParts.length; l++ )\n {\n if ( angular.isUndefined(apiObject[resourceParts[l]]) )\n {\n $log.error('Resource part \"' + resourceParts[l] + '\" is not defined!');\n apiObject = false;\n break;\n }\n\n apiObject = apiObject[resourceParts[l]];\n }\n\n if ( !apiObject )\n {\n return false;\n }\n\n return apiObject;\n }\n }\n\n})();\n//converts string to hyphenated lowercase\nangular.module(\"app.core\").filter('toFilename', function () {\n return function (str) {\n return escape(str)\n .toLowerCase()\n .replace(/ /g, '-')\n .replace(/[^w-]+/g, '');\n };\n});\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .filter('toTrusted', toTrustedFilter)\n .filter('htmlToPlaintext', htmlToPlainTextFilter)\n .filter('nospace', nospaceFilter)\n .filter('humanizeDoc', humanizeDocFilter);\n\n /** @ngInject */\n function toTrustedFilter($sce)\n {\n return function (value)\n {\n return $sce.trustAsHtml(value);\n };\n }\n\n /** @ngInject */\n function htmlToPlainTextFilter()\n {\n return function (text)\n {\n return String(text).replace(/<[^>]+>/gm, '');\n };\n }\n\n /** @ngInject */\n function nospaceFilter()\n {\n return function (value)\n {\n return (!value) ? '' : value.replace(/ /g, '');\n };\n }\n\n /** @ngInject */\n function humanizeDocFilter()\n {\n return function (doc)\n {\n if ( !doc )\n {\n return;\n }\n if ( doc.type === 'directive' )\n {\n return doc.name.replace(/([A-Z])/g, function ($1)\n {\n return '-' + $1.toLowerCase();\n });\n }\n return doc.label || doc.name;\n };\n }\n\n})();\n(function () {\n 'use strict';\n\n angular\n .module('app.core')\n .directive('uppercase', uppercase);\n\n uppercase.$inject = ['$window'];\n\n function uppercase($window) {\n // Usage:\n // \n // Creates:\n // \n var directive = {\n link: link,\n restrict: 'A',\n require: 'ngModel',\n };\n return directive;\n\n function link(scope, element, attrs, ctrl) {\n /*\n element.on('keypress', function (e) {\n var char = e.char || String.fromCharCode(e.charCode);\n if (!/^[A-Z0-9]$/i.test(char)) {\n e.preventDefault();\n return false;\n }\n });\n */\n\n String.prototype.turkishToUpper = function () {\n var string = this;\n var letters = { \"i\": \"İ\", \"ş\": \"Ş\", \"ğ\": \"Ğ\", \"ü\": \"Ü\", \"ö\": \"Ö\", \"ç\": \"Ç\", \"ı\": \"I\" };\n string = string.replace(/(([iışğüçö]))+/g, function (letter) { return letters[letter]; })\n return string.toUpperCase();\n }\n\n\n function parser(value) {\n if (ctrl.$isEmpty(value)) {\n return value;\n }\n var formatedValue = value.turkishToUpper();\n if (ctrl.$viewValue !== formatedValue) {\n ctrl.$setViewValue(formatedValue);\n ctrl.$render();\n }\n return formatedValue;\n }\n\n function formatter(value) {\n if (ctrl.$isEmpty(value)) {\n return value;\n }\n return value.turkishToUpper();\n }\n\n\n ctrl.$formatters.push(formatter);\n ctrl.$parsers.push(parser);\n }\n }\n\n})();\n(function() {\n 'use strict';\n\n angular\n .module('app.core')\n .directive('ngIfPermission', ngIfPermission);\n\n ngIfPermission.$inject = ['user'];\n\n function ngIfPermission(user) {\n var directive = {\n restrict: 'A',\n link: link\n };\n return directive;\n\n function link($scope, $element, $attr) {\n\n\n $attr.$observe('ngIfPermission', function(value) {\n if (!value) return;\n var allow = user.hasPermission(value);\n if (!allow) {\n $element.remove();\n }\n });\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.core')\n .directive('maxlength', maxlength);\n\n maxlength.$inject = ['$window'];\n \n function maxlength ($window) {\n var directive = {\n link: link,\n restrict: 'EA',\n scope: {\n length: '='\n }\n };\n return directive;\n\n function link(scope, element, attrs) {\n element.bind('keypress', function (e) {\n\n if (element[0].value.length > scope.length) {\n e.preventDefault();\n return false;\n }\n });\n }\n }\n})();\n(function () {\n 'use strict';\n\n angular\n .module('app.core')\n .directive('ngEnter', ngEnter);\n\n ngEnter.$inject = ['$window'];\n\n function ngEnter($window) {\n var directive = {\n link: link,\n restrict: 'EA'\n };\n return directive;\n\n function link(scope, element, attrs) {\n element.bind('keydown keypress', function (event) {\n if (event.which === 13) {\n scope.$apply(function () {\n scope.$eval(attrs.ngEnter);\n });\n\n event.preventDefault();\n }\n });\n }\n }\n})();\n\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .directive('hljs', hljsDirective);\n\n /** @ngInject */\n function hljsDirective($timeout, $q, $interpolate)\n {\n return {\n restrict: 'EA',\n compile : function (tElement, tAttrs)\n {\n var code;\n //No attribute? code is the content\n if ( !tAttrs.code )\n {\n code = tElement.html();\n tElement.empty();\n }\n\n return function (scope, iElement, iAttrs)\n {\n if ( iAttrs.code )\n {\n // Attribute? code is the evaluation\n code = scope.$eval(iAttrs.code);\n }\n var shouldInterpolate = scope.$eval(iAttrs.shouldInterpolate);\n\n $q.when(code).then(function (code)\n {\n if ( code )\n {\n if ( shouldInterpolate )\n {\n code = $interpolate(code)(scope);\n }\n\n var contentParent = angular.element(\n '
'\n );\n\n iElement.append(contentParent);\n\n // Defer highlighting 1-frame to prevent GA interference...\n $timeout(function ()\n {\n render(code, contentParent);\n }, 34, false);\n }\n });\n\n function render(contents, parent)\n {\n var codeElement = parent.find('code');\n var lines = contents.split('\\n');\n\n // Remove empty lines\n lines = lines.filter(function (line)\n {\n return line.trim().length;\n });\n\n // Make it so each line starts at 0 whitespace\n var firstLineWhitespace = lines[0].match(/^\\s*/)[0];\n var startingWhitespaceRegex = new RegExp('^' + firstLineWhitespace);\n\n lines = lines.map(function (line)\n {\n return line\n .replace(startingWhitespaceRegex, '')\n .replace(/\\s+$/, '');\n });\n\n var highlightedCode = hljs.highlight(iAttrs.language || iAttrs.lang, lines.join('\\n'), true);\n highlightedCode.value = highlightedCode.value\n .replace(/=\"\"<\\/span>/gi, '')\n .replace('', '')\n .replace('', '');\n codeElement.append(highlightedCode.value).addClass('highlight');\n }\n };\n }\n };\n }\n})();\nangular.module('app.core').directive('forceSelect', ['$mdUtil', forceSelect]);\n\nfunction forceSelect($mdUtil) {\n\n function postLink(scope, element, attrs, autoComplete) {\n function isSelected(item) {\n return autoComplete.matches.indexOf(item) !== -1;\n };\n\n $mdUtil.nextTick(function () {\n var ngModel = element.find('input').controller('ngModel');\n\n autoComplete.registerSelectedItemWatcher(function (selectedItem) {\n ngModel.$setValidity('forceSelect', isSelected(selectedItem));\n });\n\n ngModel.$viewChangeListeners.push(function () {\n $mdUtil.nextTick(function () {\n ngModel.$setValidity('forceSelect', isSelected(autoComplete.scope.selectedItem));\n });\n });\n });\n }\n\n return {\n link: postLink,\n require: 'mdAutocomplete',\n restrict: 'A'\n };\n}\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .provider('fuseConfig', fuseConfigProvider);\n\n /** @ngInject */\n function fuseConfigProvider()\n {\n // Default configuration\n var fuseConfiguration = {\n 'disableCustomScrollbars' : false,\n 'disableMdInkRippleOnMobile' : true,\n 'disableCustomScrollbarsOnMobile': true\n };\n\n // Methods\n this.config = config;\n\n //////////\n\n /**\n * Extend default configuration with the given one\n *\n * @param configuration\n */\n function config(configuration)\n {\n fuseConfiguration = angular.extend({}, fuseConfiguration, configuration);\n }\n\n /**\n * Service\n */\n this.$get = function ()\n {\n var service = {\n getConfig: getConfig,\n setConfig: setConfig\n };\n\n return service;\n\n //////////\n\n /**\n * Returns a config value\n */\n function getConfig(configName)\n {\n if ( angular.isUndefined(fuseConfiguration[configName]) )\n {\n return false;\n }\n\n return fuseConfiguration[configName];\n }\n\n /**\n * Creates or updates config object\n *\n * @param configName\n * @param configValue\n */\n function setConfig(configName, configValue)\n {\n fuseConfiguration[configName] = configValue;\n }\n };\n }\n\n})();\n(function() {\n 'use strict';\n\n angular\n .module('app.auth.register', [])\n .config(config);\n\n /** @ngInject */\n function config($stateProvider, $translatePartialLoaderProvider, msNavigationServiceProvider) {\n // State\n $stateProvider\n .state('app.auth_register', {\n url: '/register',\n views: {\n 'main@': {\n templateUrl: 'app/core/layouts/content-only.html',\n controller: 'MainController as vm'\n },\n 'content@app.auth_register': {\n templateUrl: 'app/auth/register/register.html',\n controller: 'RegisterController as vm'\n }\n },\n bodyClass: 'register'\n })\n .state('app.auth_completed', {\n url: '/completed',\n views: {\n 'main@': {\n templateUrl: 'app/core/layouts/content-only.html',\n controller: 'MainController as vm'\n },\n 'content@app.auth_completed': {\n templateUrl: 'app/auth/register/completed.html',\n controller: 'RegisterController as vm'\n }\n },\n bodyClass: 'completed'\n })\n .state('app.auth_confirmed', {\n url: '/confirmed',\n views: {\n 'main@': {\n templateUrl: 'app/core/layouts/content-only.html',\n controller: 'MainController as vm'\n },\n 'content@app.auth_confirmed': {\n templateUrl: 'app/auth/register/confirmed.html',\n controller: 'RegisterController as vm'\n }\n },\n bodyClass: 'confirmed'\n });\n\n // Translation\n //$translatePartialLoaderProvider.addPart('app/auth/register');\n }\n\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.auth.register')\n .controller('RegisterController', RegisterController);\n\n /** @ngInject */\n function RegisterController(api, $log, $state) {\n var vm = this;\n vm.form = {};\n vm.submitting = false;\n // Data\n\n // Methods\n vm.register = register;\n //////////\n\n function register() {\n vm.submitting = true;\n var user = {};\n user.name = vm.form.name;\n user.email = vm.form.email;\n user.password = vm.form.password;\n api.account.register(user)\n .then(function(response) {\n var result = response;\n $state.go(\"app.auth_completed\");\n },\n function(response) {\n $log.error(response);\n vm.submitting = false;\n });\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.auth.login', [])\n .config(config);\n\n /** @ngInject */\n function config($stateProvider, $translatePartialLoaderProvider, msNavigationServiceProvider) {\n // State\n $stateProvider\n .state('app.auth_login', {\n url: '/login?{returnUrl:any}',\n resolve: {\n $$uuidUser: function () {\n return null;\n }\n },\n views: {\n 'main@': {\n templateUrl: 'app/core/layouts/content-only.html',\n controller: 'MainController as vm'\n },\n 'content@app.auth_login': {\n templateUrl: 'app/auth/login/login3.html',\n controller: 'LoginController as vm'\n }\n },\n bodyClass: 'login'\n })\n .state('app.auth_saml', {\n url: '/loginsaml',\n views: {\n 'main@': {\n templateUrl: 'app/core/layouts/content-only.html',\n controller: 'MainController as vm'\n },\n 'content@app.auth_saml': {\n templateUrl: 'app/auth/login/login-saml.html',\n controller: 'LoginSamlController as vm'\n }\n },\n bodyClass: 'password'\n })\n .state('app.auth_forgot_password', {\n url: '/password',\n resolve: {\n $$uuidUser: function () {\n return null;\n }\n },\n views: {\n 'main@': {\n templateUrl: 'app/core/layouts/content-only.html',\n controller: 'MainController as vm'\n },\n 'content@app.auth_forgot_password': {\n templateUrl: 'app/auth/login/forgot-password2.html',\n controller: 'LoginController as vm'\n }\n },\n bodyClass: 'password'\n })\n .state('app.auth_forgot_password_info', {\n url: '/forgot-password-info',\n views: {\n 'main@': {\n templateUrl: 'app/core/layouts/content-only.html',\n controller: 'MainController as vm'\n },\n 'content@app.auth_forgot_password_info': {\n templateUrl: 'app/auth/login/forgot-password-info2.html',\n controller: 'LoginController as vm'\n }\n },\n bodyClass: 'forgot-password-info'\n })\n .state('app.auth_change_password', {\n url: '/change-password',\n views: {\n 'main@': {\n templateUrl: 'app/core/layouts/content-only.html',\n controller: 'MainController as vm'\n },\n 'content@app.auth_change_password': {\n templateUrl: 'app/auth/login/change-password.html',\n controller: 'LoginController as vm'\n }\n },\n bodyClass: 'change-password'\n })\n .state('app.auth_change_password_info', {\n url: '/change-password-info',\n views: {\n 'main@': {\n templateUrl: 'app/core/layouts/content-only.html',\n controller: 'MainController as vm'\n },\n 'content@app.auth_change_password_info': {\n templateUrl: 'app/auth/login/change-password-info.html',\n controller: 'LoginController as vm'\n }\n },\n bodyClass: 'change-password-info'\n })\n .state('app.auth_account_info', {\n url: '/account-info',\n views: {\n 'main@': {\n templateUrl: 'app/core/layouts/content-only.html',\n controller: 'MainController as vm'\n },\n 'content@app.auth_account_info': {\n templateUrl: 'app/auth/login/account-info.html',\n controller: 'LoginController as vm'\n }\n },\n bodyClass: 'account-info'\n })\n .state('app.renew_password', {\n url: '/resetpass',\n resolve: {\n $$uuidUser: function () {\n return null;\n }\n },\n views: {\n 'main@': {\n templateUrl: 'app/core/layouts/content-only.html',\n controller: 'MainController as vm'\n },\n 'content@app.renew_password': {\n templateUrl: 'app/auth/login/change-pass-6month.html',\n controller: 'LoginController as vm'\n }\n },\n bodyClass: 'password'\n })\n .state('app.reset_password', {\n url: '/resetpass/:id',\n resolve: {\n $$uuidUser: function ($stateParams, $state, api, $log) {\n return api.account.isPassChangeable($stateParams.id)\n .then(function (user) {\n if (!user) {\n $state.go(\"app.auth_login\");\n } else {\n return user;\n }\n },\n function (response) {\n $log.error(response);\n });\n }\n },\n views: {\n 'main@': {\n templateUrl: 'app/core/layouts/content-only.html',\n controller: 'MainController as vm'\n },\n 'content@app.reset_password': {\n templateUrl: 'app/auth/login/change-pass.html',\n controller: 'LoginController as vm'\n }\n },\n bodyClass: 'password'\n })\n .state('app.user_request', {\n url: '/user_request',\n resolve: {\n $$uuidUser: function () {\n return null;\n }\n },\n views: {\n 'main@': {\n templateUrl: 'app/core/layouts/content-only.html',\n controller: 'MainController as vm'\n },\n 'content@app.user_request': {\n templateUrl: 'app/auth/login/user_request.html',\n controller: 'LoginController as vm'\n }\n },\n bodyClass: 'user_request'\n })\n .state('app.user_request.register', {\n url: '/register',\n resolve: {\n $$uuidUser: function () {\n return null;\n }\n },\n views: {\n 'main@': {\n templateUrl: 'app/core/layouts/content-only.html',\n controller: 'MainController as vm'\n },\n 'content@app.user_request.register': {\n templateUrl: 'app/auth/login/user_register_request.html',\n controller: 'LoginController as vm'\n }\n },\n bodyClass: 'register'\n })\n /*\n .state('app.user_request.demo', {\n url: '/demo',\n resolve: {\n $$uuidUser: function () {\n return null;\n }\n },\n views: {\n 'main@': {\n templateUrl: 'app/core/layouts/content-only.html',\n controller: 'MainController as vm'\n },\n 'content@app.user_request.demo': {\n templateUrl: 'app/auth/login/user_demo_request.html',\n controller: 'LoginController as vm'\n }\n },\n bodyClass: 'demo'\n })*/\n .state('app.auth_error', {\n url: '/error',\n views: {\n 'main@': {\n templateUrl: 'app/core/layouts/content-only.html',\n controller: 'MainController as vm'\n },\n 'content@app.auth_error': {\n templateUrl: 'app/auth/login/error.html',\n controller: 'LoginErrorController as vm'\n }\n },\n bodyClass: 'password'\n });\n \n // Translation\n //$translatePartialLoaderProvider.addPart('app/auth/login');\n }\n\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.auth.login')\n .controller('LoginSamlController', LoginSamlController);\n\n /** @ngInject */\n function LoginSamlController(api, $log, $state, $window, $location, $rootScope, __env) {\n var vm = this;\n vm.logoPrefixCode = __env.logoPrefixCode;\n\n //api.saml.samlActive()\n // .then(function (r) {\n // if (r)\n // $window.location.href = 'web/auth/idp';\n // }, function (err) {\n // console.log(err);\n // })\n $window.location.href = 'web/auth/idp';\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.auth.login')\n .controller('LoginController', LoginController)\n .controller('BasicDialogController', BasicDialogController);\n\n /** @ngInject */\n function LoginController(api, $log, $state, $window, $location, $rootScope, toastService, $stateParams, $scope, $translate, $q, $mdMedia, $mdDialog, auth, __env, $mdToast, $$uuidUser, $interval) {\n var vm = this;\n\n /*api.saml.samlActive()\n .then(function (r) {\n if(r)\n $window.location.href = 'web/auth/idp';\n }, function (err) {\n console.log(err);\n })*/\n //$location.path('/web/auth/idp');\n vm.translate = $translate;\n \n vm.logoPrefixCode = __env.logoPrefixCode;\n vm.form = {};\n vm.rememberMe = false;\n vm.submitting = false;\n vm.loginProcessing = false;\n vm.uuidUsername = $$uuidUser ? $$uuidUser.userName : \"\";\n vm.changePassButtonText = $$uuidUser && $$uuidUser.passwordHash ? \"CHANGEPASS.CHANGE_PASSWORD\" : \"SHARED.SAVE\";\n vm.isUserRegisterRequestActive = false;\n vm.demoFormUrl = null;\n vm.isEmailActive = false;\n vm.webConfiguration = {};\n vm.invalidConnectionCount = 0;\n\n\n vm.analysisDocuments = [\"CALL_CENTER_VOICE\", \"VOICE_OF_CUSTOMER\", \"TWITTER_BLOG_FORUM\", \"REAL_WORLD_DATA\", \"SURVEY_DATA\", \"CHATBOT_DATA\", \"EMAIL_DATA\", \"IN_COMPANY_DOCUMENT\",\"OTHER\"];\n vm.selectedAnalysisDocuments = [];\n\n vm.reasons = [\"ARTIFICIAL_INTELLIGENCE\", \"NLP\", \"BIG_DATA\", \"CLOUD\", \"REAL_TIME_DATA_ANALYSIS\", \"SENTIMENT_ANALYSIS\", \"CATEGORIZATION\", \"OTHER\"];\n vm.selectedReasons = [];\n\n vm.show2FA = false;\n\n vm.toggle = function (item, list) {\n var idx = list.indexOf(item);\n if (idx > -1) {\n list.splice(idx, 1);\n }\n else {\n list.push(item);\n }\n };\n\n vm.exists = function (item, list) {\n return list.indexOf(item) > -1;\n };\n\n\n vm.types = [{\n \"name\": \"REGISTER_REQUEST\",\n \"icon\": \"icon-account-plus\",\n \"type\": \"file\",\n \"color\": \"#1D7044\",\n \"active\": true\n },\n {\n \"name\": \"DEMO_REQUEST\",\n \"icon\": \"icon-account-box-outline\",\n \"type\": \"web\",\n \"color\": \"#039be5\",\n \"active\": false\n }\n ];\n\n vm.showRegisterScreen = function (type) {\n switch (type.name) {\n case \"REGISTER_REQUEST\":\n $state.go('app.user_request.register');\n break;\n case \"DEMO_REQUEST\":\n //$state.go('app.user_request.demo');\n window.location.href = vm.demoFormUrl;\n break;\n default:\n }\n }\n\n //vm.bottomLogo1 = false;\n //vm.bottomLogo2 = false;\n //imageExists(\"assets/images/logos/login-bottom-logo-first.png\", function (r) { vm.bottomLogo1 = r });\n //imageExists(\"assets/images/logos/login-bottom-logo-second.png\", function (r) { vm.bottomLogo2 = r });\n // Data\n if ($rootScope.isExpired) {\n toastService.serverError(\"Application Expired\");\n }\n // Methods\n vm.login = login;\n vm.forgotPassword = forgotPassword;\n vm.changePassword = changePassword;\n //vm.loginGitHub = loginGitHub;\n //vm.loginGoogle = loginGoogle;\n vm.requestDemo = requestDemo;\n vm.oldPassword = null;\n vm.newPassword = null;\n vm.newPasswordConfirm = null;\n //////////\n vm.saveUserRegisterRequestProcessing = false;\n vm.userRegisterRequest = {};\n vm.userRegisterRequestOther = \"\";\n vm.saveUserRegisterRequest = saveUserRegisterRequest;\n //////////\n vm.userDemoRequest = {};\n vm.analysisDocumentOther = \"\";\n vm.reasonsOther = \"\";\n vm.saveUserDemoRequest = saveUserDemoRequest;\n vm.countDown = \"\";\n vm.startCountDown = startCountDown;\n \n //////////\n function login() {\n vm.loginProcessing = true;\n var data = {};\n data.username = vm.form.email;\n data.email = vm.form.email;\n data.password = vm.form.password;\n data.rememberMe = vm.rememberMe;\n data.captcha = vm.form.captcha;\n data.twoFA = vm.form.twoFA;\n api.account.loginV2(data)\n .then(function (response) {\n var show2FA = false;\n if (response.statusCode == 200) {\n if(response.message === \"TwoFARequired\") {\n startCountDown();\n show2FA = true;\n vm.loginProcessing = false;\n vm.form.twoFA = \"\";\n }else {\n show2FA = false;\n var homePath = \"/\";\n var returnUrl = homePath;\n if ($location.search().returnUrl)\n returnUrl = decodeURIComponent($location.search().returnUrl);\n $window.location.href = (returnUrl.startsWith(homePath) ? \"\" : homePath) + returnUrl;\n }\n } else if (response.statusCode == 401) {\n if (response.message.includes(\"2FAIncorrect\")) {\n show2FA = true;\n vm.form.twoFA = \"\";\n toastService.serverError($translate.instant('SHARED.LOGIN_2FAINCORRECT'));\n } else if (response.message.includes(\"2FAExpired\")) {\n show2FA = false;\n vm.form.twoFA = \"\";\n toastService.serverError($translate.instant('SHARED.LOGIN_2FAEXPIRED'));\n }\n else if (response.message && response.message.includes(\"Username \" + data.username + \" is disabled\"))\n toastService.serverError($translate.instant('SHARED.USER_DISABLED'));\n else\n toastService.serverError($translate.instant('SHARED.LOGIN_FAIL'));\n } else if (response.statusCode == 402) {\n toastService.serverError($translate.instant('SHARED.LOGIN_UNAUTHORIZED'));\n }\n vm.show2FA = show2FA;\n if (response.statusCode != 200) {\n vm.getInvalidConnectionCount();\n vm.getCaptcha();\n vm.form.captcha = \"\"\n vm.loginProcessing = false;\n }\n },\n function (response) {\n vm.loginProcessing = false;\n vm.getCaptcha();\n vm.getInvalidConnectionCount();\n if (response.status == 402)\n toastService.serverError(response.message);\n else\n $log.error(response.message);\n });\n }\n\n vm.kvkk = function ($event) {\n if ($translate.use() == \"tr\") {\n showSuccessDialog($scope, $event, $translate.instant('REGISTER.DEMO_FORM.KVKK_TEXT_TITLE'), \"\", \"app/auth/login/kvkk_tr.html\")\n } else {\n showSuccessDialog($scope, $event, $translate.instant('REGISTER.DEMO_FORM.KVKK_TEXT_TITLE'), \"\", \"app/auth/login/kvkk_tr.html\")\n }\n \n }\n\n function saveUserRegisterRequest($event) {\n if (!vm.userRegisterRequest.kvkk) showSuccessDialog($scope, $event, $translate.instant('REGISTER.DEMO_FORM.QUESTION_ERROR_MESSAGES.KVKK'), $translate.instant('REGISTER.DEMO_FORM.QUESTION_ERROR_MESSAGES.KVKKBODY'));\n if (!vm.userRegisterRequest.userType || !vm.userRegisterRequest.userName || !vm.userRegisterRequest.name || !vm.userRegisterRequest.email || !vm.userRegisterRequest.authority || !vm.userRegisterRequest.kvkk) return;\n vm.saveUserRegisterRequestProcessing = true;\n if (vm.userRegisterRequest.authority == \"OTHER\") vm.userRegisterRequest.authority = vm.userRegisterRequestOther;\n api.account.saveUserRegisterForm(vm.userRegisterRequest)\n .then(function (response) {\n if (response.statusCode == 200) {\n showSuccessDialog($scope, $event, $translate.instant('MANAGEMENT.USER.CONFIRM.CREATE_USER_REQUEST_TITLE'), $translate.instant('MANAGEMENT.USER.CONFIRM.CREATE_USER_REQUEST_BODY'))\n .then(function () {\n $window.location.href = \"/\";\n })\n vm.saveUserRegisterRequestProcessing = false;\n } else if (response.statusCode == 300) {\n vm.getNewCaptcha();\n vm.userRegisterRequest.captcha = \"\";\n vm.saveUserRegisterRequestProcessing = false;\n } else {\n console.log(response);\n }\n },\n function (response) {\n vm.saveUserRegisterRequestProcessing = false;\n $log.error(response.message);\n });\n }\n\n\n\n function startCountDown() {\n vm.countDown = 60;\n var countDownTimer = $interval(function() {\n vm.countDown--;\n \n if(vm.countDown === 0) {\n $interval.cancel(countDownTimer);\n vm.countDown = \"\";\n vm.show2FA = false;\n vm.form.twoFA = \"\";\n }\n },1000);\n }\n\n function saveUserDemoRequest($event) {\n if (!vm.userDemoRequest.kvkk) showSuccessDialog($scope, $event, $translate.instant('REGISTER.DEMO_FORM.QUESTION_ERROR_MESSAGES.KVKK'), $translate.instant('REGISTER.DEMO_FORM.QUESTION_ERROR_MESSAGES.KVKKBODY'));\n if (!vm.userDemoRequest.name || !vm.userDemoRequest.email || !vm.userDemoRequest.company || !vm.userDemoRequest.position || !vm.userDemoRequest.phone || vm.selectedAnalysisDocuments.length == 0 || vm.selectedReasons.length == 0 || !vm.userDemoRequest.kvkk) return;\n vm.saveUserRegisterRequestProcessing = true;\n vm.selectedAnalysisDocuments.forEach(function (item, i) { if (item == 'OTHER') vm.selectedAnalysisDocuments[i] = vm.analysisDocumentOther; });\n vm.selectedReasons.forEach(function (item, i) { if (item == 'OTHER') vm.selectedReasons[i] = vm.reasonsOther; });\n vm.userDemoRequest.analysisdocument = vm.selectedAnalysisDocuments;\n vm.userDemoRequest.reason = vm.selectedReasons;\n api.account.saveDemoForm(vm.userDemoRequest)\n .then(function (response) {\n if (response.statusCode == 200) {\n showSuccessDialog($scope, $event, $translate.instant('MANAGEMENT.USER.CONFIRM.DEMO_USER_REQUEST_TITLE'), $translate.instant('MANAGEMENT.USER.CONFIRM.DEMO_USER_REQUEST_BODY'))\n .then(function () {\n //$window.location.href = \"/\";\n window.location.href = \"https://www.artiwise.com\";\n })\n vm.saveUserRegisterRequestProcessing = false;\n } else if (response.statusCode == 300) {\n vm.getNewCaptcha();\n vm.userDemoRequest.captcha = \"\"\n vm.saveUserRegisterRequestProcessing = false;\n vm.selectedAnalysisDocuments.forEach(function (item, i) { if (!vm.analysisDocuments.includes(item)) vm.selectedAnalysisDocuments.splice(i, 1); });\n vm.selectedReasons.forEach(function (item, i) { if (!vm.reasons.includes(item)) vm.selectedReasons.splice(i, 1); });\n vm.selectedAnalysisDocuments.push(\"OTHER\");\n vm.selectedReasons.push(\"OTHER\");\n } else {\n console.log(response);\n }\n },\n function (response) {\n vm.saveUserRegisterRequestProcessing = false;\n $log.error(response.message);\n });\n }\n\n function requestDemo() {\n var url = \"http://artiwise.com/bulut-hizmeti-talep-formu\";\n $log.log(url);\n $window.location.href = url;\n }\n\n function forgotPassword() {\n vm.submitting = true;\n var data = {};\n data.email = vm.form.email;\n\n api.account.forgotPassword(data)\n .then(function(response) {\n var result = response;\n $state.go(\"app.auth_forgot_password_info\");\n },\n function(response) {\n $log.error(response);\n vm.submitting = false;\n });\n }\n\n function changePassword() {\n var data = {};\n data.password = vm.form.password;\n data.email = $location.search().email;\n data.token = $location.search().token;\n data.token = data.token.replace(/\\%20/g, \"+\");\n\n api.account.changePassword(data)\n .then(function(response) {\n var result = response;\n $state.go(\"app.auth_change_password_info\");\n },\n function(response) {\n $log.error(response);\n });\n }\n\n vm.getCaptcha = function () {\n api.captcha.getCaptcha()\n .then(function (response) {\n $(\"#captcha\").attr('src', 'data:image/png;base64,' + response);\n },\n function (response) {\n });\n }\n\n vm.getNewCaptcha = function () {\n api.captcha.getNewCaptcha()\n .then(function (response) {\n $(\"#captcha\").attr('src', 'data:image/png;base64,' + response);\n },\n function (response) {\n });\n }\n\n vm.getInvalidConnectionCount = function () {\n api.captcha.getInvalidConnectionCount()\n .then(function (response) {\n vm.invalidConnectionCount = response;\n if (response >= 3) vm.getCaptcha();\n },\n function (response) {\n });\n }\n\n vm.forgetPass = function () {\n $state.go(\"app.auth_forgot_password\");\n }\n\n vm.openUserRegisterRequestPage = function () {\n $state.go(\"app.user_request\");\n }\n\n vm.isUserRegisterRequestActive = function () {\n api.webConfiguration.isUserRegisterRequestFormActive()\n .then(function (response) {\n vm.isUserRegisterRequestFormActive = response;\n },\n function (response) {\n $log.error(response);\n });\n }\n\n vm.setLoginDefaults = function () {\n vm.loginSettings = {\n backgroundImage: 'n_7580.png',\n theme: 'analytic2'\n }\n }\n\n vm.getLoginSettings = function () {\n api.webConfiguration.getLoginSettings()\n .then(function (response) {\n console.log('getLoginSettings');\n if(response) {\n vm.loginSettings = response;\n if(!response.theme) {\n vm.setLoginDefaults();\n }\n }\n else {\n vm.setLoginDefaults();\n }\n },function (response) {\n //set default values\n vm.setLoginDefaults();\n $log.error(response);\n });\n }\n\n vm.getDemoFormUrl = function () {\n api.webConfiguration.getDemoFormUrl()\n .then(function (response) {\n vm.demoFormUrl = response;\n if (response) vm.types[1].active = true;\n },\n function (response) {\n $log.error(response);\n });\n }\n\n vm.isMailActive = function () {\n api.webConfiguration.isMailActive()\n .then(function (response) {\n vm.isEmailActive = response;\n },\n function (response) {\n $log.error(response);\n });\n }\n\n vm.getWebConfigurations = function () {\n api.webConfiguration.webconfigurations()\n .then(function (response) {\n vm.webConfiguration = response;\n if (response && response.rememberUsername) {\n $(\"#email\").removeAttr('readonly');\n $(\"#email\").removeAttr('autocomplete');\n $(\"#email\").removeAttr('onfocus');\n \n $(\"#password\").removeAttr('readonly');\n $(\"#password\").removeAttr('autocomplete');\n $(\"#password\").removeAttr('onfocus');\n\n $(\"#form\").removeAttr('autocomplete');\n }\n },\n function (response) {\n $log.error(response);\n });\n }\n\n vm.resetPassword = function ($event) {\n vm.submitting = true;\n api.account.resetPassword(vm.form.username)\n .then(function (response) {\n var result = response;\n vm.submitting = false;\n showSuccessDialog($scope, $event, $translate.instant('MANAGEMENT.USER.CONFIRM.PASS_RESET_TITLE'), $translate.instant('MANAGEMENT.USER.CONFIRM.PASS_RESET_BODY'))\n .then(function () {\n //$state.go(\"app.auth_login\");\n $window.location.href = \"/\";\n })\n //$state.go(\"app.auth_change_password_info\");\n },\n function (response) {\n vm.submitting = false;\n $log.error(response);\n });\n }\n\n vm.changePasswordUuid = function () {\n var data = {};\n data.password = vm.newPassword;\n data.newPasswordConfirm = vm.newPasswordConfirm;\n data.resetPassUuid = $stateParams.id;\n vm.submitting = true;\n api.account.changePasswordUuid(data)\n .then(function (response) {\n $state.go(\"app.auth_login\");\n vm.submitting = false;\n },\n function (response) {\n $log.error(response);\n vm.submitting = false;\n });\n }\n\n vm.changePass = function ($event) {\n vm.submitting = true;\n var data = {};\n data.newPassword = vm.newPassword;\n data.newPasswordConfirm = vm.newPasswordConfirm;\n data.oldPassword = vm.oldPassword;\n api.account.changePass(data)\n .then(function (response) {\n showSuccessDialog($scope, $event, $translate.instant('CHANGEPASS.CHANGE_PASSWORD'), $translate.instant('CHANGEPASS.CHANGED'))\n .then(function () {\n $state.go('app.modules.list');\n });\n },\n function (response) {\n $log.error(response);\n vm.submitting = false;\n });\n \n \n };\n\n function showSuccessDialog($scope, $event, title, body, html) {\n var deferred = $q.defer();\n var useFullScreen = $scope.customFullscreen;\n //($mdMedia('sm') || $mdMedia('xs')) &&\n var htmlUrl = html ? html : 'app/main/apps/modules/services/basic-success-dialog.html';\n $mdDialog.show({\n controller: 'BasicDialogController as vm',\n templateUrl: htmlUrl,\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n fullscreen: useFullScreen,\n locals: {\n title: title,\n body: body,\n state: $state\n }\n })\n .then(function (answer) {\n deferred.resolve();\n }, function (answer) {\n deferred.resolve();\n });\n /*\n $scope.$watch(function () {\n return $mdMedia('xs') || $mdMedia('sm');\n }, function (wantsFullScreen) {\n $scope.customFullscreen = (wantsFullScreen === true);\n });*/\n return deferred.promise;\n };\n\n function init() {\n vm.getWebConfigurations();\n vm.getLoginSettings();\n vm.isUserRegisterRequestActive();\n vm.getDemoFormUrl();\n vm.isMailActive();\n vm.getInvalidConnectionCount();\n vm.getNewCaptcha();\n }\n init();\n \n }\n\n function BasicDialogController($mdDialog, title, body, $state) {\n var vm = this;\n vm.title = title;\n vm.body = body;\n\n vm.cancel = function () {\n $mdDialog.cancel();\n };\n vm.ok = function () {\n $mdDialog.hide(true);\n };\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.auth.login')\n .controller('LoginErrorController', LoginErrorController);\n\n /** @ngInject */\n function LoginErrorController(api, $log, $state, $window, $location, $rootScope, __env) {\n var vm = this;\n vm.logoPrefixCode = __env.logoPrefixCode;\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.toolbar')\n .controller('ToolbarController', ToolbarController)\n .filter('allTranslate', allTranslate);\n\n /** @ngInject */\n function ToolbarController($rootScope, $cookies, $mdSidenav, $translate, $mdToast, $window, user, $state, api, ToolbarService, $scope, $interval, $location, base64, __env, $settings, $utils, appSettings, $integration, $log) {\n var vm = this;\n vm.integration = $integration;\n vm.logoPrefixCode = __env.logoPrefixCode;\n vm.logoHeight = __env.logoHeight;\n vm.workspaceLogo = null;\n vm.notifications = [];\n vm.allNotifications = [];\n vm.updateLastSeenNotification = updateLastSeenNotification;\n vm.notificationCount = 0;\n vm.openNotification = openNotification;\n vm.notificationShowing = false;\n vm.showed = false;\n vm.user = user;\n vm.workspaceLogos = appSettings.workspaceLogos;\n vm.isUserRestricted = vm.user.restricted;\n \n //var deneme = JSON.stringify([{ 'id': 'kkg', 'matrixXfield': 'genel_deneyim_s', 'matrixYfield': 'bayi_ekibine_guven_s', 'rootfacet': null, 'afterDate': { 'startDate': '2018-03-31T21:00:00Z', 'endDate': '2018-06-30T20:59:59Z' }, 'beforeDate': null, 'template': null, 'defaultDateUpdated': false, 'temporalCategoryChartState': [false, true, true, true, false, false, true, true, false, false, false, false, false, false, false, false, false, false] }]);\n //$cookies.put(\"reports\", deneme);\n //$cookies.put(\"lastworkspaceid\",\"nkD\")\n\n\n function updateLastSeenNotification() {\n api.toolbar.updateLastSeenNotification()\n .then(function (response) {\n if (vm.showed) {\n getNotifications();\n vm.showed = false;\n }\n }, function (err) {\n console.log(err);\n });\n }\n\n var checkNotification = $interval(function () {\n getNotifications();\n }, 20000);\n\n function getNotifications() {\n if (vm.notificationShowing){\n return;\n }\n api.toolbar.findNotifications()\n .then(function (response) {\n vm.notifications = [];\n vm.allNotifications = response;\n calculateNoticationCount();\n prepareNotifications();\n }, function (response) {\n console.log(response);\n });\n }\n\n api.saml.samlActive()\n .then(function (r) {\n vm.samlActive = r;\n }, function (err) {\n console.log(err);\n })\n\n function openNotification(item) {\n if ((item.groupId >= 1 && item.groupId <= 6) || (item.groupId >= 10 && item.groupId <= 12)) {\n api.module.get(item.moduleId)\n .then(function (response) {\n $state.go('app.module.overview', {\n id: item.moduleId\n });\n }, function (err) {\n console.log('module deleted')\n });\n } else if (item.groupId == 0 || item.groupId == 16 || item.groupId == 17) {\n\n var params = {\n row: 10,\n start: 0,\n filter: [],\n category: [],\n facet: [],\n sort: \"updatedate_dt desc\"\n };\n if (item.groupId == 0) {\n params.feedback = null;\n params.assignment = \"to\";\n }\n if (item.groupId == 17) {\n params.feedback = null;\n params.assignment = \"by\";\n }\n if (item.groupId == 16) {\n params.feedback = null;\n var uniqueIds = [];\n item.reportDocumentIds.forEach(function (k) {\n if (!uniqueIds.includes(k)) uniqueIds.push(k);\n })\n var query = \"\";\n for (var i = 0; i < uniqueIds.length; i++) {\n if (i == uniqueIds.length - 1 || i == 4) {\n query += \"id:\\\"\" + uniqueIds[i] + \"\\\"\";\n break;\n } else {\n query += \"id:\\\"\" + uniqueIds[i] + \"\\\" OR \";\n }\n }\n params.query = query;\n }\n\n //$location.search('query', encodedFilters);\n api.report.findReport(item.moduleId)\n .then(function (response) {\n var encodedFilters = base64.encode(JSON.stringify(params));\n $state.go('app.report.data', {\n id: item.moduleId,\n query: encodedFilters\n //view:\"assignNotification\",\n //documentIds:(item.reportDocumentIds!=null&&item.reportDocumentIds.length>0)?item.reportDocumentIds:null\n }, { reload: true });\n //$location.path('/report/'+item.moduleId+'/data').search({feedback: 'true', assignTo:'true'}); \n }, function (err) {\n console.log('report deleted')\n });\n }else if (item.type == 18) {\n api.report.findReport(item.moduleId)\n .then(function (response) {\n $state.go('app.report.datasummary', {\n id: item.moduleId\n });\n }, function (err) {\n console.log('report deleted')\n });\n }\n }\n\n function prepareNotifications() {\n vm.notifications = [];\n if (vm.allNotifications.length == 0) {\n var noNotification = { new: false, message: $translate.instant(\"NOTIFICATION.NONE\") };\n //true ?\n vm.notifications.push(noNotification);\n }\n vm.allNotifications.forEach(function (n) {\n var createNotification = { new: false, message: \"\" };\n createNotification.date = moment(n.createDate).format('DD.MM.YYYY');\n createNotification.time = moment(n.createDate).format('HH:mm');\n createNotification.groupId = n.groupId;\n createNotification.new = n.new;\n if (n.groupId == 0 || n.groupId == 16 || n.groupId == 17) {\n createNotification.message = $translate.instant(\"NOTIFICATION.\" + n.groupId, { report: n.moduleName, count: n.count });\n } else if (1 <= n.groupId && n.groupId <= 6) {\n createNotification.message = $translate.instant(\"NOTIFICATION.\" + n.groupId, { module: n.moduleName });\n } else if (7 <= n.groupId && n.groupId <= 9) {\n createNotification.message = $translate.instant(\"NOTIFICATION.\" + n.groupId, { report: n.moduleName });\n } else if (10 <= n.groupId && n.groupId <= 12) {\n createNotification.message = $translate.instant(\"NOTIFICATION.\" + n.groupId, { module: n.moduleName });\n } else if (13 <= n.groupId && n.groupId <= 14) {\n createNotification.message = $translate.instant(\"NOTIFICATION.\" + n.groupId, { report: n.moduleName });\n } else if (n.groupId == 15) {\n var error = n.message.split(\"->\")[1];\n createNotification.message = $translate.instant(\"NOTIFICATION.\" + n.groupId, { report: n.moduleName, error: error });\n } else if (n.groupId == 18) {\n createNotification.message = $translate.instant(\"NOTIFICATION.\" + n.groupId, { report: n.moduleName });\n } else if (19 <= n.groupId && n.groupId <= 21) {\n createNotification.message = $translate.instant(\"NOTIFICATION.\" + n.groupId, { report: n.moduleName });\n } else if (n.groupId == 22) {\n var count = n.message.split(\" \")[0];\n createNotification.message = $translate.instant(\"NOTIFICATION.\" + n.groupId, { report: n.moduleName, count: count });\n }\n createNotification.type = n.moduleType;\n if (n.groupId == 18) createNotification.type = 18;\n createNotification.moduleId = n.moduleId;\n if (n.reportDocumentIds && n.reportDocumentIds.length > 0) {\n createNotification.reportDocumentIds = n.reportDocumentIds;\n }\n n.message = createNotification.message;\n vm.notifications.push(createNotification);\n });\n }\n\n function calculateNoticationCount() {\n var newNotifications = vm.allNotifications.filter(function (n) {\n return n.new;\n });\n if (newNotifications && newNotifications.length > 0) {\n var count = 0;\n for (var i = 0; i < newNotifications.length; i++) {\n count = count + newNotifications[i].count;\n }\n vm.notificationCount = count;\n } else {\n vm.notificationCount = 0;\n }\n }\n\n $scope.$on('$mdMenuClose', function (event, el) {\n if (el[0].id === \"notification\") {\n vm.showed = true;\n vm.notificationCount = 0;\n updateLastSeenNotification();\n vm.notificationShowing = false;\n }\n });\n $scope.$on('$mdMenuOpen', function (event, el) {\n if (el[0].id === \"notification\") {\n vm.notificationShowing = true;\n vm.notificationCount = 0;\n };\n });\n \n vm.logoClick = function(){\n if(!vm.selectedWorkspace){\n vm.selectedWorkspace = {'name':'All'};\n }\n };\n\n $scope.$on('$destroy', function () {\n if (angular.isDefined(checkNotification)) {\n $interval.cancel(checkNotification);\n }\n });\n\n $rootScope.$on('$translateChangeSuccess', function (event, current, previous) {\n // Language has changed\n prepareNotifications();\n });\n\n $scope.$watch(function () {\n return user.workspaces;\n }, function () {\n //user.workspaces = user.workspaces;\n if ($rootScope.selectedWorkspaceId) {\n var workspaceId = $rootScope.selectedWorkspaceId;\n vm.selectedWorkspace = user.workspaces.find(function (w) {\n return w.id === workspaceId\n })\n user.selectedWorkspace = vm.selectedWorkspace;\n $rootScope.selectedWorkspace = vm.selectedWorkspace;\n }\n }, true);\n\n $scope.$watch(function () {\n return $rootScope.selectedWorkspaceId;\n }, function () {\n if ($rootScope.selectedWorkspaceId) {\n var workspaceId = $rootScope.selectedWorkspaceId;\n vm.selectedWorkspace = user.workspaces.find(function (w) {\n return w.id === workspaceId\n })\n user.selectedWorkspace = vm.selectedWorkspace;\n $rootScope.selectedWorkspace = vm.selectedWorkspace;\n }\n }, true);\n\n vm.user = user;\n\n function dynamicSort(property) {\n var sortOrder = 1;\n if(property[0] === \"-\") {\n sortOrder = -1;\n property = property.substr(1);\n }\n return function (a,b) {\n var result = (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0;\n return result * sortOrder;\n }\n }\n\n // Data\n $rootScope.global = {\n search: ''\n };\n\n vm.bodyEl = angular.element('body');\n vm.userStatusOptions = [{\n 'title': 'Online',\n 'icon': 'icon-checkbox-marked-circle',\n 'color': '#4CAF50'\n },\n {\n 'title': 'Away',\n 'icon': 'icon-clock',\n 'color': '#FFC107'\n },\n {\n 'title': 'Do not Disturb',\n 'icon': 'icon-minus-circle',\n 'color': '#F44336'\n },\n {\n 'title': 'Invisible',\n 'icon': 'icon-checkbox-blank-circle-outline',\n 'color': '#BDBDBD'\n },\n {\n 'title': 'Offline',\n 'icon': 'icon-checkbox-blank-circle-outline',\n 'color': '#616161'\n }\n ];\n vm.languages = {\n en: {\n 'title': 'English',\n 'translation': 'TOOLBAR.ENGLISH',\n 'code': 'en',\n 'flag': 'us'\n },\n tr: {\n 'title': 'Turkish',\n 'translation': 'TOOLBAR.TURKISH',\n 'code': 'tr',\n 'flag': 'tr'\n }\n };\n \n // Methods\n vm.toggleSidenav = toggleSidenav;\n vm.logout = logout;\n vm.manage = manage;\n vm.changeLanguage = changeLanguage;\n vm.changeWorkspace = changeWorkspace;\n vm.changePassword = changePassword;\n vm.usageStats = usageStats;\n vm.setUserStatus = setUserStatus;\n vm.toggleHorizontalMobileMenu = toggleHorizontalMobileMenu;\n vm.isStandardUser = isStandardUser;\n\n //////////\n\n init();\n\n /**\n * Initialize\n */\n function init() {\n // Select the first status as a default\n vm.userStatus = vm.userStatusOptions[0];\n getNotifications();\n vm.user.workspaces = vm.user.workspaces.sort(dynamicSort(\"name\"));\n // Get the selected language directly from angular-translate module setting\n vm.selectedLanguage = $settings.commonSettings.language ? vm.languages[$settings.commonSettings.language] : vm.languages[$translate.preferredLanguage()];\n $translate.use($settings.commonSettings.language ? $settings.commonSettings.language:$translate.preferredLanguage());\n\n if ($settings.commonSettings && $settings.commonSettings.lastWorkspaceId && $settings.commonSettings.lastWorkspaceId != \"null\") {\n vm.selectedWorkspace = user.workspaces.find(function (w) {\n return w.id === $settings.commonSettings.lastWorkspaceId\n })\n user.selectedWorkspace = user.workspaces.find(function (w) {\n return w.id === $settings.commonSettings.lastWorkspaceId\n })\n $rootScope.selectedWorkspace = user.workspaces.find(function (w) {\n return w.id === $settings.commonSettings.lastWorkspaceId\n })\n $rootScope.selectedWorkspaceId = $settings.commonSettings.lastWorkspaceId\n }\n\n var workspaces = [];\n if (user.workspaces && user.workspaces.length > 0) {\n user.workspaces.forEach(function (w) {\n workspaces.push(w);\n })\n }\n if ($rootScope.workspaces && $rootScope.workspaces.length > 0)\n $rootScope.workspaces = workspaces;\n if ($rootScope.selectedWorkspace) {\n vm.selectedWorkspace = $rootScope.selectedWorkspace;\n }\n if (!vm.selectedWorkspace) {\n vm.selectedWorkspace = { name: \"All\" };\n }\n setWorkspaceLogo(vm.selectedWorkspace.id)\n setJiraHelpDeskVisibility(user)\n //getCookieIntosettingsTable();\n }\n\n\n /**\n * Toggle sidenav\n *\n * @param sidenavId\n */\n function toggleSidenav(sidenavId) {\n $mdSidenav(sidenavId).toggle();\n }\n\n /**\n * Sets User Status\n * @param status\n */\n function setUserStatus(status) {\n vm.userStatus = status;\n }\n\n /**\n * Logout Function\n */\n function logout() {\n $interval.cancel(checkNotification);\n var homeLogoutPath = \"/\";\n var samlLogoutPath = \"/web/auth/saml/logout\";\n api.account.logout()\n .then(function (resp) {\n api.saml.samlActive()\n .then(function (r) {\n if(r)\n $window.location.href = samlLogoutPath;\n else\n $window.location.href = homeLogoutPath;\n }, function (err) {\n console.log(err);\n $window.location.href = homeLogoutPath;\n });\n \n }, function (error) {\n console.log(error);\n });\n //var url = \"http://\" + $window.location.host + \"/api/oauth/token\";\n //$window.location.href = \"http://\" + $window.location.host;\n }\n\n function isStandardUser() {\n return vm.user.userType == null || vm.user.userType == 'DEFAULT';\n }\n\n function manage() {\n $state.go('app.management.users.list', {\n\n });\n }\n\n function changeWorkspace(workspace) {\n if (workspace instanceof Array) {\n vm.selectedWorkspace = { name: \"All\" };\n user.selectedWorkspace = { name: \"All\" };\n $rootScope.selectedWorkspace = { name: \"All\" };\n $rootScope.selectedWorkspaceId = null;\n $rootScope.$broadcast('workspace-change', { ws: user.selectedWorkspace });\n //$rootScope.workspaces = \"All\";\n //$cookies.put(\"lastworkspaceid\", null);\n $settings.saveUserCommonSettings(\"lastWorkspaceId\", null);\n } else {\n if (vm.selectedWorkspace && vm.selectedWorkspace.id !== workspace.id) {\n vm.selectedWorkspace = workspace;\n user.selectedWorkspace = workspace;\n $rootScope.selectedWorkspace = workspace;\n $rootScope.selectedWorkspaceId = workspace.id;\n $rootScope.$broadcast('workspace-change', { any: {} });\n //$cookies.put(\"lastworkspaceid\", workspace.id);\n $settings.saveUserCommonSettings(\"lastWorkspaceId\", workspace.id);\n }\n if (!vm.selectedWorkspace) {\n vm.selectedWorkspace = workspace;\n user.selectedWorkspace = workspace;\n $rootScope.selectedWorkspace = workspace;\n $rootScope.selectedWorkspaceId = workspace.id;\n //$cookies.put(\"lastworkspaceid\", workspace.id);\n $settings.saveUserCommonSettings(\"lastWorkspaceId\", workspace.id);\n }\n //$rootScope.workspaces = workspace;\n }\n setWorkspaceLogo(vm.selectedWorkspace.id);\n setJiraHelpDeskVisibility(user);\n $state.current.name == \"app.modules.list\" ? $state.reload(\"app.modules.list\") : $state.go(\"app.modules.list\");\n }\n\n function changePassword($event) {\n ToolbarService.showChangePasswordDialog($event);\n }\n\n function usageStats($event) {\n ToolbarService.showUsageStatsDialog(vm.selectedWorkspace.id, $event);\n }\n\n function setWorkspaceLogo(workspaceId) {\n vm.workspaceLogo = null;\n if (!workspaceId) return;\n if (vm.workspaceLogos) {\n var param = vm.workspaceLogos.filter(function (k) { return k.code == workspaceId })[0]\n if (param) {\n vm.workspaceLogo = param.value;\n }\n }\n }\n\n function setJiraHelpDeskVisibility(user) {\n if ($('#jsd-widget').context[\"JSD widget\"] && vm.isUserRestricted != null) { //if the container is visible on the page\n if (user.selectedWorkspace) {\n if (user.selectedWorkspace.jiraHelpDesk) {\n if (vm.isUserRestricted) {\n if (user.selectedWorkspace.jiraHelpDeskRestrictedUser) {\n $(\"[id=jsd-widget]\").css(\"visibility\", \"visible\");\n } else {\n $(\"[id=jsd-widget]\").css(\"visibility\", \"hidden\");\n }\n } else {\n $(\"[id=jsd-widget]\").css(\"visibility\", \"visible\");\n }\n } else {\n $(\"[id=jsd-widget]\").css(\"visibility\", \"hidden\");\n }\n } else {\n $(\"[id=jsd-widget]\").css(\"visibility\", \"hidden\");\n }\n\n } else {\n setTimeout(function () { setJiraHelpDeskVisibility(user) }, 200); //wait 50 ms, then try again\n }\n }\n\n /**\n * Change Language\n */\n function changeLanguage(lang) {\n vm.selectedLanguage = lang;\n //$cookies.put(\"language\", lang.code);\n $settings.saveUserCommonSettings(\"language\", lang.code);\n /**\n * Show temporary message if user selects a language other than English\n *\n * angular-translate module will try to load language specific json files\n * as soon as you change the language. And because we don't have them, there\n * will be a lot of errors in the page potentially breaking couple functions\n * of the template.\n *\n * To prevent that from happening, we added a simple \"return;\" statement at the\n * end of this if block. If you have all the translation files, remove this if\n * block and the translations should work without any problems.\n */\n //if (lang.code !== 'en') {\n // var message = 'Fuse supports translations through angular-translate module, but currently we do not have any translations other than English language. If you want to help us, send us a message through ThemeForest profile page.';\n\n // $mdToast.show({\n // template: '
' + message + '
',\n // hideDelay: 7000,\n // position: 'top right',\n // parent: '#content'\n // });\n\n // return;\n //}\n\n // Change the language\n $translate.use(lang.code);\n }\n\n /**\n * Toggle horizontal mobile menu\n */\n function toggleHorizontalMobileMenu() {\n vm.bodyEl.toggleClass('ms-navigation-horizontal-mobile-menu-active');\n }\n }\n\n function allTranslate($translate) {\n function translate(key) {\n if (key == \"All\" || key == \"Hepsi\") {\n if ($translate.use() === \"tr\") {\n return \"Hepsi\";\n } else if ($translate.use() === \"en\") {\n return \"All\";\n }\n }\n return key;\n }\n\n translate.$stateful = true;\n return translate;\n\n\n }\n})();\n\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.quick-panel')\n .controller('QuickPanelController', QuickPanelController);\n\n /** @ngInject */\n function QuickPanelController(msApi)\n {\n var vm = this;\n\n // Data\n vm.date = new Date();\n vm.settings = {\n notify: true,\n cloud : false,\n retro : true\n };\n\n msApi.request('quickPanel.activities@get', {},\n // Success\n function (response)\n {\n vm.activities = response.data;\n }\n );\n\n msApi.request('quickPanel.events@get', {},\n // Success\n function (response)\n {\n vm.events = response.data;\n }\n );\n\n msApi.request('quickPanel.notes@get', {},\n // Success\n function (response)\n {\n vm.notes = response.data;\n }\n );\n\n // Methods\n\n //////////\n }\n\n})();\n(function ()\n{\n 'use strict';\n\n /**\n * Main module of the Fuse\n */\n angular\n .module('fuse', ['app.core','app.auth','app.navigation','app.toolbar','app.quick-panel',\n 'app.modules', 'app.pipeline', 'app.report','app.management', 'app.sources'])\n .config(config);\n\n /** @ngInject */\n function config($translatePartialLoaderProvider) {\n // Translation\n $translatePartialLoaderProvider.addPart('app');\n }\n})();\n\n(function ()\n{\n 'use strict';\n\n angular\n .module('fuse')\n .controller('MainController', MainController);\n\n /** @ngInject */\n function MainController($scope, $rootScope, $state,user,ReportService, api)\n {\n // Data\n $rootScope.$on('$stateChangeStart',\n function (event, toState, toParams, fromState, fromParams) {\n // event.preventDefault();\n /*if (toState.url != \"/data\" && toState.url != \"/overview\") {\n delete $rootScope.queryCode;\n }*/\n if (toState.name.indexOf(\"report\") === -1 && fromState.name.indexOf(\"report\") !== -1) {\n ReportService.removeAllQueries();\n }\n if (toState.name === \"app.modules.list\") {\n delete user.moduleWorkspace;\n }\n // transitionTo() promise will be rejected with \n // a 'transition prevented' error\n })\n\n /*$scope.$watch(function () {\n return $rootScope.workspaces;\n }, function () {\n $state.transitionTo($state.current, null, { reload: true, inherit: true, notify: true });\n //$state.reload();\n }, true);*/\n //////////\n\n // Remove the splash screen\n $scope.$on('$viewContentAnimationEnded', function (event)\n {\n if ( event.targetScope.$id === $scope.$id )\n {\n $rootScope.$broadcast('msSplashScreen::remove');\n }\n });\n }\n})();\n\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.navigation', [])\n .config(config);\n\n /** @ngInject */\n function config()\n {\n \n }\n\n})();\n(function() {\n 'use strict';\n\n angular\n .module('app.navigation')\n .controller('NavigationController', NavigationController);\n\n /** @ngInject */\n function NavigationController($scope, $stateParams) {\n var vm = this;\n\n vm.color = $stateParams.color;\n vm.name = $stateParams.name;\n vm.type = $stateParams.type;\n\n // Data\n vm.bodyEl = angular.element('body');\n vm.folded = false;\n vm.msScrollOptions = {\n suppressScrollX: true\n };\n\n // Methods\n vm.toggleMsNavigationFolded = toggleMsNavigationFolded;\n\n //////////\n\n /**\n * Toggle folded status\n */\n function toggleMsNavigationFolded() {\n vm.folded = !vm.folded;\n }\n\n // Close the mobile menu on $stateChangeSuccess\n $scope.$on('$stateChangeSuccess', function() {\n vm.bodyEl.removeClass('ms-navigation-horizontal-mobile-menu-active');\n });\n }\n\n})();\n\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .run(runBlock);\n\n /** @ngInject */\n function runBlock(msUtils, fuseGenerator, fuseConfig, $rootScope, toastService, $http)\n {\n /**\n * Generate extra classes based on registered themes so we\n * can use same colors with non-angular-material elements\n */\n fuseGenerator.generate();\n\n /**\n * Disable md-ink-ripple effects on mobile\n * if 'disableMdInkRippleOnMobile' config enabled\n */\n if ( fuseConfig.getConfig('disableMdInkRippleOnMobile') && msUtils.isMobile() )\n {\n var bodyEl = angular.element('body');\n bodyEl.attr('md-no-ink', true);\n }\n\n /**\n * Put isMobile() to the html as a class\n */\n if ( msUtils.isMobile() )\n {\n angular.element('html').addClass('is-mobile');\n }\n\n /**\n * Put browser information to the html as a class\n */\n var browserInfo = msUtils.detectBrowser();\n if ( browserInfo )\n {\n var htmlClass = browserInfo.browser + ' ' + browserInfo.version + ' ' + browserInfo.os;\n angular.element('html').addClass(htmlClass);\n }\n\n $rootScope.$on('httpError', function (event, eventData) {\n toastService.serverError(eventData.message);\n });\n\n $http.defaults.headers.common['X-Requested-With'] = \"XmlHttpRequest\";\n }\n})();\n(function() {\n 'use strict';\n\n angular\n .module('app.core')\n .config(config);\n\n /** @ngInject */\n function config($ariaProvider, $logProvider, msScrollConfigProvider, uiGmapGoogleMapApiProvider,\n $translateProvider, $provide, fuseConfigProvider, pickerProvider) {\n // Enable debug logging\n $logProvider.debugEnabled(true);\n\n pickerProvider.setOkLabel('Tamam');\n pickerProvider.setCancelLabel('Kapat');\n pickerProvider.setDayHeader('single');\n pickerProvider.setDaysNames([{\n 'single': 'P',\n 'shortName': 'Paz',\n 'fullName': 'Pazar'\n },\n {\n 'single': 'P',\n 'shortName': 'Pzt',\n 'fullName': 'Pazartesi'\n },\n {\n 'single': 'S',\n 'shortName': 'Sal',\n 'fullName': 'Salı'\n },\n {\n 'single': 'Ç',\n 'shortName': 'Çar',\n 'fullName': 'Çarşamba'\n },\n {\n 'single': 'P',\n 'shortName': 'Per',\n 'fullName': 'Perşembe'\n },\n {\n 'single': 'C',\n 'shortName': 'Cum',\n 'fullName': 'Cuma'\n },\n {\n 'single': 'C',\n 'shortName': 'Cmt',\n 'fullName': 'Cumartesi'\n }\n ]);\n pickerProvider.setMonthNames([\"Ocak\", \"Şubat\", \"Mart\", \"Nisan\", \"Mayıs\", \"Haziran\", \"Temmuz\", \"Ağustos\", \"Eylül\", \"Ekim\", \"Kasım\", \"Aralık\"]);\n pickerProvider.setRangeDefaultList([{\n label: 'Bugün',\n startDate: moment().startOf('day'),\n endDate: moment().endOf('day')\n },\n {\n label: 'Dün',\n startDate: moment().subtract(1, 'd'),\n endDate:moment().subtract(1, 'd')\n },\n {\n label: 'Geçmiş 7 Gün',\n startDate: moment().subtract(7, 'd'),\n endDate: moment()\n },\n {\n label: 'Geçmiş 30 Gün',\n startDate: moment().subtract(29, 'd'),\n endDate: moment()\n },\n {\n label: 'Bu Ay',\n startDate: moment().startOf('month'),\n endDate: moment().endOf('month')\n },\n {\n label: 'Geçen Ay',\n startDate: moment().subtract(1, 'month').startOf('month'),\n endDate: moment()\n },\n {\n label: 'Bu Yıl',\n startDate: moment().startOf('year'),\n endDate: moment().endOf('year')\n }\n ]);\n pickerProvider.setRangeCustomStartEnd(['Başlangıç Tarihi', 'Bitiş Tarihi']);\n\n // toastr configuration\n toastr.options.timeOut = 3000;\n toastr.options.positionClass = 'toast-top-right';\n toastr.options.preventDuplicates = true;\n toastr.options.progressBar = true;\n\n // uiGmapgoogle-maps configuration\n uiGmapGoogleMapApiProvider.configure({\n // key: 'your api key',\n v: '3.exp',\n libraries: 'weather,geometry,visualization'\n });\n\n // angular-translate configuration\n $translateProvider.useLoader('$translatePartialLoader', {\n urlTemplate: '{part}/i18n/{lang}.json'+'?cb=' + (new Date()).getTime()\n });\n $translateProvider.preferredLanguage('tr');\n $translateProvider.useSanitizeValueStrategy('sanitize');\n\n // Text Angular options\n $provide.decorator('taOptions', [\n '$delegate',\n function(taOptions) {\n taOptions.toolbar = [\n ['bold', 'italics', 'underline', 'ul', 'ol', 'quote']\n ];\n\n taOptions.classes = {\n focussed: 'focussed',\n toolbar: 'ta-toolbar',\n toolbarGroup: 'ta-group',\n toolbarButton: 'md-button',\n toolbarButtonActive: 'active',\n disabled: '',\n textEditor: 'form-control',\n htmlEditor: 'form-control'\n };\n\n return taOptions;\n }\n ]);\n\n // Text Angular tools\n $provide.decorator('taTools', [\n '$delegate',\n function(taTools) {\n taTools.bold.iconclass = 'icon-format-bold';\n taTools.italics.iconclass = 'icon-format-italic';\n taTools.underline.iconclass = 'icon-format-underline';\n taTools.ul.iconclass = 'icon-format-list-bulleted';\n taTools.ol.iconclass = 'icon-format-list-numbers';\n taTools.quote.iconclass = 'icon-format-quote';\n\n return taTools;\n }\n ]);\n\n /*eslint-disable */\n\n // ng-aria configuration\n $ariaProvider.config({\n tabindex: false\n });\n\n // Fuse theme configurations\n fuseConfigProvider.config({\n 'disableCustomScrollbars': false,\n 'disableCustomScrollbarsOnMobile': true,\n 'disableMdInkRippleOnMobile': true\n });\n\n // msScroll configuration\n msScrollConfigProvider.config({\n wheelPropagation: true\n });\n\n }\n})();\n\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.auth', [\n 'app.auth.login',\n 'app.auth.register'\n ])\n .config(config);\n\n /** @ngInject */\n function config(msNavigationServiceProvider)\n {\n \n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app.auth')\n .service('user', user);\n\n user.$inject = ['auth'];\n\n function user(auth) {\n return auth.getCurrentUser();\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.auth')\n .service('$settings', settings);\n\n settings.$inject = ['auth', 'api', '$log'];\n\n function settings(auth, api, $log) {\n\n var settings = auth.findSettings();\n\n settings.saveUserSettings = function (key, value, reportId) {\n var targetReportSettings;\n if (settings.reportSettingsList == null) settings.reportSettingsList = [];\n for (var i = 0; i < settings.reportSettingsList.length; i++) {\n if (settings.reportSettingsList[i].reportId == reportId) {\n targetReportSettings = settings.reportSettingsList[i];\n settings.reportSettingsList.splice(i, 1);\n }\n }\n if (targetReportSettings != null) {\n targetReportSettings[key] = value;\n } else {\n targetReportSettings = {};\n targetReportSettings['reportId'] = reportId;\n targetReportSettings[key] = value;\n }\n settings.reportSettingsList.push(targetReportSettings);\n\n api.settings.saveSettings(settings)\n .then(function (response) {\n console.log(response)\n }, function (error) {\n $log.error(error);\n })\n }\n\n settings.saveUserCommonSettings = function (key, value) {\n settings.commonSettings[key] = value;\n api.settings.saveSettings(settings)\n .then(function () {\n }, function (error) {\n $log.error(error);\n })\n }\n\n\n return settings;\n }\n\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.auth')\n .service('$integration', integrationProvider);\n\n integrationProvider.$inject = ['user', 'api', '$q'];\n\n /** @ngInject **/\n function integrationProvider(user, api, $q) {\n\n var started = false;\n\n /* ----------------- */\n /* Provider */\n /* ----------------- */\n\n function jiraHelpdesk(callback) {\n var jhdScript = document.createElement('script');\n jhdScript.type = 'text/javascript';\n jhdScript.setAttribute('data-jsd-embedded', null);\n jhdScript.setAttribute('data-key', 'a52649c7-8c64-4e40-b87e-0f0818754c6b');\n jhdScript.setAttribute('data-base-url', 'https://jsd-widget.atlassian.com');\n jhdScript.src = 'https://jsd-widget.atlassian.com/assets/embed.js';\n if (jhdScript.readyState) { // old IE support\n jhdScript.onreadystatechange = function () {\n if (jhdScript.readyState === 'loaded' || jhdScript.readyState === 'complete') {\n jhdScript.onreadystatechange = null;\n callback();\n }\n };\n } else { //modern browsers\n jhdScript.onload = function () {\n callback();\n };\n }\n document.getElementsByTagName('head')[0].appendChild(jhdScript);\n }\n\n function googleAnalytics(callback, id) {\n var googleAnalyticsScript = document.createElement('script');\n googleAnalyticsScript.setAttribute('async', null);\n googleAnalyticsScript.setAttribute('src', 'https://www.googletagmanager.com/gtag/js?id=' + id);\n\n var googleAnalyticsScript2 = document.createElement('script');\n googleAnalyticsScript2.innerHTML = \"window.dataLayer = window.dataLayer || [];function gtag() { dataLayer.push(arguments); }gtag('js', new Date());gtag('config', '\" + id + \"');\"\n\n if (googleAnalyticsScript.readyState) { // old IE support\n googleAnalyticsScript.onreadystatechange = function () {\n if (googleAnalyticsScript.readyState === 'loaded' || googleAnalyticsScript.readyState === 'complete') {\n googleAnalyticsScript.onreadystatechange = null;\n callback();\n }\n };\n googleAnalyticsScript2.onreadystatechange = function () {\n if (googleAnalyticsScript2.readyState === 'loaded' || googleAnalyticsScript2.readyState === 'complete') {\n googleAnalyticsScript2.onreadystatechange = null;\n callback();\n }\n };\n } else { //modern browsers\n googleAnalyticsScript.onload = function () {\n callback();\n };\n googleAnalyticsScript2.onload = function () {\n callback();\n };\n }\n document.getElementsByTagName('head')[0].appendChild(googleAnalyticsScript);\n document.getElementsByTagName('head')[0].appendChild(googleAnalyticsScript2);\n }\n\n function hotjar(callback, id) {\n var hotjar = document.createElement('script');\n hotjar.innerHTML = \"(function (h, o, t, j, a, r) { h.hj = h.hj || function () { (h.hj.q = h.hj.q || []).push(arguments) }; h._hjSettings = { hjid:\" + id + \", hjsv: 6 }; a = o.getElementsByTagName('head')[0]; r = o.createElement('script'); r.async = 1; r.src = t + h._hjSettings.hjid + j + h._hjSettings.hjsv; a.appendChild(r); })(window, document, 'https://static.hotjar.com/c/hotjar-', '.js?sv=');\"\n if (hotjar.readyState) { // old IE support\n hotjar.onreadystatechange = function () {\n if (hotjar.readyState === 'loaded' || hotjar.readyState === 'complete') {\n hotjar.onreadystatechange = null;\n callback();\n }\n };\n } else { //modern browsers\n hotjar.onload = function () {\n callback();\n };\n }\n document.getElementsByTagName('head')[0].appendChild(hotjar);\n }\n\n function loadConfigurationalScripts() {\n if (started) return;\n var def = $q.defer();\n api.webConfiguration.webconfigurations()\n .then(function (response) {\n def.resolve(response);\n if (response && response.jiraHelpDesk) {\n jiraHelpdesk(function () {\n var DOMContentLoaded_event = document.createEvent('Event');\n DOMContentLoaded_event.initEvent('DOMContentLoaded', true, true);\n window.document.dispatchEvent(DOMContentLoaded_event);\n });\n }\n if (response && response.analysis && response.analysis.google) {\n googleAnalytics(function () {\n var DOMContentLoaded_event = document.createEvent('Event');\n DOMContentLoaded_event.initEvent('DOMContentLoaded', true, true);\n window.document.dispatchEvent(DOMContentLoaded_event);\n }, response.analysis.google);\n }\n if (response && response.analysis && response.analysis.hotjar) {\n hotjar(function () {\n var DOMContentLoaded_event = document.createEvent('Event');\n DOMContentLoaded_event.initEvent('DOMContentLoaded', true, true);\n window.document.dispatchEvent(DOMContentLoaded_event);\n }, response.analysis.hotjar);\n }\n },\n function (response) {\n $log.error(response);\n });\n started = true;\n return def.promise;\n }\n\n return loadConfigurationalScripts();\n }\n})();\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n(function () {\n 'use strict';\n\n angular\n .module('app.auth')\n .provider('auth', authProvider);\n\n\n /** @ngInject **/\n function authProvider() {\n /* ----------------- */\n /* Provider */\n /* ----------------- */\n var provider = this;\n var currentUser = null;\n // Inject required services\n\n var $log = angular.injector(['ng']).get('$log'),\n $resource = angular.injector(['ngResource']).get('$resource');\n //$cookies = angular.injector(['ng']).get('$cookies');\n //api = angular.injector(['ng']).get('api');\n //var $rootElementModule = function ($provide) {\n // $provide.value('$rootElement', angular.element(document))\n //}\n\n //var $location = angular.injector(['ng', $rootElementModule]).get(\"$location\");\n\n var $translate = angular.in\n\n provider.getCurrentUser = getCurrentUser;\n provider.findSettings = findSettings;\n this.$get = function ($q, $log, $location) {\n provider.$location = $location;\n var service = {\n getCurrentUser: getCurrentUser,\n authorize: authorize,\n hasPermission: hasPermission,\n findSettings: findSettings,\n };\n\n return service;\n }\n\n function getCurrentUser() {\n if (!currentUser) {\n currentUser = getCurrentUserFromServer();\n }\n return currentUser;\n }\n\n function getCurrentUserFromServer() {\n //var tokenId = null;\n //if ($location.search().tokenid) {\n // tokenId = $location.search().tokenid;\n //}\n\n //xhr.overrideMimeType(\"application/json\");\n var path = '/api/account/' + 'identity'; //+ \"?token=\" + new Date().getTime();\n return findUser(path);\n /*if (tokenId) {\n var tokenIdPath = '/web/auth/gettoken/' + tokenId;\n var xhr = new XHR();\n if (xhr.overrideMimeType) xhr.overrideMimeType('application/json');\n xhr.open('GET', tokenIdPath, false);\n xhr.send(null);\n if (xhr.status === 200) {\n if (xhr.responseText) {\n var response = JSON.parse(xhr.responseText);\n var accesstoken = response.tokenValue;\n var tokenexpire = response.tokenExpire;\n path = '/api/account/' + 'identity?token=' + accesstoken + '&expire=' + tokenexpire; //+ \"?token=\" + new Date().getTime();\n return findUser(path);\n } else {\n provider.$location.url(provider.$location.path(\"/\"));\n }\n }\n //path = '/api/account/' + 'identity?token=' + accesstoken + '&expire=' + tokenexpire; //+ \"?token=\" + new Date().getTime();\n } else {\n return findUser(path);\n }*/\n\n }\n\n function findTokenByTokenId(path, tokenId) {\n var xhr = new XHR();\n if (xhr.overrideMimeType) xhr.overrideMimeType('application/json');\n xhr.open('GET', path, false);\n xhr.send(null);\n\n var user = {};\n if (xhr.status === 200) {\n\n }\n }\n\n function findSettings() {\n var xhr = new XHR();\n if (xhr.overrideMimeType) xhr.overrideMimeType('application/json');\n\n xhr.open('GET', '/api/settings/findusersettings', false);\n xhr.send(null);\n\n var settings = {};\n if (xhr.status === 200) {\n var response = xhr.responseText != \"\" ? JSON.parse(xhr.responseText) : null;\n settings.commonSettings = response && response.commonSettings ? response.commonSettings : {};\n settings.reportSettingsList = response && response.reportSettingsList ? response.reportSettingsList : [];\n for (var i = 0; i < settings.reportSettingsList.length; i++) {\n if (settings.reportSettingsList[i].afterDate ) {\n var startDate = settings.reportSettingsList[i].afterDate.startDate;\n var endDate = settings.reportSettingsList[i].afterDate.endDate;\n settings.reportSettingsList[i].afterDate.startDate = startDate ? new Date(startDate.replace(/ /g, \"\")) : startDate;\n settings.reportSettingsList[i].afterDate.endDate = endDate ? new Date(endDate.replace(/ /g, \"\")) : endDate;\n }\n if (settings.reportSettingsList[i].beforeDate) {\n var startDate = settings.reportSettingsList[i].beforeDate.startDate;\n var endDate = settings.reportSettingsList[i].beforeDate.endDate;\n settings.reportSettingsList[i].beforeDate.startDate = startDate ? new Date(startDate.replace(/ /g, \"\")) : startDate;\n settings.reportSettingsList[i].beforeDate.endDate = endDate ? new Date(endDate.replace(/ /g, \"\")) : endDate;\n }\n }\n }\n\n return settings;\n }\n\n function findUser(path) {\n var xhr = new XHR();\n if (xhr.overrideMimeType) xhr.overrideMimeType('application/json');\n xhr.open('GET', path, false);\n xhr.send(null);\n\n var user = {};\n if (xhr.status === 200) {\n \n var response = JSON.parse(xhr.responseText);\n user.name = response.name;\n user.userName = response.userName;\n user.isAuthenticated = response.isAuthenticated;\n user.avatar = response.avatar;\n user.environment = response.environment;\n user.pnc = response.pnc;\n user.permissions = response.permissions;\n user.hasPermission = hasPermission;\n user.workspaces = response.workspaces;\n if (user.workspaces && user.workspaces.length == 1) {\n user.selectedWorkspace = user.workspaces[0];\n } else if (user.workspaces && user.workspaces.length > 1) {\n user.selectedWorkspace = {name: \"All\"};\n }\n user.sys = response.sys;\n user.sysParams = response.sysParams;\n user.email = response.email;\n user.lastPassDate = response.lastPassDate;\n user.userType = response.userType;\n user.restricted = response.isRestricted;\n } else {\n user.isAuthenticated = false;\n if (xhr.status === 403) {\n user.isExpired = true;\n }\n /*if (xhr.status === 403 || xhr.status === 401)\n $window.location.href = 'https://idp.ssocircle.com/sso/idpssoinit?metaAlias=/ssocircle&spEntityID=com.artiwise.textwise';*/\n }\n return user;\n }\n\n\n function hasPermission(value) {\n if (!value) return false;\n var result = checkPermission(value, currentUser);\n return result;\n }\n\n function hasPermissionByWorkspace(value, workspace) {\n if (!value) return false;\n var result = checkPermissionByWorkspace(value, currentUser, workspace);\n return result;\n }\n\n function checkPermissionByWorkspace(value, $user, workspace) {\n var wid = \"\";\n var permissions = value.split(\",\");\n if ($user.permissions && angular.isArray($user.permissions)) {\n var workspacePermissions = $user.permissions;\n if (workspace) {\n workspacePermissions = workspacePermissions.filter(function (wp) {\n return wp.workspaceId === workspace.id;\n });\n }\n for (var i = 0; i < workspacePermissions.length; i++) {\n var user_permission_ws = workspacePermissions[i];\n if (user_permission_ws && user_permission_ws.permissions.length > 0) {\n for (var k = 0; k < user_permission_ws.permissions.length; k++) {\n var user_permission = user_permission_ws.permissions[k];\n if (user_permission) {\n if (permissions && angular.isArray(permissions)) {\n for (var j = 0; j < permissions.length; j++) {\n var permission = permissions[j];\n if (permission.indexOf(\"*\") > -1) {\n var up = user_permission.split(\"/\");\n var pp = permission.split(\"/\");\n var list = [];\n up.forEach(function (u, index) {\n var p = pp[index];\n var val = false;\n if (u == p || p === \"*\") {\n val = true;\n }\n list.insert(index, val);\n });\n\n var allow = true;\n list.forEach(function (item) {\n if (!item)\n allow = false;\n });\n\n if (allow) return true;\n } else {\n if (user_permission === permission) {\n return true;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return false;\n }\n\n function checkPermission(value, $user) {\n var wid = \"\";\n var permissions = value.split(\",\");\n if ($user.permissions && angular.isArray($user.permissions)) {\n var workspacePermissions = $user.permissions;\n if ($user.selectedWorkspace && $user.selectedWorkspace.name !== \"All\") {\n workspacePermissions = workspacePermissions.filter(function (wp) {\n return wp.workspaceId === $user.selectedWorkspace.id;\n });\n }\n for (var i = 0; i < workspacePermissions.length; i++) {\n var user_permission_ws = workspacePermissions[i];\n if (user_permission_ws && user_permission_ws.permissions.length > 0) {\n for (var k = 0; k < user_permission_ws.permissions.length; k++) {\n var user_permission = user_permission_ws.permissions[k];\n if (user_permission) {\n if (permissions && angular.isArray(permissions)) {\n for (var j = 0; j < permissions.length; j++) {\n var permission = permissions[j];\n if (permission.indexOf(\"*\") > -1) {\n var up = user_permission.split(\"/\");\n var pp = permission.split(\"/\");\n var list = [];\n up.forEach(function (u, index) {\n var p = pp[index];\n var val = false;\n if (u == p || p === \"*\") {\n val = true;\n }\n list.insert(index, val);\n });\n\n var allow = true;\n list.forEach(function (item) {\n if (!item)\n allow = false;\n });\n\n if (allow) return true;\n } else {\n if (user_permission === permission) {\n return true;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return false;\n }\n\n function authorize($state) {\n if ($state.$current && $state.$current.data && $state.$current.data.permission) {\n var $stateParams = $state.params;\n var permissionRef = $state.$current.data.permission;\n var permission = null;\n if (permissionRef instanceof Function) {\n permission = permissionRef($stateParams);\n } else if (isString(permissionRef)) {\n permission = permissionRef;\n }\n\n if (!hasPermission(permission)) {\n provider.$location.url(provider.$location.path(\"/\"));\n //window.location.href = \"/\";\n }\n }\n }\n\n Array.prototype.insert = function (index, item) {\n this.splice(index, 0, item);\n };\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('fuse')\n .run(runBlock);\n\n /** @ngInject */\n function runBlock($rootScope, $timeout, $state, $location, $http, user, auth, toastService,$q) {\n // Activate loading indicator\n\n //\n var stateChangeStartEvent = $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {\n $rootScope.loadingProgress = true;\n\n //Check authenticated\n if (toState.name !== \"app.auth_login\" &&\n toState.name !== \"app.auth_saml\" &&\n toState.name !== \"app.auth_register\" &&\n toState.name !== \"app.auth_completed\" &&\n toState.name !== \"app.auth_confirmed\" &&\n toState.name !== \"app.auth_forgot_password\" &&\n toState.name !== \"app.auth_forgot_password_info\" &&\n toState.name !== \"app.auth_change_password\" &&\n toState.name !== \"app.auth_change_password_info\" &&\n toState.name !== \"app.auth_account_info\" &&\n toState.name !== \"app.auth_error\" &&\n toState.name !== \"app.reset_password\" &&\n toState.name !== \"app.user_register_request\" &&\n toState.name !== \"app.user_request\" &&\n toState.name !== \"app.user_request.register\" &&\n toState.name !== \"app.user_request.demo\") {\n if (!user.isAuthenticated) {\n if (user.isExpired) {\n toastService.serverError(\"Application Expired.\");\n $rootScope.isExpired = true;\n } else {\n $rootScope.isExpired = false;\n }\n if ($rootScope.samlActive) {\n $state.transitionTo('app.auth_saml');\n } else {\n samlActive()\n .then(function (r) {\n $rootScope.samlActive = r;\n if (r)\n $state.transitionTo('app.auth_saml');\n else\n $state.transitionTo('app.auth_login', { returnUrl: $location.url() });\n }, function (e) {\n console.log(e);\n })\n }\n event.preventDefault();\n } else if (toState.name === \"app.modules.list\") {\n $location.search({});\n }\n }\n });\n\n // De-activate loading indicator\n var stateChangeSuccessEvent = $rootScope.$on('$stateChangeSuccess', function() {\n auth.authorize($state);\n $timeout(function() {\n $rootScope.loadingProgress = false;\n });\n });\n\n // Store state in the root scope for easy access\n $rootScope.state = $state;\n\n // Cleanup\n $rootScope.$on('$destroy', function() {\n stateChangeStartEvent();\n stateChangeSuccessEvent();\n //user.destroy();\n });\n\n\n function samlActive() {\n var path = 'web/auth/saml/active';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to get saml active');\n });\n\n return def.promise;\n }\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('fuse')\n .config(routeConfig);\n\n /** @ngInject */\n function routeConfig($stateProvider, $urlRouterProvider, $locationProvider) {\n $locationProvider.html5Mode(true);\n $urlRouterProvider\n //.when('/github/signin', ['$state', '$window', function ($state, $window) { }])\n //.when('/google/signin', ['$state', '$window', function ($state, $window) { }])\n .otherwise('/');\n\n //$urlRouterProvider.otherwise('/login');\n\n /**\n * Layout Style Switcher\n *\n * This code is here for demonstration purposes.\n * If you don't need to switch between the layout\n * styles like in the demo, you can set one manually by\n * typing the template urls into the `State definitions`\n * area and remove this code\n */\n // Inject $cookies\n var $cookies;\n\n angular.injector(['ngCookies']).invoke([\n '$cookies', function (_$cookies) {\n $cookies = _$cookies;\n }\n ]);\n\n // Get active layout\n //var layoutStyle = $cookies.get('layoutStyle') || 'contentWithToolbar';\n var layoutStyle = 'horizontalNavigation';\n\n var layouts = {\n verticalNavigation: {\n main: 'app/core/layouts/vertical-navigation.html',\n toolbar: 'app/toolbar/layouts/vertical-navigation/toolbar.html',\n navigation: 'app/navigation/layouts/vertical-navigation/navigation.html'\n },\n horizontalNavigation: {\n main: 'app/core/layouts/horizontal-navigation.html',\n toolbar: 'app/toolbar/layouts/horizontal-navigation/toolbar.html',\n navigation: 'app/navigation/layouts/horizontal-navigation/navigation.html'\n },\n contentOnly: {\n main: 'app/core/layouts/content-only.html',\n toolbar: '',\n navigation: ''\n },\n contentWithToolbar: {\n main: 'app/core/layouts/content-with-toolbar.html',\n toolbar: 'app/toolbar/layouts/content-with-toolbar/toolbar.html',\n navigation: ''\n }\n };\n // END - Layout Style Switcher\n\n // State definitions\n $stateProvider\n .state('app', {\n abstract: true,\n views: {\n 'main@': {\n templateUrl: layouts[layoutStyle].main,\n controller: 'MainController as vm'\n },\n 'toolbar@app': {\n templateUrl: layouts[layoutStyle].toolbar,\n controller: 'ToolbarController as vm'\n }\n\n }\n });\n }\n\n})();\n\n(function ()\n{\n 'use strict';\n\n angular\n .module('fuse')\n .controller('IndexController', IndexController);\n\n /** @ngInject */\n function IndexController(fuseTheming, $window, __env)\n {\n var vm = this;\n\n // Data\n vm.themes = fuseTheming.themes;\n //////////\n\n if (__env && __env.appTitle)\n $window.document.title = __env.appTitle;\n }\n})();\n\n(function ()\n{\n 'use strict';\n\n angular\n .module('fuse');\n})();\n\n(function ()\n{\n 'use strict';\n\n angular\n .module('fuse')\n .config(config);\n\n /** @ngInject */\n function config()\n {\n // Put your custom configurations here\n }\n\n})();\n\nvar XHR = window.XMLHttpRequest || function() {\n try { return new ActiveXObject(\"Msxml2.XMLHTTP.6.0\"); } catch (e1) {}\n try { return new ActiveXObject(\"Msxml2.XMLHTTP.3.0\"); } catch (e2) {}\n try { return new ActiveXObject(\"Msxml2.XMLHTTP\"); } catch (e3) {}\n throw new Error(\"This browser does not support XMLHttpRequest.\");\n};\n\nfunction isString(s) {\n return typeof(s) === 'string' || s instanceof String;\n}\n\n(function() {\n 'use strict';\n\n angular\n .module('fuse')\n .factory('api', apiService);\n\n /** @ngInject */\n function apiService($http, $q, $log,$httpParamSerializerJQLike) {\n var baseUrl = '/api';\n // interface\n var api = {\n module: {\n url: baseUrl + \"/module\",\n save: saveModule,\n delete: deleteModule,\n get: getModule,\n all: getModules,\n types: getModuleTypes,\n family: getModuleFamily,\n categories: getCategories,\n categoryTree: getCategoryTree,\n addCategory: addCategory,\n deleteCategory: deleteCategory,\n train: runTrain,\n latestTrain: getLatestTrain,\n latestTrainInfo:getLatestTrainInfo,\n classifiers: getClassifierModules,\n hasData: hasData,\n definitions: getModuleDefinitions,\n featureExtractors: getFeatureExtractors,\n scoringType: getScoringType,\n classifierType: getClassifierType,\n classifierSource: getClassifierSource,\n splitterType: getSplitterType,\n batchSize: getBatchSize,\n epochNumbers: getEpochNumbers,\n maxTokenLength: getMaxTokenLength,\n testSplitRatio: getTestSplitRatio,\n learningRates: getLearningRates,\n trainAlgorithm: getTrainAlgorithm,\n trainAlgorithmTypes: getTrainAlgorithmTypes,\n processUnit: getProcessUnit,\n processUnits: getProcessUnits,\n sentimentLanguage: getSentimentLanguage,\n addHierCategory: addHierCategory,\n replaceCategory: replaceCategory,\n deleteHierCategory: deleteHierCategory,\n addField: addModuleField,\n deleteField: deleteModuleField,\n reports: getModuleReports,\n pageableCategories: pageableCategories,\n moduletrain: findModuleTrains,\n testEvaluateRatio: getTestEvaluateRatio, \n getNerMatchingTypes: getNerMatchingTypes \n },\n pipeline: {\n url: baseUrl + \"/pipeline\",\n get: getPipeline,\n save: savePipeline,\n update: updatePipeline,\n list: listPipeline,\n stages: getStages,\n definitions: getDefinitions,\n delete: deletePipeline\n },\n samples: {\n url: baseUrl + \"/sample\",\n save: saveSamples,\n search: searchSamples,\n searchPageable: searchSamplePageable,\n counts: getSampleCounts,\n delete: deleteSamples,\n findLastProcessTrace: findLastProcessTrace,\n deleteCategoryDocumentFromModule: deleteCategoryDocumentFromModule,\n addCategoryDocumentToModule: addCategoryDocumentToModule,\n deleteSamplesById: deleteSamplesById,\n similarity: findSimilarity,\n findLatestAnalysis: findLatestAnalysis\n //checkStatus: checkStatus\n },\n classification: {\n url: baseUrl + \"/classification\",\n classify: classify,\n statistics: getStatistics,\n keywords: getKeywords,\n confusions: getConfusions,\n searchEvaluation: searchEvaluation,\n getEvaluationCount: getEvaluationCount,\n getClassificationRules: getClassificationRules,\n addClassificationRule: addClassificationRule,\n deleteClassificationRule: deleteClassificationRule,\n classifyCompare: classifyCompare\n },\n sentiment: {\n url: baseUrl + \"/sentiment\",\n single: singleSentiment\n },\n namedentity: {\n url: baseUrl + \"/namedentity\",\n find: findNamedEntities\n },\n topicmodeling: {\n url: baseUrl + \"/topicmodeling\",\n get: getTopics,\n count: getTopicSampleCounts\n },\n clustering: {\n url: baseUrl + \"/clustering\",\n get: getClusters,\n count: getClusterSampleCounts,\n stopLabels: getStopLabels,\n stopWords: getStopWords,\n saveStopLabel: saveStopLabel,\n saveStopWord: saveStopWord,\n deleteStopWord: deleteStopWord,\n deleteStopLabel: deleteStopLabel\n },\n rootcause: {\n url: baseUrl + \"/rootcause\",\n classifier: getClassifier,\n count: getRootCauseSampleCounts,\n results: getRootCauseResults,\n analysis: getRootCauseAnalysis\n },\n management:{\n url: baseUrl + \"/management\",\n modules:{\n list: getManagementModules,\n update : saveManagementModule\n }\n },\n account: {\n url: baseUrl + \"/account\",\n register: register,\n login: login,\n loginV2: loginV2,\n logout: logout,\n samlLogout: samlLogout,\n forgotPassword: forgotPassword,\n changePassword: changePassword,\n changePass: changePass,\n loginGitHub: loginGitHub,\n currentUser: getCurrentUser,\n usernames: getUsernames,\n resetPassword: resetPassword,\n changePasswordUuid: changePasswordUuid,\n isPassChangeable: isPassChangeable,\n deleteUserRegisterRequest: deleteUserRegisterRequest,\n saveUserDemoRequest: saveUserDemoRequest,\n saveDemoForm: saveDemoForm,\n saveUserRegisterForm: saveUserRegisterForm,\n user: {\n list: getUsers,\n save: saveUser,\n delete: deleteUser,\n types: getUserTypes,\n searchADUser: searchADUser,\n find: findUserByEmail,\n filterFields: findUserFilterFields,\n findFilters: findUserFilters,\n savefilterFields: saveUserFilterFields,\n findUserRegisterRequests: findUserRegisterRequests,\n findUserDemoRequests: findUserDemoRequests,\n activation: activation\n },\n role: {\n list: getRoles,\n save: saveRole,\n listByWorkspace: getRolesByWorkspace,\n listByWorkspaceIds: getRolesByWorkspaceIds,\n users: getUsersByRole,\n delete: deleteRole,\n types: getRoleTypes,\n searchADGroup: searchADGroup\n },\n permission: {\n list: getPermissions\n },\n workspace: {\n list: getWorkspaces,\n save: saveWorkspace\n }\n },\n reportv2:{\n url: baseUrl + \"/v2/report\",\n reportField:{\n findReportFields: findReportFieldsV2,\n saveReportField: saveReportFieldV2,\n updateReportField: updateReportFieldV2,\n deleteReportField: deleteReportFieldV2\n },reportModule:{\n findReportModules: findReportModulesV2,\n saveReportModule: saveReportModuleV2,\n updateReportModule: updateReportModuleV2,\n deleteReportModule: deleteReportModuleV2,\n findReportModuleSettings: findReportModuleSettingsV2,\n saveReportModuleSettings: saveReportModuleSettingsV2\n },template:{\n updateReportTemplate: updateReportTemplateV2\n }\n } ,\n report: {\n url: baseUrl + \"/report\",\n findReport: findReport,\n modules: getReportModules,\n getReportModulesList: getReportModulesList,\n save: saveReport,\n update: updateReport,\n list: listReport,\n search: searchReportData,\n moreAndMoreSearch: moreAndMoreSearch,\n comparativeSearch: comparativeSearch,\n rangeSearch: rangeSearch,\n facetSearch: facetSearch,\n //facets: getfacets,\n delete: deleteReport,\n findDateFormats: findDateFormats,\n findTimeFormats: findTimeFormats,\n addDateFormat: addDateFormat,\n addTimeFormat: addTimeFormat,\n //dashboard: getReportDashboard,\n findDashboardCategory: findDashboardCategory,\n findDashboardMultiBar: findDashboardMultiBar,\n getReportCategories: getReportCategories,\n //addCategoryDocument: addCategoryDocument,\n //deleteCategoryDocument: deleteCategoryDocument,\n //addSentimentDocument: addSentimentDocument,\n //addAspectSentimentDocument: addAspectSentimentDocument,\n //removeAspectSentimentDocument: removeAspectSentimentDocument,\n //controlDocumentEditedFlag: controlDocumentEditedFlag,\n //controlDocumentFlag: controlDocumentFlag,\n //clearEditedFlagDocument: clearEditedFlagDocument,\n //readyDocument: readyDocument,\n //removeDocument: removeDocument,\n //assignDocument: assignDocument,\n assignToUsers: assignToUsers,\n //unassignDocument: unassignDocument,\n exportDocuments: exportDocuments,\n partialDownloadDocuments: partialDownloadDocuments,\n getBookmarks: getBookmarks,\n saveBookmark: saveBookmark,\n saveGeneralBookmark: saveGeneralBookmark,\n deleteBookmark: deleteBookmark,\n getReportIndicators: getReportIndicators,\n getProcesses: getProcesses,\n //deleteReportData: deleteReportData,\n removeReportDocuments:removeReportDocuments,\n findQueueActive:findQueueActive,\n uploadFileInfos:findReportUploadFileInfos,\n uploadFileDataQueue:uploadReportFileDataQueue,\n uploadFileQueue:uploadReportFileQueue,\n saveFileMappings:saveFileMappings,\n findFileMappings:findFileMappings,\n findUploadFileMappingTemplatesByReport:findUploadFileMappingTemplatesByReport,\n addUploadFileMappingsTemplate:addUploadFileMappingsTemplate,\n findUploadFilePreviewTemplatesByReport:findUploadFilePreviewTemplatesByReport,\n saveUploadFilePreviewTemplate:saveUploadFilePreviewTemplate,\n findFileSettings:findFileSettings,\n getUploadFileSummary:getUploadFileSummary,\n keywords: getReportKeywords,\n nonCategorizedKeywords: getReportNonCategrizedKeywords,\n getStopWords:getReportStopWords,\n putStopWords:putReportStopWords,\n deleteStopWords:deleteReportStopWords,\n getStopLabels:getReportStopLabels,\n postStopLabels:postReportStopLabels,\n deleteStopLabels:deleteReportStopLabels,\n reEvaluateReport: reEvaluateReport,\n reportModules: reportModules,\n reportSettingsIndicators: reportSettingsIndicators,\n updateReportDefaultTemporalSentimentOption:updateReportTemporalSentimentOption,\n reportFields: reportFields,\n reportFieldsCategoryValues: reportFieldsCategoryValues,\n changeReportFieldCategoryValue: changeReportFieldCategoryValue,\n saveIndicators: saveIndicators,\n removeIndicators: removeIndicators,\n saveReportSettings: saveReporttSettings,\n uploadFeedback: uploadFeedback,\n saveFeedbackPeriod: saveFeedbackPeriod,\n getFeedbackPeriods: getFeedbackPeriods,\n deleteFeedbackPeriod: deleteFeedbackPeriod,\n //saveNote: saveNote,\n //removeNote: removeNote,\n checkTrain: checkTrain,\n //findDensityChart: findDensityChart,\n //findCategorySentimentVariance: findCategorySentimentVariance,\n //findSentimentVariance: findSentimentVariance,\n //findCategoryMonthChart: findCategoryMonthChart,\n //findDashboardMatrixField: findDashboardMatrixField,\n //findNewestDocumentDate: findNewestDocumentDate,\n findDashboardTemplates: findDashboardTemplates,\n saveReportField:saveReportField,\n mapReportFields: mapReportFields,\n saveFacetOrders: saveFacetOrders,\n isOrderActive: isOrderActive,\n findRules:findReportRules,\n saveRule: saveReportRule,\n createDocumentFormula: createDocumentReportFormula,\n createAttributeFormula: createAttributeReportFormula,\n validateFormula: validateReportFormula,\n updateFormula : updateReportFormula,\n findFormulas : findReportFormulas,\n deleteFormula : deleteReportFormula,\n testFormula: testReportFormula,\n getPreviousViewDate: getPreviousViewDate,\n getReportAttributeScores: getReportAttributeScores,\n test: reportTest,\n settings:{\n findReportCategoryThresholds: findReportCategoryThresholds,\n saveCategoryThreshold:saveCategoryThreshold,\n saveCategoryLimit:saveCategoryLimit,\n findReportLimitSettings:findReportLimitSettings,\n removeCategoryThreshold:removeCategoryThreshold,\n saveOrUpdateThresholdSettings: saveOrUpdateThresholdSettings,\n findReportThresholdSettings: findReportThresholdSettings,\n findDeletedDocumentsBatch: findDeletedDocumentsBatch,\n recycleDeletedDocumentsBatch: recycleDeletedDocumentsBatch,\n updateReportFacetOrder:updateReportFacetOrder,\n updateReportDefaultDateSettings:updateReportDefaultDateSettings,\n findReportDefaultDateSettings: findReportDefaultDateSettings,\n saveDatePeriodSettings: saveDatePeriodSettings,\n getDatePeriodSettings: getDatePeriodSettings\n },\n document: {\n addSentiment:reportDocumentAddSentiment,\n addAspectSentiment:reportDocumentAddAspectSentiment,\n removeAspectSentiment:reportDocumentRemovoeAspectSentiment,\n ready:reportReadyDocument,\n unready:reportUnReadyDocument,\n addNote: reportDocumentAddNote,\n completeAction: completeAction,\n updateNote:reportDocumentUpdateNote,\n removeNote: reportDocumentRemoveNote,\n assign: reportDocumentAssign,\n unassign: reportDocumentUnAssign,\n flag:reportDocumentFlag,\n unflag: reportDocumentUnFlag,\n trash:reportDocumentTrash,\n untrash:reportDocumentUnTrash,\n removeCategory:reportDocumentRemoveCategory,\n addCategory: reportDocumentAddCategory,\n userTags: userTags,\n saveUserTag: saveUserTag,\n removeUserTag: removeUserTag,\n updateSingleModuleCategory: reportDocumentSingleModuleUpdateCategory,\n confirmClassification: confirmClassification,\n unconfirmClassification: unconfirmClassification\n },\n alert: {\n hasSubscription: hasSubscription,\n subscribe: subscribe,\n unsubscribe: unsubscribe,\n saveKeywords: saveAlertKeywords,\n getKeywords: getAlertKeywords,\n getPeriod: getAlertPeriod,\n savePeriod: saveAlertPeriod\n },\n operation: {\n saveCategorySuccessRates: saveCategorySuccessRates,\n categoryChangeOperationResults: getCategoryChangeOperationResults\n }\n }, toolbar: {\n findNotifications: findNotifications,\n updateLastSeenNotification: updateLastSeenNotification\n }, saml: {\n samlActive: samlActive\n }, settings: {\n url: baseUrl + '/settings',\n saveSettings: saveUserSettings,\n findSettings: findUserSettings,\n saveReportSettings: saveReportSettings,\n findReportSettings: findReportSettings,\n saveFormulaTableSettings: saveFormulaTableSettings,\n findFormulaTableSettings: findFormulaTableSettings,\n saveFilterChipsSettings: saveFilterChipsSettings,\n findFilterChipsSettings: findFilterChipsSettings,\n getCategoryDataCompareSettings: getCategoryDataCompareSettings,\n saveCategoryDataCompareSettings: saveCategoryDataCompareSettings,\n saveDatePeriodSettings: saveDatePeriodSettings,\n getDatePeriodSettings: getDatePeriodSettings,\n deleteDatePeriodSettings: deleteDatePeriodSettings,\n saveAlertItem: saveAlertItem,\n updateAlertItem: updateAlertItem,\n getAlertItems: getAlertItems,\n deleteAlertItem: deleteAlertItem\n }, webConfiguration: {\n isUserRegisterRequestFormActive: isUserRegisterRequestFormActive,\n isMailActive: isMailActive,\n getDemoFormUrl: getDemoFormUrl,\n getLoginSettings: getLoginSettings,\n isJiraHelpDeskActive: isJiraHelpDeskActive,\n webconfigurations: webconfigurations\n }, captcha: {\n getCaptcha: getCaptcha,\n getNewCaptcha: getNewCaptcha,\n getInvalidConnectionCount: getInvalidConnectionCount\n }, audits: {\n url: baseUrl + '/audits',\n getReportDocumentAudits: getReportDocumentAudits,\n save: saveAudit\n }, source: {\n url: baseUrl + '/source',\n getCategories: getRuleCategories,\n getSitesByName: getSitesByName,\n getSiteTypes: getSiteTypes,\n getContentTypes: getContentTypes,\n getLanguages: getRuleLanguages,\n getKeywords: getRuleKeywords,\n saveKeyword: saveRuleKeywords,\n saveTopic: saveTopic,\n topics: topics,\n templateTopics: templateTopics,\n allTopics: allTopics,\n exportTemplateTopics: exportTemplateTopics, \n saveTemplate: saveTemplate,\n getTemplate: getTemplate,\n getTemplates: getTemplates,\n saveSystemRules: saveSystemRules,\n getSystemRules: getSystemRules,\n copyWebsource: copyWebsource,\n bindTemplate: bindTemplate,\n unbindTemplate: unbindTemplate,\n workspaceRules: workspaceRules,\n getReportTemplates: getReportTemplates,\n removeTemplate: removeTemplate,\n removeTopic: removeTopic,\n searchRule: searchRule,\n getRuleLookupMap: getRuleLookupMap,\n getSimilarityRate: getSimilarityRate,\n saveSimilarityRate: saveSimilarityRate,\n sourceUrlRuleTrace: sourceUrlRuleTrace\n }, localization: {\n url: baseUrl + '/localization',\n findLocalVariables: findLocalVariables,\n saveLocalVariables: saveLocalVariables,\n removeLocalVariables: removeLocalVariables\n }\n };\n \n // implementation\n //Module\n function saveModule(item) {\n var path = api.module.url;\n var def = $q.defer();\n $http.post(path, item)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to save module');\n });\n\n return def.promise;\n }\n\n function deleteModule(item) {\n var path = api.module.url + '/' + 'delete';\n var def = $q.defer();\n $http.post(path, item)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to delete module');\n });\n\n return def.promise;\n }\n\n function getPipeline(pipelineId) {\n var path = api.pipeline.url + '/' + pipelineId;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get pipeline\");\n });\n return def.promise;\n }\n\n function savePipeline(item) {\n var path = api.pipeline.url + '/' + 'save';\n var def = $q.defer();\n $http.post(path, item)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to save pipeline');\n });\n\n return def.promise;\n }\n\n function updatePipeline(item) {\n var path = api.pipeline.url + '/' + 'update';\n var def = $q.defer();\n $http.post(path, item)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to update pipeline');\n });\n\n return def.promise;\n }\n\n function deletePipeline(item) {\n var path = api.pipeline.url + '/' + 'delete';\n var def = $q.defer();\n $http.post(path, item)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to delete pipeline');\n });\n\n return def.promise;\n }\n\n\n\n function getModule(moduleId) {\n var path = api.module.url + '/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get module\");\n });\n return def.promise;\n }\n\n function addHierCategory(item) {\n var path = api.module.url + '/' + 'addHierCategory';\n var def = $q.defer();\n $http.post(path, item)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to add category');\n });\n\n return def.promise;\n }\n\n function replaceCategory(item) {\n var path = api.module.url + '/' + 'replaceCategory';\n var def = $q.defer();\n $http.post(path, item)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function(e) {\n def.reject('Failed to replace category');\n });\n\n return def.promise;\n }\n\n function deleteHierCategory(item) {\n var path = api.module.url + '/' + 'deleteHierCategory';\n var def = $q.defer();\n $http.post(path, item)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to delete category');\n });\n\n return def.promise;\n }\n\n function addModuleField(item, moduleId) {\n var path = api.module.url + '/' + moduleId + '/addField';\n var def = $q.defer();\n $http.post(path, item)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to add module field');\n });\n\n return def.promise;\n }\n\n function deleteModuleField(fieldName, moduleId ) {\n var path = api.module.url + '/' + moduleId + '/deleteField/' + fieldName;\n var def = $q.defer();\n $http.post(path)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to delete category');\n });\n\n return def.promise;\n }\n\n\n function getModuleReports(moduleId) {\n var path = api.module.url + \"/reports/\" + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get module reports\");\n });\n return def.promise;\n }\n\n function getModules() {\n var path = api.module.url;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get modules\");\n });\n return def.promise;\n }\n\n function getModuleTypes() {\n var path = api.module.url + '/' + 'types';\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get module types\");\n });\n return def.promise;\n }\n\n function getModuleFamily(moduleId){\n var path = api.module.url + '/' + moduleId + '/family';\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get module family\");\n });\n return def.promise;\n }\n\n function getClassifierModules() {\n var path = api.module.url + '/' + 'classifiers';\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get classifiers\");\n });\n return def.promise;\n }\n\n function getStages() {\n var path = api.module.url + '/' + 'stages';\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get stages\");\n });\n return def.promise;\n }\n\n function getDefinitions(code) {\n var path = api.pipeline.url + '/' + 'definition' + '/' + code;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get stages\");\n });\n return def.promise;\n }\n\n function getFeatureExtractors(moduleId) {\n var path = api.module.url + '/' + 'feature' + '/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get stages\");\n });\n return def.promise;\n }\n\n function getScoringType(moduleId) {\n var path = api.module.url + '/' + 'scoring' + '/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get stages\");\n });\n return def.promise;\n }\n\n function getClassifierType(moduleId) {\n var path = api.module.url + '/' + 'classifierType' + '/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get classifier type\");\n });\n return def.promise;\n }\n\n function getClassifierSource(moduleId) {\n var path = api.module.url + '/' + 'classifierSource' + '/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get stages\");\n });\n return def.promise;\n }\n\n function getSplitterType(moduleId) {\n var path = api.module.url + '/' + 'splitterType' + '/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get splitter Type\");\n });\n return def.promise;\n }\n\n function getLearningRates(moduleId) {\n var path = api.module.url + '/' + 'learningRates' + '/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get learning rates\");\n });\n return def.promise;\n }\n\n function getBatchSize(moduleId) {\n var path = api.module.url + '/' + 'batchSize' + '/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get batch size\");\n });\n return def.promise;\n }\n\n function getEpochNumbers(moduleId) {\n var path = api.module.url + '/' + 'epochNumbers' + '/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get epoch numbers\");\n });\n return def.promise;\n }\n\n function getMaxTokenLength(moduleId) {\n var path = api.module.url + '/' + 'maxTokenLength' + '/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get max token length\");\n });\n return def.promise;\n }\n\n function getTestSplitRatio(moduleId) {\n var path = api.module.url + '/' + 'testSplitRatio' + '/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get test split ratio\");\n });\n return def.promise;\n }\n\n function getTrainAlgorithm(moduleId) {\n var path = api.module.url + '/' + 'trainAlgorithm' + '/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get train algorithm\");\n });\n return def.promise;\n }\n\n function getProcessUnit(moduleId) {\n var path = api.module.url + '/' + 'processUnit' + '/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get process unit\");\n });\n return def.promise;\n }\n\n function getTestEvaluateRatio(moduleId) {\n var path = api.module.url + '/' + 'testEvaluateRatio' + '/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get test rate\");\n });\n return def.promise;\n }\n \n function getTrainAlgorithmTypes() {\n var path = api.module.url + '/' + 'trainAlgorithmTypes';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get train algorithm types\");\n });\n return def.promise;\n }\n\n function getProcessUnits() {\n var path = api.module.url + '/' + 'processUnits';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get model process units\");\n });\n return def.promise;\n }\n\n function getSentimentLanguage(moduleId) {\n var path = api.module.url + '/' + 'sentiment' + '/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get stages\");\n });\n return def.promise;\n }\n\n function getModuleDefinitions(code) {\n var path = api.module.url + '/' + 'definition' + '/' + code;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get stages\");\n });\n return def.promise;\n }\n\n function findReport(reportid) {\n var path = api.report.url + '/' + reportid;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get report\");\n });\n return def.promise;\n }\n\n function getReportModulesList(reportid) {\n var path = api.report.url + '/' + 'modules' + '/' + reportid;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get report modules\");\n });\n return def.promise;\n }\n\n function listPipeline() {\n var path = api.pipeline.url + '/' + 'list';\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get pipelines\");\n });\n return def.promise;\n }\n\n //getPipelines\n\n function getCategories(moduleId) {\n var path = api.module.url + '/' + 'categories' + '/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get categories\");\n });\n return def.promise;\n }\n \n function pageableCategories(moduleId, parentId, search, page) {\n search = search == \"\" ? null : search;\n var path = baseUrl + '/modulecategory/' + moduleId + '/' + search + '/' + parentId + '?page=' + page + '&size=10&sort=name';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get categories\");\n });\n return def.promise;\n }\n\n function getCategoryTree(moduleId) {\n var path = api.module.url + '/' + 'categoryTree' + '/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get categories\");\n });\n return def.promise;\n }\n\n function addCategory(item) {\n var path = api.module.url + '/' + 'addcategory';\n var def = $q.defer();\n $http.post(path, item)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to add category');\n });\n\n return def.promise;\n }\n\n function deleteCategory(item) {\n var path = api.module.url + '/' + 'deletecategory';\n var def = $q.defer();\n $http.post(path, item)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to delete category');\n });\n\n return def.promise;\n }\n\n function runTrain(moduleId, evaluate) {\n var path = api.module.url + '/' + 'train';\n var def = $q.defer();\n var item = {\n \"moduleId\": moduleId\n };\n if(evaluate!=undefined){\n item.evaluate = evaluate;\n }\n $http.post(path, item)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to train');\n });\n\n return def.promise;\n }\n\n function getLatestTrain(moduleId) {\n var path = api.module.url + '/' + 'train' + '/' + 'latest' + '/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get latest train\");\n });\n return def.promise;\n }\n\n function getLatestTrainInfo(moduleId) {\n var path = api.module.url + '/' + 'train' + '/' + 'info' + '/' + 'latest' + '/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get latest train info\");\n });\n return def.promise;\n }\n\n //Samples\n function saveSamples(moduleId, items) {\n var path = api.samples.url + '/save/' + moduleId;\n var def = $q.defer();\n $http.post(path, items)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to save samples');\n });\n\n return def.promise;\n }\n\n function searchSamples(query) {\n var path = api.samples.url + '/search';\n var def = $q.defer();\n $http.post(path, query)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function(response) {\n $log.error(response);\n def.reject('Failed to search samples');\n });\n\n return def.promise;\n }\n\n function searchSamplePageable(query, parentId, search, page) {\n search = search == \"\" ? null : search;\n var path = api.samples.url + '/search/pageable/' + search + '/' + parentId + '?page=' + page + '&size=10&sort=name';\n var def = $q.defer();\n $http.post(path, query)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function (response) {\n $log.error(response);\n def.reject('Failed to search samples');\n });\n\n return def.promise;\n }\n\n function findSimilarity(moduleId) {\n var path = api.samples.url + '/similarity/' + moduleId + '/trigger';\n var def = $q.defer();\n $http.get(path)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function(response) {\n $log.error(response);\n def.reject('Failed to analyze data');\n });\n\n return def.promise;\n }\n\n function findLatestAnalysis(moduleId) {\n var path = api.samples.url + '/similarity/analysis/latest/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function (response) {\n $log.error(response);\n def.reject('Failed to get latest analysis');\n });\n\n return def.promise;\n }\n\n /*function checkStatus() {\n var path = api.samples.url + '/similarity/status';\n var def = $q.defer();\n $http.get(path)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function(response) {\n $log.error(response);\n def.reject('Failed to check status');\n });\n\n return def.promise;\n }*/\n\n function deleteSamples(query) {\n var path = api.samples.url + '/delete';\n var def = $q.defer();\n $http.post(path, query)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function(response) {\n $log.error(response);\n def.reject('Failed to delete samples');\n });\n\n return def.promise;\n }\n function deleteSamplesById(query) {\n var path = api.samples.url + '/deleteById';\n var def = $q.defer();\n $http.post(path, query)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function(response) {\n $log.error(response);\n def.reject('Failed to delete samples');\n });\n\n return def.promise;\n }\n\n function findLastProcessTrace(processId) {\n var path = api.samples.url + '/process/' + processId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to get last process');\n });\n\n return def.promise;\n }\n\n\n\n function classify(item) {\n var path = api.classification.url + '/' + item.moduleId + '/classify/v2';\n var data = {\n \"text\": item.text\n };\n if(typeof(item.nominals)!= 'undefined'){\n data.nominals = item.nominals;\n }\n if(typeof(item.reals)!= 'undefined'){\n data.reals = item.reals;\n }\n var def = $q.defer();\n console.log(data);\n $http.post(path, data)\n .success(function(response, status) {\n def.resolve(response);\n })\n .error(function() {\n def.reject('Failed to classification');\n });\n\n return def.promise;\n }\n\n function classifyCompare(item) {\n var path = api.classification.url + '/' + item.moduleId + '/classifyCompare/v2';\n var data = {\n \"text\": item.text\n };\n if(typeof(item.nominals)!= 'undefined'){\n data.nominals = item.nominals;\n }\n if(typeof(item.reals)!= 'undefined'){\n data.reals = item.reals;\n }\n if(typeof(item.trainIds)!= 'undefined'){\n data.trainIds = item.trainIds;\n }\n var def = $q.defer();\n console.log(data);\n $http.post(path, data)\n .success(function(response, status) {\n def.resolve(response);\n })\n .error(function() {\n def.reject('Failed to classification');\n });\n\n return def.promise;\n }\n \n function findModuleTrains(moduleId) {\n var path = api.module.url + '/' + moduleId + \"/moduletrains?includeLatest=false\";\n var def = $q.defer();\n \n $http.get(path)\n .success(function(response, status) {\n def.resolve(response);\n })\n .error(function() {\n def.reject('Failed to classification compare');\n });\n\n return def.promise;\n }\n \n function getStatistics(moduleId) {\n var path = api.classification.url + '/statistics/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get statistics\");\n });\n return def.promise;\n }\n\n function getKeywords(moduleId, categoryId) {\n var path = api.classification.url + '/keywords/' + moduleId + '/' + categoryId;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get keywords\");\n });\n return def.promise;\n }\n\n function searchEvaluation(moduleId, searchText, startCount, count, orderField, orderType, actualCategory, predictedCategory) {\n var data = {\n moduleId: moduleId,\n searchText: searchText,\n startNumber: startCount,\n rowNumber: count,\n orderField: orderField,\n orderType: orderType,\n actualCategory: actualCategory,\n predictedCategory: predictedCategory\n };\n var path = api.classification.url + '/evaluation';\n var def = $q.defer();\n $http.post(path, data)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function(response) {\n $log.error(response);\n def.reject('Failed to delete samples');\n });\n\n return def.promise;\n }\n\n function getEvaluationCount(moduleId, searchText, actualCategory, predictedCategory) {\n var data = {\n moduleId: moduleId,\n searchText: searchText,\n actualCategory: actualCategory,\n predictedCategory: predictedCategory\n };\n var path = api.classification.url + '/evaluationCount';\n var def = $q.defer();\n $http.post(path, data)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function(response) {\n $log.error(response);\n def.reject('Failed to delete samples');\n });\n\n return def.promise;\n }\n\n function getClassificationRules(moduleId, categoryId) {\n var path = api.classification.url + '/classification-rules/' + moduleId + '/' + categoryId;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get classification rules\");\n });\n return def.promise;\n }\n\n function getConfusions(moduleId, categoryId) {\n var path = api.classification.url + '/confusions/' + moduleId + '/' + categoryId;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get evaluations\");\n });\n return def.promise;\n }\n\n function getSampleCounts(moduleId) {\n var path = api.samples.url + '/counts/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get sample counts\");\n });\n return def.promise;\n }\n\n function hasData(moduleId) {\n var path = api.module.url + '/hasdata/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get has samples\");\n });\n return def.promise;\n }\n\n\n function singleSentiment(item) {\n var path = api.sentiment.url + '/' + item.moduleId + '/single';\n var data = {\n \"text\": item.text\n };\n var def = $q.defer();\n $http.post(path, data)\n .success(function(response, status) {\n def.resolve(response);\n })\n .error(function() {\n def.reject('Failed to single sentiment');\n });\n\n return def.promise;\n }\n\n function findNamedEntities(item) {\n var path = api.namedentity.url + '/' + item.moduleId + '/find';\n var data = {\n \"text\": item.text\n };\n var def = $q.defer();\n $http.post(path, data)\n .success(function(response, status) {\n def.resolve(response);\n })\n .error(function() {\n def.reject('Failed to named entities');\n });\n\n return def.promise;\n }\n\n function getTopics(moduleId) {\n var path = api.topicmodeling.url + '/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get topics\");\n });\n return def.promise;\n }\n\n function getTopicSampleCounts(moduleId) {\n var path = api.topicmodeling.url + '/sample/counts/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get topics sample counts\");\n });\n return def.promise;\n }\n\n function getClusters(moduleId) {\n var path = api.clustering.url + '/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get clusters\");\n });\n return def.promise;\n }\n\n function getClusterSampleCounts(moduleId) {\n var path = api.clustering.url + '/sample/counts/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get clustering sample counts\");\n });\n return def.promise;\n }\n\n function getStopLabels(moduleId) {\n var path = api.clustering.url + '/stoplabels/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get stoplabels\");\n });\n return def.promise;\n }\n\n function getStopWords(moduleId) {\n var path = api.clustering.url + '/stopwords/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get stopwords\");\n });\n return def.promise;\n }\n\n function deleteStopLabel(stopLabel) {\n var path = api.clustering.url + '/stoplabels/delete';\n var def = $q.defer();\n $http.post(path, stopLabel)\n .success(function(response, status) {\n def.resolve(response);\n })\n .error(function() {\n def.reject(\"Failed to delete stoplabel\");\n });\n return def.promise;\n }\n\n function deleteStopWord(stopWord) {\n var path = api.clustering.url + '/stopwords/delete';\n var def = $q.defer();\n $http.post(path, stopWord)\n .success(function(response, status) {\n def.resolve(response);\n })\n .error(function() {\n def.reject(\"Failed to delete stopword\");\n });\n return def.promise;\n }\n\n function saveStopLabel(stopLabel) {\n console.log(stopLabel);\n var data = {\n \"word\": stopLabel.word,\n \"moduleId\": stopLabel.moduleId,\n \"id\": 0\n }\n var path = api.clustering.url + '/stoplabels/add';\n var def = $q.defer();\n $http.post(path, data)\n .success(function(response, status) {\n def.resolve(response);\n })\n .error(function() {\n def.reject(\"Failed to save stoplabel\");\n });\n return def.promise;\n }\n\n function saveStopWord(stopWord) {\n\n var data = {\n \"word\": stopWord.word,\n \"moduleId\": stopWord.moduleId,\n \"id\": 0\n }\n var path = api.clustering.url + '/stopwords/add';\n var def = $q.defer();\n $http.post(path, data)\n .success(function(response, status) {\n def.resolve(response);\n })\n .error(function() {\n def.reject(\"Failed to save stopword\");\n });\n return def.promise;\n }\n\n function addClassificationRule(rule) {\n var path = api.classification.url + \"/classification-rules/add\";\n var def = $q.defer();\n $http.post(path, rule)\n .success(function(response, status) {\n def.resolve(response);\n })\n .error(function() {\n def.reject(\"Failed to save rule\");\n });\n return def.promise;\n }\n\n function deleteClassificationRule(rule) {\n var path = api.classification.url + \"/classification-rules/delete\";\n var def = $q.defer();\n $http.post(path, rule)\n .success(function(response, status) {\n def.resolve(response);\n })\n .error(function() {\n def.reject(\"Failed to save rule\");\n });\n return def.promise;\n }\n\n function getClassifier(moduleId) {\n var path = api.rootcause.url + '/classifier/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get classifier\");\n });\n return def.promise;\n }\n\n function getRootCauseSampleCounts(moduleId) {\n var path = api.rootcause.url + '/sample/counts/' + moduleId;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get rootcause sample counts\");\n });\n return def.promise;\n }\n\n function getRootCauseResults(moduleId, categoryId) {\n var path = api.rootcause.url + '/results/' + moduleId + '/' + categoryId;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get rootcause results\");\n });\n return def.promise;\n }\n\n function getRootCauseAnalysis(moduleId) {\n var path = api.rootcause.url + '/analysis/' + moduleId;\n //var path = \"app/data/data.json\";\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get rootcause analysis\");\n });\n return def.promise;\n }\n\n function register(item) {\n var path = 'api/register';\n var def = $q.defer();\n $http.post(path, item)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to register');\n });\n\n return def.promise;\n }\n\n\n function loginV2(item) {\n var path = '/web/auth/login';\n var def = $q.defer();\n $http.post(path, item)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function (data, status) {\n var response = {\n status: status,\n message: data && data.message ? data.message : 'Failed to login'\n }\n def.reject(response);\n });\n\n return def.promise;\n }\n \n function login(item) {\n var path = api.account.url + '/' + 'login';\n var def = $q.defer();\n $http.post(path, item)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function (data, status) {\n var response = {\n status: status,\n message: data && data.message ? data.message : 'Failed to login'\n }\n def.reject(response);\n });\n\n return def.promise;\n }\n\n function logout() {\n var path = baseUrl + '/' + 'oauth/token';\n var def = $q.defer();\n $http.post(path)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to logout');\n });\n\n return def.promise;\n }\n\n function samlLogout() {\n var path = '/' + 'web/auth/saml/logout';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to saml logout\");\n });\n return def.promise;\n }\n\n function forgotPassword(item) {\n var path = api.account.url + '/' + 'forgot';\n var def = $q.defer();\n $http.post(path, item)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to forgot password');\n });\n\n return def.promise;\n }\n\n function changePassword(item) {\n var path = api.account.url + '/' + 'change_password';\n var def = $q.defer();\n $http.post(path, item)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to change password');\n });\n\n return def.promise;\n }\n\n function changePass(item) {\n var path = api.account.url + '/' + 'changepassword';\n var def = $q.defer();\n $http.post(path, item)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to change password');\n });\n\n return def.promise;\n }\n\n\n function loginGitHub() {\n var path = api.account.url + '/' + 'externallogin';\n var item = {\n provider: \"GitHub\"\n };\n var def = $q.defer();\n $http.post(path, item)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to github login');\n });\n\n return def.promise;\n }\n\n function getCurrentUser() {\n var path = api.account.url + '/' + 'identity';\n var def = $q.defer();\n $http.get(path, {\n cache: false\n })\n .success(function(response) {\n def.resolve(response);\n })\n .error(function() {\n def.reject('Failed to get current user');\n });\n return def.promise;\n }\n\n function getUsernames() {\n var path = api.account.url + '/' + 'users';\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get usernames\");\n });\n return def.promise;\n }\n\n function resetPassword(item) {\n var path = '/api/anonymous/account/resetpassword';\n var def = $q.defer();\n $http.post(path, item)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get usernames\");\n });\n return def.promise;\n }\n \n\n function changePasswordUuid(item) {\n var path = '/api/anonymous/account/changepassworduuid';\n var def = $q.defer();\n $http.post(path, item)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get usernames\");\n });\n return def.promise;\n }\n \n function isPassChangeable(item) {\n var path = '/api/anonymous/account/passchangeableuser';\n var def = $q.defer();\n $http.post(path, item)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get usernames\");\n });\n return def.promise;\n }\n\n function deleteUserRegisterRequest(id) {\n var path = api.account.url + '/delete/userregisterrequest/' + id;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to delete user register request\");\n });\n return def.promise;\n }\n\n function saveUserDemoRequest(item) {\n var path = '/api/anonymous/account/save/userdemorequest';\n var def = $q.defer();\n $http.post(path, item)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to save user demo request\");\n });\n return def.promise;\n }\n \n function getReportModules() {\n var path = api.report.url + '/' + 'modules';\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get report modules\");\n });\n return def.promise;\n }\n\n function saveReport(item) {\n var path = api.report.url + '/' + 'save';\n var def = $q.defer();\n $http.post(path, item)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to save report');\n });\n\n return def.promise;\n }\n\n function updateReport(item) {\n var path = api.report.url + '/' + 'update';\n var def = $q.defer();\n $http.post(path, item)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to update report');\n });\n\n return def.promise;\n }\n\n function listReport() {\n var path = api.report.url + '/' + 'list';\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get reports\");\n });\n return def.promise;\n }\n\n function findDashboardCategory(req) {\n var path = api.report.url + '/dashboardcategory';\n var def = $q.defer();\n $http.post(path, req)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function(response) {\n $log.error(response);\n def.reject('Failed to search report data');\n });\n\n return def.promise;\n }\n\n function findDashboardMultiBar(req) {\n var path = api.report.url + '/dashboardMultiBar';\n var def = $q.defer();\n $http.post(path, req)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function(response) {\n $log.error(response);\n def.reject('Failed to search report data');\n });\n\n return def.promise;\n }\n\n function searchReportData(reportId, params) {\n params.facet = params.facet ? params.facet : [];\n //var encodedParams = Object.entries(params).map(function(kv){kv.map(encodeURIComponent).join(\"=\")} ).join(\"&\");\n var path = api.report.url + '/'+reportId+'/search';\n var config = {\n params: params/*,\n paramSerializer: '$httpParamSerializerJQLike'*/\n };\n var def = $q.defer();\n $http.post(path,params.facet, config)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function(response) {\n $log.error(response);\n def.reject('Failed to search report data');\n });\n\n return def.promise;\n }\n\n function moreAndMoreSearch(reportId, fieldName, offset, params) {\n params.facet = params.facet ? params.facet : [];\n var path = api.report.url + '/' + reportId + '/search/' + fieldName + '/' + offset;\n var config = {\n params: params/*,\n paramSerializer: '$httpParamSerializerJQLike'*/\n };\n var def = $q.defer();\n $http.post(path, params.facet, config)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function (response) {\n $log.error(response);\n def.reject('Failed to search report data');\n });\n\n return def.promise;\n }\n\n function rangeSearch(reportId) {\n var path = api.report.url + '/'+ reportId +'/search/rangeResults';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function (resp) {\n def.reject(\"Failed to get range results\");\n });\n return def.promise;\n }\n\n function facetSearch(reportId) {\n var path = api.report.url + '/'+ reportId +'/search/facetResults';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function (resp) {\n def.reject(\"Failed to get facet results\");\n });\n return def.promise;\n }\n \n function comparativeSearch(reportId, params) {\n //var encodedParams = Object.entries(params).map(function(kv){kv.map(encodeURIComponent).join(\"=\")} ).join(\"&\");\n var path = api.report.url + '/' + reportId + '/comparativeSearch';\n var config = {\n params: params/*,\n paramSerializer: '$httpParamSerializerJQLike'*/\n };\n var def = $q.defer();\n $http.get(path, config)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function (response) {\n $log.error(response);\n def.reject('Failed to search report data');\n });\n\n return def.promise;\n }\n /*\n function getfacets(query) {\n var path = api.report.url + '/facets';\n var def = $q.defer();\n $http.post(path, query)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function(response) {\n $log.error(response);\n def.reject('Failed to facets report data');\n });\n\n return def.promise;\n }*/\n\n function findDateFormats(){\n var path = api.report.url + '/dateFormats';\n var def = $q.defer();\n $http.get(path)\n .success(function(data){\n def.resolve(data);\n })\n .error(function(resp) {\n def.reject(\"Failed to get date formats\");\n });\n return def.promise;\n\n }\n\n function findTimeFormats(){\n var path = api.report.url + '/timeFormats';\n var def = $q.defer();\n $http.get(path)\n .success(function(data){\n def.resolve(data);\n })\n .error(function(resp) {\n def.reject(\"Failed to get time formats\");\n });\n return def.promise;\n\n }\n\n\n function addDateFormat(newFormat){\n var path = api.report.url + '/dateFormat';\n var def = $q.defer();\n $http.post(path,newFormat)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function(data, status) {\n var response = {\n status: status,\n message: data && data.message ? data.message : 'Failed to add date format'\n }\n def.reject(response);\n });\n return def.promise;\n }\n\n function addTimeFormat(newFormat){\n var path = api.report.url + '/timeFormat';\n var def = $q.defer();\n $http.post(path,newFormat)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function(data, status) {\n var response = {\n status: status,\n message: data && data.message ? data.message : 'Failed to add time format'\n }\n def.reject(response);\n });\n return def.promise;\n }\n /*\n function getReportDashboard(query) {\n var path = api.report.url + '/dashboard';\n var def = $q.defer();\n $http.post(path, query)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function(response) {\n $log.error(response);\n def.reject('Failed to get dashboard');\n });\n\n return def.promise;\n }*/\n\n function getReportCategories(id) {\n var path = api.report.url + '/' + 'getCategories/' + id;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function(resp) {\n def.reject(\"Failed to get categories\");\n });\n return def.promise;\n }\n\n function addCategoryDocument(req) {\n var path = api.report.url + '/' + 'add/category';\n var def = $q.defer();\n $http.post(path, req)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function(resp) {\n def.reject('Failed to add category');\n });\n\n return def.promise;\n }\n function addCategoryDocumentToModule(req) {\n var path = api.samples.url + '/' + 'add/category';\n var def = $q.defer();\n $http.post(path, req)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function(resp) {\n def.reject('Failed to add category');\n });\n\n return def.promise;\n }\n\n function addSentimentDocument(req) {\n var path = api.report.url + '/' + 'add/sentiment';\n var def = $q.defer();\n $http.post(path, req)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function(resp) {\n def.reject('Failed to add category');\n });\n\n return def.promise;\n }\n\n function addAspectSentimentDocument(req) {\n var path = api.report.url + '/' + 'aspect/add/sentiment';\n var def = $q.defer();\n $http.post(path, req)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function(resp) {\n def.reject('Failed to add aspect sentiment');\n });\n\n return def.promise;\n }\n\n function removeAspectSentimentDocument(req) {\n var path = api.report.url + '/' + 'aspect/remove/sentiment';\n var def = $q.defer();\n $http.post(path, req)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function(resp) {\n def.reject('Failed to remove aspect sentiment');\n });\n\n return def.promise;\n }\n\n function deleteCategoryDocument(req) {\n var path = api.report.url + '/' + 'delete/category';\n var def = $q.defer();\n $http.post(path, req)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function(resp) {\n def.reject('Failed to delete category');\n });\n\n return def.promise;\n }\n function deleteCategoryDocumentFromModule(req) {\n var path = api.samples.url + '/' + 'delete/category';\n var def = $q.defer();\n $http.post(path, req)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function(resp) {\n def.reject('Failed to delete category');\n });\n\n return def.promise;\n }\n\n function controlDocumentEditedFlag(req) {\n var path = api.report.url + '/' + 'control/editedflag';\n var def = $q.defer();\n $http.post(path, req)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function(resp) {\n def.reject('Failed to delete category');\n });\n\n return def.promise;\n }\n\n function controlDocumentFlag(req) {\n var path = api.report.url + '/' + 'control/flag';\n var def = $q.defer();\n $http.post(path, req)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function(resp) {\n def.reject('Failed to delete category');\n });\n\n return def.promise;\n }\n\n function clearEditedFlagDocument(req) {\n var path = api.report.url + '/' + 'clear/editedflag';\n var def = $q.defer();\n $http.post(path, req)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function(resp) {\n def.reject('Failed to delete category');\n });\n\n return def.promise;\n }\n\n function readyDocument(request) {\n var path = api.report.url + '/' + 'ready';\n var def = $q.defer();\n $http.post(path, request)\n .success(function(data, statuse) {\n def.resolve(data);\n })\n .error(function(resp) {\n def.reject(\"Failed to ready document\");\n });\n return def.promise;\n }\n\n function removeDocument(request) {\n var path = api.report.url + '/' + 'remove';\n var def = $q.defer();\n $http.post(path, request)\n .success(function(data, statuse) {\n def.resolve(data);\n })\n .error(function(resp) {\n def.reject(\"Failed to remove document\");\n });\n return def.promise;\n }\n\n function assignToUsers(workspaceId) {\n var path = api.report.url + '/' + 'usersToAssign';\n var def = $q.defer();\n $http.post(path, workspaceId)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to users to assign\");\n });\n return def.promise;\n }\n\n function assignDocument(request) {\n var path = api.report.url + '/' + 'assign/document';\n var def = $q.defer();\n $http.post(path, request)\n .success(function(data, statuse) {\n def.resolve(data);\n })\n .error(function(resp) {\n def.reject(\"Failed to ready document\");\n });\n return def.promise;\n }\n\n function unassignDocument(documentId) {\n var path = api.report.url + '/' + 'unassign/document/' + documentId;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to unassign document\");\n });\n return def.promise;\n }\n\n function exportDocuments(req) {\n var path = api.report.url + '/' + 'export';\n var def = $q.defer();\n $http.post(path, req)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to delete report');\n });\n\n return def.promise;\n }\n\n function deleteReport(item) {\n var path = api.report.url + '/' + 'delete';\n var def = $q.defer();\n $http.post(path, item)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to delete report');\n });\n\n return def.promise;\n }\n\n function getBookmarks(reportid) {\n var path = api.report.url + '/' + 'bookmark/get/' + reportid;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to get bookmarks');\n });\n\n return def.promise;\n }\n\n function saveBookmark(item) {\n var path = api.report.url + '/' + 'bookmark/save';\n var def = $q.defer();\n $http.post(path, item)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to save bookmark');\n });\n\n return def.promise;\n }\n\n function saveGeneralBookmark(item) {\n var path = api.report.url + '/' + 'bookmark/save/general';\n var def = $q.defer();\n $http.post(path, item)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to save bookmark');\n });\n\n return def.promise;\n }\n\n function deleteBookmark(item) {\n var path = api.report.url + '/' + 'bookmark/delete';\n var def = $q.defer();\n $http.post(path, item)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to delete bookmark');\n });\n\n return def.promise;\n }\n\n function getReportIndicators(reportid) {\n var path = api.report.url + '/' + 'settings/' + reportid;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to get indicators');\n });\n\n return def.promise;\n }\n\n function getProcesses(processid) {\n var path = api.report.url + '/' + 'process/' + processid;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to get processes');\n });\n\n return def.promise;\n }\n\n /*function deleteReportData(request) {\n var path = api.report.url + '/data/remove';\n var def = $q.defer();\n $http.post(path,request)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to delete Report Data');\n });\n\n return def.promise;\n }*/\n\n function findQueueActive(){\n var path = api.report.url + '/upload/queue/active';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get queue active info.\");\n });\n return def.promise;\n }\n\n function uploadReportFileQueue(reportId,file){\n var path = api.report.url + '/' + reportId + '/upload/queue';\n var def = $q.defer();\n $http.post(path,file)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function(response) {\n $log.error(response);\n def.reject('Failed to upload report file.');\n });\n return def.promise;\n }\n\n function uploadReportFileDataQueue(reportId,fileId,params){\n var path = api.report.url + '/' + reportId + '/upload/data/queue/' + fileId;\n var def = $q.defer();\n $http.post(path,params)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to upload report file data.');\n });\n return def.promise;\n }\n\n function saveFileMappings(reportId, fileId, uploadMappings){\n var path = api.report.url + '/' + reportId + '/upload/queue/mappings/' + fileId;\n var def = $q.defer();\n $http.post(path,uploadMappings)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to upload report file mappings.');\n });\n return def.promise;\n }\n\n function findFileMappings(reportId,fileId){\n var path = api.report.url + '/' + reportId + '/upload/queue/mappings/' + fileId;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to get report file mappings.');\n });\n return def.promise;\n }\n\n function findUploadFileMappingTemplatesByReport(reportId){\n var path = api.report.url + '/' + reportId + '/upload/queue/mappings/templates';\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to get report file mappings.');\n });\n return def.promise;\n }\n\n function addUploadFileMappingsTemplate(reportId, fileId){\n var path = api.report.url + '/' + reportId +'/upload/queue/mappings/templates';\n var def = $q.defer();\n $http.post(path,fileId)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function(response) {\n $log.error(response);\n def.reject('Failed to add report upload mapping template.');\n });\n return def.promise;\n }\n\n function findUploadFilePreviewTemplatesByReport(reportId){\n var path = api.report.url + '/' + reportId + \"/upload/preview/templates\";\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to get report preview templates.');\n });\n return def.promise;\n }\n\n function saveUploadFilePreviewTemplate(reportId, templateId, templateColumns, templateName){\n var path = api.report.url + '/' + reportId +'/upload/preview/template/'+templateId;\n var def = $q.defer();\n var request = {id:templateId, name: templateName, columns:templateColumns};\n $http.post(path,request)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function(response) {\n $log.error(response);\n def.reject('Failed to save report preview mapping template.');\n });\n return def.promise;\n }\n\n function findFileSettings(reportId, fileId){\n var path = api.report.url + '/' + reportId + '/upload/file/settings/'+fileId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get report upload file settings.\");\n });\n return def.promise;\n }\n\n function findReportUploadFileInfos(reportId){\n var path = api.report.url + '/' + reportId + '/upload/file/detail';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get report upload files detail.\");\n });\n return def.promise;\n }\n\n function getUploadFileSummary(reportId,fileId){\n var path = api.report.url + '/' + reportId + '/upload/file/summary/'+fileId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get report upload file data summary.\");\n });\n return def.promise;\n }\n\n function removeReportDocuments(reportId,request) {\n var path = api.report.url + '/'+reportId+'/document';\n var config = {\n params: request\n };\n var def = $q.defer();\n $http.delete(path,config)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to remove Report Documents');\n });\n\n return def.promise;\n }\n\n function getReportKeywords(reportId,params) {\n var path = api.report.url +'/' + reportId+ '/keywords';\n var def = $q.defer();\n var config = {\n params: params\n };\n $http.get(path, config)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function(response) {\n $log.error(response);\n def.reject('Failed to get report keywords');\n });\n\n return def.promise;\n }\n\n function getReportNonCategrizedKeywords(reportId, params) {\n var path = api.report.url + '/' + reportId + '/noncategorizedkeywords';\n var def = $q.defer();\n var config = {\n params: params\n };\n $http.get(path, config)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function (response) {\n $log.error(response);\n def.reject('Failed to get report noncategorized keywords');\n });\n\n return def.promise;\n }\n\n function getReportStopWords(reportId) {\n //#todo\n var path = api.report.url +'/stopWords/'+reportId;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function(response) {\n $log.error(response);\n def.reject('Failed to get report stop words');\n });\n return def.promise;\n }\n\n function putReportStopWords(reportId,words) {\n var path = api.report.url +'/stopWords/'+reportId;\n var def = $q.defer();\n $http.put(path,words)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function(response) {\n $log.error(response);\n def.reject('Failed to put report stop words');\n });\n return def.promise;\n }\n\n function deleteReportStopWords(reportId,words){\n var path = api.report.url +'/stopWords/'+reportId+'/delete';\n var def = $q.defer();\n $http.post(path,words)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function(response) {\n $log.error(response);\n def.reject('Failed to delete report stop words');\n });\n return def.promise;\n }\n\n\n function getReportStopLabels(reportId) {\n //#todo\n var path = api.report.url +'/'+reportId+'/keywords/blacklist';\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function(response) {\n $log.error(response);\n def.reject('Failed to get report stop labels');\n });\n return def.promise;\n }\n\n function postReportStopLabels(reportId,names) {\n var path = api.report.url +'/'+reportId+'/keywords/blacklist/add';\n var def = $q.defer();\n $http.post(path,names)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function(response) {\n $log.error(response);\n def.reject('Failed to post report stop label');\n });\n return def.promise;\n }\n\n function deleteReportStopLabels(reportId,names) {\n var path = api.report.url +'/'+reportId+'/keywords/blacklist/delete';\n var def = $q.defer();\n $http.post(path,names)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function(response) {\n $log.error(response);\n def.reject('Failed to delete report stop label');\n });\n return def.promise;\n }\n\n function getUsers() {\n var path = api.account.url + '/users';\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get users\");\n });\n return def.promise;\n }\n\n function saveUser(item) {\n var path = api.account.url + '/saveuser';\n var def = $q.defer();\n $http.post(path, item)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to save user');\n });\n\n return def.promise;\n }\n\n function deleteUser(item) {\n var path = api.account.url + '/deleteuser';\n var def = $q.defer();\n $http.post(path, item)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to delete user');\n });\n\n return def.promise;\n }\n\n function getRoles() {\n var path = api.account.url + '/roles';\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get roles\");\n });\n return def.promise;\n }\n\n function getRoleTypes() {\n var path = api.account.url + '/role/types' ;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get role types\");\n });\n return def.promise;\n }\n\n function getUserTypes() {\n var path = api.account.url + '/user/types' ;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get user types\");\n });\n return def.promise;\n }\n\n function getRolesByWorkspace(workspaceId) {\n var path = api.account.url + '/rolesbyworkspace' + \"/\" + workspaceId;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get roles by workspace\");\n });\n return def.promise;\n }\n\n function getUsersByRole(roleid) {\n var path = api.account.url + '/usersbyrole' + \"/\" + roleid;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get users by role\");\n });\n return def.promise;\n }\n\n function getPermissions(roleId) {\n var path = api.account.url + '/permissions' + \"/\" + roleId;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get permissions\");\n });\n return def.promise;\n }\n\n function getWorkspaces() {\n var path = api.account.url + '/workspaces';\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get workspaces\");\n });\n return def.promise;\n }\n\n function getRolesByWorkspaceIds(items) {\n var path = api.account.url + '/rolesbyworkspaceids';\n var def = $q.defer();\n $http.post(path, items)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to save role');\n });\n\n return def.promise;\n }\n\n function saveRole(item) {\n var path = api.account.url + '/saverole';\n var def = $q.defer();\n $http.post(path, item)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to save role');\n });\n\n return def.promise;\n }\n\n function deleteRole(item) {\n var path = api.account.url + '/deleterole';\n var def = $q.defer();\n $http.post(path, item)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to delete role');\n });\n\n return def.promise;\n }\n\n function saveWorkspace(item) {\n var path = api.account.url + '/saveworkspace';\n var def = $q.defer();\n $http.post(path, item)\n .success(function(data, status) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to save workspace');\n });\n\n return def.promise;\n }\n\n function saveManagementModule(moduleId,item){\n var path = api.management.url + '/module/'+moduleId;\n var def = $q.defer();\n $http.post(path,item)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to save management module\");\n });\n return def.promise;\n }\n\n function getManagementModules(params){\n var path = api.management.url + '/module';\n var config = {\n params: params\n };\n var def = $q.defer();\n $http.get(path,config)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get management modules\");\n });\n return def.promise;\n }\n\n function searchADGroup(q) {\n var path = api.account.url + '/ad/group?q='+q;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get workspaces\");\n });\n return def.promise;\n }\n\n function searchADUser(q) {\n var path = api.account.url + '/ad/user?q='+q;\n var def = $q.defer();\n $http.get(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject(\"Failed to get workspaces\");\n });\n return def.promise;\n }\n\n function findUserByEmail(email) {\n var path = api.account.url + '/userbyemail';\n var def = $q.defer();\n $http.post(path,email)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get user\");\n });\n return def.promise;\n }\n\n function findUserFilterFields(userId) {\n var path = api.account.url + '/userfilter/fields/' + userId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get user filter fields\");\n });\n return def.promise;\n }\n\n function findUserFilters(userId) {\n var path = api.account.url + '/userfilter/' + userId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get user filters\");\n });\n return def.promise;\n }\n\n function saveUserFilterFields(userId, filters) {\n var path = api.account.url + '/userfilter/save/' + userId;\n var def = $q.defer();\n $http.post(path, filters)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to save user filter fields\");\n });\n return def.promise;\n }\n\n function findUserRegisterRequests() {\n var path = api.account.url + '/userregisterrequests';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get user register requests\");\n });\n return def.promise;\n }\n\n function findUserDemoRequests() {\n var path = api.account.url + '/userdemorequests';\n var def = $q.defer();\n $http.post(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get user demo requests\");\n });\n return def.promise;\n }\n\n function activation(userId) {\n var path = api.account.url + '/user/activation/' + userId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to activate/deactivate user.\");\n });\n return def.promise;\n }\n\n function partialDownloadDocuments(request) {\n var path = api.report.url + '/export-aspect';\n var def = $q.defer();\n $http.post(path, item)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to download documents');\n });\n\n return def.promise;\n }\n\n function reEvaluateReport(request, reportId) {\n var path = api.report.url + '/' + reportId + '/reevaluate';\n var def = $q.defer();\n $http.post(path, request)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to reevaluate report');\n });\n\n return def.promise;\n }\n\n function uploadFeedback(req) {\n var path = api.report.url + '/uploadFeedback';\n var def = $q.defer();\n $http.post(path,req)\n .success(function (data,status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to upload feedback to modules of this report\");\n });\n return def.promise;\n }\n\n function saveFeedbackPeriod(reportId, moduleId, req) {\n var path = api.report.url + '/' + reportId + \"/\" + moduleId + \"/feedback/period/save\";\n var def = $q.defer();\n $http.post(path, req)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to save feedback period.\");\n });\n return def.promise;\n\n }\n\n function getFeedbackPeriods(reportId) {\n var path = api.report.url + '/' + reportId + \"/feedback/period/get\";\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get feedback periods\");\n });\n return def.promise;\n }\n\n function deleteFeedbackPeriod(reportId, moduleId) {\n var path = api.report.url + '/' + reportId + '/' + moduleId + \"/feedback/period/delete\";\n var def = $q.defer();\n $http.delete(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to delete feedback period.\");\n });\n return def.promise;\n }\n\n function reportModules(reportId) {\n var path = api.report.url + '/reportModules' + \"/\" + reportId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get report modules\");\n });\n return def.promise;\n }\n\n function reportSettingsIndicators(reportId) {\n var path = api.report.url + '/indicators' + \"/\" + reportId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get indicators\");\n });\n return def.promise;\n }\n\n function updateReportTemporalSentimentOption(reportId,option){\n var path = api.report.url+ '/' + reportId+'/temporalSentimentOption/'+option;\n var def = $q.defer();\n $http.put(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to update temporal sentiment option\");\n });\n return def.promise;\n }\n\n function reportFields(reportId) {\n var path = api.report.url + '/reportFields' + \"/\" + reportId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get report fields\");\n });\n return def.promise;\n }\n\n function changeReportFieldCategoryValue(request) {\n var path = api.report.url + '/reportFields/changefields';\n var def = $q.defer();\n $http.post(path, request)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to change report field category values\");\n });\n return def.promise;\n }\n\n function reportFieldsCategoryValues(request) {\n var path = api.report.url + '/reportFields/findCategoryValues';\n var def = $q.defer();\n $http.post(path,request)\n .success(function (data,status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get report fields category Values\");\n });\n return def.promise;\n }\n\n function saveIndicators(req) {\n var path = api.report.url + '/saveReportIndicator';\n var def = $q.defer();\n $http.post(path, req)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to save indicators');\n });\n\n return def.promise;\n }\n\n function removeIndicators(req) {\n var path = api.report.url + '/deleteReportIndicators';\n var def = $q.defer();\n $http.post(path, req)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to remove indicators');\n });\n\n return def.promise;\n }\n\n function saveReporttSettings(req) {\n var path = api.report.url + '/updateSettings';\n var def = $q.defer();\n $http.post(path, req)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to save settings');\n });\n\n return def.promise;\n }\n\n function saveFacetOrders(req) {\n var path = api.report.url + '/facetorder';\n var def = $q.defer();\n $http.post(path, req)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to save facet order.');\n });\n\n return def.promise;\n }\n\n function isOrderActive(reportId) {\n var path = api.report.url + '/isorderactive/' + reportId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to check if is order active.\");\n });\n return def.promise;\n }\n\n function findReportRules(reportId){\n var path = api.report.url + '/rules/' + reportId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get report rules.\");\n });\n return def.promise;\n }\n\n function findReportFormulas(reportId) {\n var path = api.report.url + '/formulas/' + reportId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get report rules.\");\n });\n return def.promise;\n }\n\n function validateReportFormula(reportId, reportFormula) {\n var path = api.report.url + '/'+reportId + '/formula/validate';\n var def = $q.defer();\n $http.post(path, reportFormula)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to save report rule');\n });\n\n return def.promise;\n }\n\n function updateReportFormula(reportId, settingId, reportFormula) {\n var path = api.report.url + '/'+reportId + '/formula/' + settingId;\n var def = $q.defer();\n $http.post(path, reportFormula)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to save report rule');\n });\n\n return def.promise;\n }\n\n function testReportFormula(reportId, reportFormula) {\n var path = api.report.url + '/' + reportId + '/formula/test';\n var def = $q.defer();\n $http.post(path, reportFormula)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function (response) {\n def.reject(response);\n });\n\n return def.promise;\n }\n\n function deleteReportFormula(reportId, settingId, reportFormula) {\n var path = api.report.url + '/'+reportId + '/formula/' + settingId;\n var def = $q.defer();\n $http.delete(path)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to save report rule');\n });\n\n return def.promise;\n }\n\n function createDocumentReportFormula(reportId, reportFormula) {\n var path = api.report.url + '/'+reportId + '/documentformula';\n var def = $q.defer();\n $http.post(path, reportFormula)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to save report rule');\n });\n\n return def.promise;\n }\n\n function createAttributeReportFormula(reportId, reportFormula) {\n var path = api.report.url + '/'+reportId + '/attributeformula';\n var def = $q.defer();\n $http.post(path, reportFormula)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to save report rule');\n });\n\n return def.promise;\n }\n\n function saveReportRule(reportId, reportRule){\n var path = api.report.url + '/'+reportId + '/rule';\n var def = $q.defer();\n $http.post(path, reportRule)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to save report rule');\n });\n\n return def.promise;\n }\n\n function saveNote(req) {\n var path = api.report.url + '/add/note';\n var def = $q.defer();\n $http.post(path, req)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to save note');\n });\n\n return def.promise;\n }\n\n function removeNote(req) {\n var path = api.report.url + '/remove/note';\n var def = $q.defer();\n $http.post(path, req)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to remove note');\n });\n\n return def.promise;\n }\n\n function checkTrain(reportId) {\n var path = api.report.url + '/check/train/' + reportId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to check module trains\");\n });\n return def.promise;\n }\n\n\n function findNotifications() {\n var path = baseUrl + '/notifications';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get notifications\");\n });\n return def.promise;\n }\n\n function updateLastSeenNotification() {\n var path = baseUrl + '/showNotification';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to show notifications\");\n });\n return def.promise;\n }\n\n function getPreviousViewDate(reportId) {\n var path = api.report.url + '/usage/previousViewDate/' + reportId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get previous view date\");\n });\n return def.promise;\n }\n\n function reportTest(reportId,req) {\n var path = api.report.url + '/' + reportId + '/test';\n var def = $q.defer();\n $http.post(path, req)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to test report.');\n });\n\n return def.promise;\n }\n /*\n function findDensityChart(req) {\n var path = api.report.url + '/dashboard/density/sentiment';\n var def = $q.defer();\n $http.post(path, req)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to get sentiment density data');\n });\n\n return def.promise;\n }*/\n /*\n function findCategorySentimentVariance(req) {\n var path = api.report.url + '/dashboard/category/sentiment/variance';\n var def = $q.defer();\n $http.post(path, req)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to get category sentiment variance data');\n });\n\n return def.promise;\n }*/\n /*\n function findSentimentVariance(req) {\n var path = api.report.url + '/dashboard/sentiment/variance';\n var def = $q.defer();\n $http.post(path, req)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to get sentiment variance data');\n });\n\n return def.promise;\n }*/\n /*\n function findCategoryMonthChart(req) {\n var path = api.report.url + '/dashboard/category/month';\n var def = $q.defer();\n $http.post(path, req)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to get category month chart data');\n });\n\n return def.promise;\n }*/\n /*\n function findDashboardMatrixField(req) {\n var path = api.report.url + '/dashboard/cross/field';\n var def = $q.defer();\n $http.post(path, req)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to get field matrix chart data');\n });\n\n return def.promise;\n }*/\n /*\n function findNewestDocumentDate(reportId) {\n var path = api.report.url + '/dashboard/newest/document/date/'+reportId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get newest document date\");\n });\n return def.promise;\n }*/\n\n function findDashboardTemplates(reportId) {\n var path = api.report.url + '/dashboard/templates/' + reportId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get report templates\");\n });\n return def.promise;\n }\n\n function saveReportField(reportField){\n var path = api.report.url + '/reportFields/save';\n var def = $q.defer();\n $http.post(path, reportField)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to save report field');\n });\n\n return def.promise;\n }\n\n function mapReportFields(request){\n var path = api.report.url + '/reportFields/map';\n var def = $q.defer();\n $http.post(path, request)\n .success(function (data, status) {\n def.resolve(data);\n })\n .error(function () {\n def.reject('Failed to map report field');\n });\n\n return def.promise;\n }\n\n function samlActive() {\n var path = 'web/auth/saml/active';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get saml active\");\n });\n return def.promise;\n }\n\n function isUserRegisterRequestFormActive() {\n var path = 'web/auth/userregisterrequestform/active';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get user register request\");\n });\n return def.promise;\n }\n \n function getDemoFormUrl() {\n var path = 'web/form/demoform/url';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get demo form url\");\n });\n return def.promise;\n }\n\n function getLoginSettings() {\n var path = 'web/form/login/settings';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get login settings\");\n });\n return def.promise;\n }\n\n function isMailActive() {\n var path = '/api/anonymous/configuration/mailactive';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get mail active\");\n });\n return def.promise;\n }\n\n function isJiraHelpDeskActive() {\n var path = 'web/auth/jirahelpdesk/active';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get jira help desk active\");\n });\n return def.promise;\n }\n\n function webconfigurations() {\n var path = 'web/auth/webconfigurations';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get jira help desk active\");\n });\n return def.promise;\n }\n\n function getInvalidConnectionCount() {\n var path = 'web/auth/invalidconnectioncount';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get user register request\");\n });\n return def.promise;\n }\n\n function getCaptcha() {\n var path = 'web/auth/captcha/generate';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to generate captcha\");\n });\n return def.promise;\n }\n\n function getNewCaptcha() {\n var path = 'web/auth/captcha/regenerate';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to regenerate captcha\");\n });\n return def.promise;\n }\n\n function saveDemoForm(form) {\n var path = 'web/form/demoform';\n var def = $q.defer();\n $http.post(path, form)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to save demo form\");\n });\n return def.promise;\n }\n\n function saveUserRegisterForm(form) {\n var path = 'web/form/userregisterform';\n var def = $q.defer();\n $http.post(path, form)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to save demo form\");\n });\n return def.promise;\n }\n\n function getReportDocumentAudits(documentId) {\n var path = api.audits.url + '/reportdocument/' + documentId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to find report document audits\");\n });\n return def.promise;\n }\n\n function getRuleCategories(wsid) {\n var path = api.source.url + '/rule/categories/'+wsid;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to find rule categories\");\n });\n return def.promise;\n }\n\n function getSitesByName(wsid,name) {\n var path = api.source.url + '/rule/sites/' + wsid + '/' + name;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to find sites\");\n });\n return def.promise;\n }\n \n function getSiteTypes(wsid) {\n var path = api.source.url + '/rule/sitetypes/' + wsid;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to find site types\");\n });\n return def.promise;\n }\n\n function getContentTypes(wsid) {\n var path = api.source.url + '/rule/contenttypes/' + wsid;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to find content types\");\n });\n return def.promise;\n }\n function getRuleLookupMap(wsid, showAll){\n if(showAll == undefined){\n showAll = false;\n }\n var path = api.source.url +\"/rule-map/\"+wsid +\"?show-all=\"+(showAll +\"\");\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function (error) {\n def.reject(error);\n });\n return def.promise;\n }\n function getRuleLanguages(wsid) {\n var path = api.source.url + '/rule/languages/' + wsid;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to find rule languages\");\n });\n return def.promise;\n }\n \n function getRuleKeywords(wsid, name) {\n var path = api.source.url + '/rule/keywords/' + wsid;\n var def = $q.defer();\n $http.post(path, name)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to find rule keywords\");\n });\n return def.promise;\n }\n\n function saveRuleKeywords(wsid, keyword) {\n var path = api.source.url + '/rule/keywords/save/' + wsid;\n var def = $q.defer();\n $http.post(path, keyword)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to save rule keyword\");\n });\n return def.promise;\n }\n \n function saveTopic(topic) {\n var path = api.source.url + '/topic/save';\n var def = $q.defer();\n console.log(topic)\n $http.post(path, topic)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function (error) {\n def.reject(error);\n });\n return def.promise;\n }\n\n function exportTemplateTopics(wsid, templateId){\n \n if(templateId == undefined || templateId == null){\n templateId = '';\n }\n var path = api.source.url + '/export-template-topics'+\"?templateId=\"+templateId+\"&workspace=\"+wsid;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function (error) {\n $log.error(error);\n def.reject(\"Failed to save rule keyword\");\n });\n return def.promise;\n }\n\n function allTopics(wsid, page, size, search, templateId, excludeList){\n if(page == undefined){\n page = 0;\n }\n if(size == undefined){\n size = 10;\n }\n if(search == undefined){\n search ='';\n }\n if(excludeList == undefined){\n excludeList = [];\n }\n \n if(templateId == undefined || templateId == null){\n templateId = '';\n }\n var path = api.source.url + '/all-topics'+\"?page=\"+page+\"&search=\"+search+\"&templateId=\"+templateId+\"&size=\"+size+\"&workspace=\"+wsid;\n var def = $q.defer();\n $http.post(path, excludeList)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function (error) {\n $log.error(error);\n def.reject(\"Failed to save rule keyword\");\n });\n return def.promise;\n }\n\n function templateTopics(wsid, page, size, search, templateId, bound, excludeList){\n if(page == undefined){\n page = 0;\n }\n if(size == undefined){\n size = 10;\n }\n if(search == undefined){\n search ='';\n }\n if(excludeList == undefined){\n excludeList = [];\n }\n if(bound == undefined){\n bound = true;\n }\n if(templateId == undefined || templateId == null){\n templateId = '';\n }\n var path = api.source.url + '/template-topics'+\"?page=\"+page+\"&search=\"+search+\"&templateId=\"+templateId+\"&size=\"+size+\"&workspace=\"+wsid+\"&bound=\"+bound;\n var def = $q.defer();\n $http.post(path, excludeList)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function (error) {\n $log.error(error);\n def.reject(\"Failed to save rule keyword\");\n });\n return def.promise;\n }\n \n function topics(wsid, page, size, sort, direction, search, excludeList) {\n if(page === undefined){\n page = 0;\n }\n if(size === undefined){\n size = 10;\n }\n if(sort === undefined){\n sort = 'createDate';\n }\n if(direction === undefined){\n direction = \"DESC\";\n }\n if(search === undefined){\n search = '';\n }\n if(excludeList == undefined){\n excludeList = [];\n }\n console.log(wsid)\n var path = api.source.url + '/topics/' + wsid+\"?page=\"+page+\"&search=\"+search+\"&sort=\"+sort+\"&direction=\"+direction+\"&size=\"+size;\n var def = $q.defer();\n $http.post(path, excludeList)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function (error) {\n $log.error(error);\n def.reject(\"Failed to save rule keyword\");\n });\n return def.promise;\n }\n\n function saveTemplate(template) {\n var path = api.source.url + '/template/save';\n var def = $q.defer();\n console.log(template)\n $http.post(path, template)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function (error) {\n def.reject(error);\n });\n return def.promise;\n }\n\n function getTemplates(wsid, page, size, sort, direction, search, excludeList, topicsInclude) {\n if(page == undefined){\n page = 0;\n }\n if(size == undefined){\n size = 10;\n }\n if(sort == undefined){\n sort = 'createDate';\n }\n if(direction == undefined){\n direction = \"DESC\";\n }\n if(search == undefined){\n search = '';\n }\n if(excludeList == undefined){\n excludeList = [];\n }\n if(topicsInclude == undefined){\n topicsInclude = false;\n }\n var path = api.source.url + '/templates/' + wsid+\"?page=\"+page+\"&size=\"+size+\"&sort=\"+sort+\"&direction=\"+direction+\"&search=\"+search+\"&topicsInclude=\"+topicsInclude;\n var def = $q.defer();\n $http.post(path, excludeList)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function (error) {\n def.reject(error);\n });\n return def.promise;\n }\n \n function saveSystemRules(systemRules, workspaceId) {\n var path = api.source.url + '/rule/savesystem/' + workspaceId;\n var def = $q.defer();\n $http.post(path, systemRules)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function (error) {\n def.reject(error);\n });\n return def.promise;\n }\n function sourceUrlRuleTrace(url, wsId, templateId) {\n var path = api.source.url + '/url-trace?url=' + url +\"&workspaceId=\"+wsId+\"&templateId=\"+templateId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function (error) {\n def.reject(error);\n });\n return def.promise;\n }\n \n function getSystemRules(workspaceId) {\n var path = api.source.url + '/rule/system/' + workspaceId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get system rules\");\n });\n return def.promise;\n }\n\n function copyWebsource(workspaceId, templateId) {\n var path = api.source.url + '/template/copy/' + workspaceId + '/' + templateId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to copy template\");\n });\n return def.promise;\n }\n\n function getTemplate(id) {\n console.log(id)\n var path = api.source.url + '/template/' + id;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to save rule keyword\");\n });\n return def.promise;\n }\n\n function bindTemplate(workspaceId, reportId, templateIds) {\n var path = api.source.url + '/template/bindall/' + workspaceId + '/' + reportId;\n var def = $q.defer();\n $http.post(path, templateIds)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to bind templates\");\n });\n return def.promise;\n }\n\n function workspaceRules(workspaceId) {\n var path = api.source.url + '/rule/workspace/' + workspaceId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to fetch rules\");\n });\n return def.promise;\n }\n\n function unbindTemplate(workspaceId, reportId, templateId) {\n var path = api.source.url + '/template/unbind/' + workspaceId + '/' + reportId + '/' + templateId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to bind template\");\n });\n return def.promise;\n }\n \n function getReportTemplates(reportId, page, size, sort, direction ,search) {\n if(page == undefined){\n page = 0;\n }\n if(size == undefined){\n size = 10;\n }\n if(sort == undefined){\n sort = 'createDate';\n }\n if(direction == undefined){\n direction = \"DESC\";\n }\n if(search == undefined){\n search = '';\n }\n var path = api.source.url + '/template/report/' + reportId+\"?page=\"+page+\"&size=\"+size+\"&sort=\"+sort+\"&direction=\"+direction+\"&search=\"+search;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to bind template\");\n });\n return def.promise;\n }\n\n function removeTemplate(id) {\n var path = api.source.url + \"/template/remove\";\n var def = $q.defer();\n $http.post(path, id)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function (error) {\n def.reject(error);\n });\n return def.promise;\n }\n\n function removeTopic(id) {\n var path = api.source.url + \"/topic/remove\";\n var def = $q.defer();\n $http.post(path, id)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function (error) {\n def.reject(error);\n });\n return def.promise;\n }\n\n function searchRule(rule, page) {\n var path = api.source.url + \"/rule/search/\" + page;\n var def = $q.defer();\n $http.post(path, rule)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to search rule\");\n });\n return def.promise;\n }\n\n function getSimilarityRate(reportId) {\n var path = api.source.url + '/report/similarity/' + reportId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get similarity rate.\");\n });\n return def.promise;\n }\n\n function saveSimilarityRate(reportId, rate, workspace) {\n var path = api.source.url + \"/report/\"+ reportId +\"/saveSimilarity\" ;\n var def = $q.defer();\n $http.post(path, rate)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to save similarity rate.\");\n });\n return def.promise;\n }\n\n function saveAudit(audit) {\n var path = api.audits.url + '/save';\n var def = $q.defer();\n $http.post(path, audit)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to save audit\");\n });\n return def.promise;\n }\n\n function saveUserSettings(settingsModel) {\n var path = api.settings.url + '/saveusersettings';\n var def = $q.defer();\n $http.post(path, settingsModel)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to save settings\");\n });\n return def.promise;\n }\n\n function findUserSettings() {\n var path = api.settings.url + '/findusersettings';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to find settings\");\n });\n return def.promise;\n }\n\n function saveReportSettings(reportSettingsModel, reportId) {\n var path = api.settings.url + '/savereportsettings/' + reportId;\n var def = $q.defer();\n $http.post(path, reportSettingsModel)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to save report settings\");\n });\n return def.promise;\n }\n\n function findReportSettings(reportId) {\n var path = api.settings.url + '/findusersettings/' + reportId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to find report settings\");\n });\n return def.promise;\n }\n\n function saveFormulaTableSettings(formulaTable, reportId) {\n var path = api.settings.url + '/savereportsettings/formulatable/' + reportId;\n var def = $q.defer();\n $http.post(path, formulaTable)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to save formula table settings\");\n });\n return def.promise;\n }\n\n function findFormulaTableSettings(reportId) {\n var path = api.settings.url + '/findreportsettings/formulatable/' + reportId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to find formula table settings\");\n });\n return def.promise;\n }\n\n function saveFilterChipsSettings(filterChips, reportId) {\n var path = api.settings.url + '/savereportsettings/filterchips/' + reportId;\n var def = $q.defer();\n $http.post(path, filterChips)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to save filter chips settings\");\n });\n return def.promise;\n }\n\n function findFilterChipsSettings(reportId) {\n var path = api.settings.url + '/findreportsettings/filterchips/' + reportId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to find filter chips settings\");\n });\n return def.promise;\n }\n\n\n function saveCategoryDataCompareSettings(categoryDataCompareSetting, reportId) {\n var path = api.settings.url + '/categorydatacomparesetting/' + reportId;\n var def = $q.defer();\n $http.post(path, categoryDataCompareSetting)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to save category data compare settings\");\n });\n return def.promise;\n }\n\n function getCategoryDataCompareSettings(reportId) {\n var path = api.settings.url + '/categorydatacomparesetting/' + reportId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to find category data compare settings\");\n });\n return def.promise;\n }\n\n\n \n function saveDatePeriodSettings(reportId, datePeriodSetting) {\n var path = api.settings.url + '/dateperiod/' + reportId;\n var def = $q.defer();\n $http.post(path, datePeriodSetting)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to save date period settings\");\n });\n return def.promise;\n }\n\n function getDatePeriodSettings(reportId) {\n var path = api.settings.url + '/dateperiod/' + reportId;\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to find date period settings\");\n });\n return def.promise;\n }\n\n function deleteDatePeriodSettings(reportId) {\n var path = api.settings.url + '/dateperiod/' + reportId;\n var def = $q.defer();\n $http.delete(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to delete date period settings\");\n });\n return def.promise;\n }\n\n function findReportCategoryThresholds(reportId) {\n var path = api.report.url +'/'+ reportId+ '/category-threshold';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get category thresholds\");\n });\n return def.promise;\n\n }\n\n function saveCategoryThreshold(reportId,categoryThreshold) {\n var path = api.report.url + '/'+ reportId+ '/category-threshold';\n var def = $q.defer();\n $http.put(path,categoryThreshold)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to save category threshold\");\n });\n return def.promise;\n }\n \n function saveCategoryLimit(reportId, settings) {\n var path = api.report.url + '/'+ reportId+ '/category-limit';\n var def = $q.defer();\n $http.post(path,settings)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to save category limit\");\n });\n return def.promise;\n }\n\n function findReportLimitSettings(reportId) {\n var path = api.report.url +'/'+ reportId + '/category-limit';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function (r) {\n def.reject(\"Failed to get limit settings\");\n });\n return def.promise;\n\n } \n\n function removeCategoryThreshold(reportId,categoryId) {\n var path = api.report.url + '/'+ reportId+'/category-threshold/'+categoryId;\n var def = $q.defer();\n $http.delete(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to delete category threshold\");\n });\n return def.promise;\n }\n\n function saveOrUpdateThresholdSettings(reportId,thresholdSettings) {\n var path = api.report.url + '/'+ reportId+ '/threshold-settings';\n var def = $q.defer();\n $http.put(path,thresholdSettings)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to save or update threshold settings\");\n });\n return def.promise;\n }\n\n function findReportThresholdSettings(reportId) {\n var path = api.report.url +'/'+ reportId+ '/threshold-settings';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get threshold settings\");\n });\n return def.promise;\n\n }\n\n function findDeletedDocumentsBatch(reportId) {\n var path = api.report.url + '/'+ reportId+'/batch/deleted';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to find deleted documents batches\");\n });\n return def.promise;\n }\n\n function recycleDeletedDocumentsBatch(reportId,batchId) {\n var path = api.report.url + '/'+ reportId+'/batch/'+ batchId+'/recycle';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to recycle deleted documents batches\");\n });\n return def.promise;\n }\n\n function findReportFieldsV2(reportId) {\n var path = api.reportv2.url +'/'+ reportId+ '/field';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get report fields\");\n });\n return def.promise;\n }\n\n function saveReportFieldV2(reportId,reportField) {\n var path = api.reportv2.url +'/'+ reportId+ '/field';\n var def = $q.defer();\n $http.post(path,reportField)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to save report field\");\n });\n return def.promise;\n }\n\n\n function updateReportFieldV2(reportId,reportFieldId,reportField) {\n var path = api.reportv2.url +'/'+ reportId+ '/field/'+reportFieldId;\n var def = $q.defer();\n $http.put(path,reportField)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to update report field\");\n });\n return def.promise;\n }\n\n function deleteReportFieldV2(reportId,reportFieldId,reportField) {\n var path = api.reportv2.url +'/'+ reportId+ '/field/'+reportFieldId;\n var def = $q.defer();\n $http.delete(path,reportField)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to delete report field\");\n });\n return def.promise;\n }\n\n function findReportModulesV2(reportId) {\n var path = api.reportv2.url +'/'+ reportId+ '/module';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get report modules\");\n });\n return def.promise;\n }\n\n function saveReportModuleV2(reportId,reportModule) {\n var path = api.reportv2.url +'/'+ reportId+ '/module';\n var def = $q.defer();\n $http.post(path,reportModule)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to save report module\");\n });\n return def.promise;\n }\n\n\n function updateReportModuleV2(reportId,reportModuleId,reportModule) {\n var path = api.reportv2.url +'/'+ reportId+ '/module/'+reportModuleId;\n var def = $q.defer();\n $http.put(path,reportModule)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to update report module\");\n });\n return def.promise;\n }\n\n function deleteReportModuleV2(reportId,reportModuleId,reportModule) {\n var path = api.reportv2.url +'/'+ reportId+ '/field/'+reportModuleId;\n var def = $q.defer();\n $http.delete(path,reportModule)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to delete report module\");\n });\n return def.promise;\n }\n\n function findReportModuleSettingsV2(reportId, reportModuleId){\n var path = api.reportv2.url +'/'+ reportId+ '/module/' + reportModuleId + '/settings';\n var def = $q.defer();\n $http.get(path)\n .success(function (settings) {\n def.resolve(settings);\n })\n .error(function () {\n def.reject(\"Failed to get report module settings\");\n });\n return def.promise;\n }\n\n function saveReportModuleSettingsV2(reportId, reportModuleId, settings){\n var path = api.reportv2.url +'/'+ reportId+ '/module/' + reportModuleId + '/settings';\n var def = $q.defer();\n $http.post(path,settings)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to save report module settings\");\n });\n return def.promise;\n }\n\n function getNerMatchingTypes(){\n var path = api.module.url +'/getNERMatchTypes';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get NER Match Types\");\n });\n return def.promise;\n }\n\n function updateReportTemplateV2(reportId,template) {\n var path = api.reportv2.url +'/'+ reportId+ '/template/'+template;\n var def = $q.defer();\n $http.put(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to save report template\");\n });\n return def.promise;\n }\n\n function reportUnReadyDocument(reportId,documentId){\n var path = api.report.url +'/'+ reportId+ '/document/'+documentId+'/approve';\n var def = $q.defer();\n $http.delete(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to unready report document\");\n });\n return def.promise;\n }\n\n\n function reportReadyDocument(reportId,documentId){\n var path = api.report.url +'/'+ reportId+ '/document/'+documentId+'/approve';\n var def = $q.defer();\n $http.post(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to ready report document\");\n });\n return def.promise;\n }\n\n function reportDocumentAddNote(reportId,documentId,body){\n var path = api.report.url + '/' + reportId + '/document/' + documentId +'/note/add';\n var def = $q.defer();\n $http.post(path,body)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to add note to report document\");\n });\n return def.promise;\n }\n\n function completeAction(reportId, documentId) {\n var path = api.report.url + '/' + reportId + '/document/' + documentId + '/action/complete';\n var def = $q.defer();\n $http.post(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to approve note\");\n });\n return def.promise;\n }\n\n function reportDocumentUpdateNote(reportId,documentId,body){\n var path = api.report.url +'/'+ reportId+ '/document/'+documentId+'/note';\n var def = $q.defer();\n $http.put(path,body)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to update note to report document\");\n });\n return def.promise;\n }\n\n function reportDocumentRemoveNote(reportId,documentId){\n var path = api.report.url +'/'+ reportId+ '/document/'+documentId+'/note';\n var def = $q.defer();\n $http.delete(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to add note to report document\");\n });\n return def.promise;\n }\n\n function reportDocumentAssign(reportId,documentId,body){\n var path = api.report.url +'/'+ reportId+ '/document/'+documentId+'/assignment';\n var def = $q.defer();\n $http.post(path,body)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to assign to report document\");\n });\n return def.promise;\n }\n\n function reportDocumentUnAssign(reportId,documentId,body){\n var path = api.report.url +'/'+ reportId+ '/document/'+documentId+'/assignment';\n var def = $q.defer();\n $http.delete(path,body)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to assign to report document\");\n });\n return def.promise;\n }\n\n\n function reportDocumentFlag(reportId,documentId){\n var path = api.report.url +'/'+ reportId+ '/document/'+documentId+'/flag';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to flag report document\");\n });\n return def.promise;\n }\n\n\n function reportDocumentUnFlag(reportId,documentId){\n var path = api.report.url +'/'+ reportId+ '/document/'+documentId+'/unflag';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to unflag report document\");\n });\n return def.promise;\n }\n\n function reportDocumentAddSentiment(reportId,documentId,request){\n var path = api.report.url +'/'+ reportId+ '/document/'+documentId+'/sentiment/add';\n var def = $q.defer();\n $http.post(path,request)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to add sentiment to report document\");\n });\n return def.promise;\n }\n\n function reportDocumentAddAspectSentiment(reportId,documentId,moduleId,request){\n var path = api.report.url +'/'+ reportId+ '/document/'+documentId+'/module/'+moduleId+'/aspectsentiment/add';\n var def = $q.defer();\n $http.post(path,request)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to add aspect sentiment to report document\");\n });\n return def.promise;\n }\n\n\n function reportDocumentRemovoeAspectSentiment(reportId,documentId,moduleId,request){\n var path = api.report.url +'/'+ reportId+ '/document/'+documentId+'/module/'+moduleId+'/aspectsentiment/remove';\n var def = $q.defer();\n $http.post(path,request)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to remove aspect sentiment to report document\");\n });\n return def.promise;\n }\n\n\n function reportDocumentTrash(reportId,documentId){\n var path = api.report.url +'/'+ reportId+ '/document/'+documentId+'/trash';\n var def = $q.defer();\n $http.post(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to trash report document\");\n });\n return def.promise;\n }\n\n function reportDocumentUnTrash(reportId,documentId){\n var path = api.report.url +'/'+ reportId+ '/document/'+documentId+'/trash';\n var def = $q.defer();\n $http.delete(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to untrash report document\");\n });\n return def.promise;\n }\n\n function reportDocumentRemoveCategory(reportId,documentId,moduleId,body){\n console.log('remove');\n console.log(body);\n console.log(documentId);\n var path = api.report.url +'/'+ reportId+ '/document/'+documentId+'/module/'+moduleId+'/category/remove';\n var def = $q.defer();\n $http.post(path,body)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to remove category of report document\");\n });\n return def.promise;\n }\n\n function reportDocumentAddCategory(reportId,documentId,moduleId,body){\n var path = api.report.url +'/'+ reportId+ '/document/'+documentId+'/module/'+moduleId+'/category/add';\n var def = $q.defer();\n $http.post(path,body)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to add category of report document\");\n });\n return def.promise;\n }\n\n function reportDocumentSingleModuleUpdateCategory(reportId, documentId, moduleId, body) {\n var path = api.report.url + '/' + reportId + '/document/' + documentId + '/singlemodule/' + moduleId + '/category/update';\n var def = $q.defer();\n $http.post(path, body)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to add category of report document\");\n });\n return def.promise;\n }\n\n function userTags(reportId, query) {\n var path = api.report.url + '/' + reportId + '/usertags/' + query;\n var def = $q.defer();\n $http.post(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get user tags\");\n });\n return def.promise;\n }\n\n function saveUserTag(reportId, documentId, tag) {\n var path = api.report.url + '/' + reportId + '/document/' + documentId + \"/usertag/\" + tag;\n var def = $q.defer();\n $http.post(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to save user tag\");\n });\n return def.promise;\n }\n \n function removeUserTag(reportId, documentId, tag) {\n var path = api.report.url + '/' + reportId + '/document/' + documentId + \"/usertag/\" + tag;\n var def = $q.defer();\n $http.delete(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to save user tag\");\n });\n return def.promise;\n }\n \n function confirmClassification(reportId, documentId) {\n var path = api.report.url + '/' + reportId + '/document/' + documentId + \"/confirm-classification\";\n var def = $q.defer();\n $http.post(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to confirm classification\");\n });\n return def.promise;\n }\n\n function unconfirmClassification(reportId, documentId) {\n var path = api.report.url + '/' + reportId + '/document/' + documentId + \"/unconfirm-classification\";\n var def = $q.defer();\n $http.post(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to unconfirm classification\");\n });\n return def.promise;\n }\n\n function updateReportFacetOrder(reportId,facetOrder) {\n var path = api.report.url +'/'+ reportId+ '/facetorder/'+facetOrder;\n var def = $q.defer();\n $http.put(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to save report facet order\");\n });\n return def.promise;\n }\n\n\n function findReportDefaultDateSettings(reportId){\n var path = api.report.url + '/' +reportId+ '/default-date-settings';\n var def = $q.defer();\n $http.get(path)\n .success(function(data){\n def.resolve(data);\n })\n .error(function(){\n def.reject(\"Failed to get report default date settings\");\n });\n return def.promise;\n }\n\n function findLocalVariables(request) {\n var path = api.localization.url + '/';\n var def = $q.defer();\n $http.post(path,request)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get local variables\");\n });\n return def.promise;\n }\n\n function saveLocalVariables(request) {\n var path = api.localization.url + '/save';\n var def = $q.defer();\n $http.post(path, request)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to save local variables\");\n });\n return def.promise;\n }\n\n function removeLocalVariables(request) {\n var path = api.localization.url + '/remove';\n var def = $q.defer();\n $http.post(path, request)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to remove local variables\");\n });\n return def.promise;\n }\n\n\n function updateReportDefaultDateSettings(reportId,defaultDateSettingsObject){\n var path = api.report.url + '/' + reportId + '/default-date-settings';\n var def = $q.defer();\n $http.put(path,defaultDateSettingsObject)\n .success(function(data){\n def.resolve(data);\n })\n .error(function(){\n def.reject(\"Failed to save report default date settings\");\n });\n return def.promise;\n }\n\n function saveAlertKeywords(reportId, body) {\n var path = api.report.url + '/' + reportId + '/alert/keyword/save';\n var def = $q.defer();\n $http.post(path, body)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to add keyword of report alert\");\n });\n return def.promise;\n }\n\n function getAlertKeywords(reportId) {\n var path = api.report.url + '/' + reportId + '/alert/keyword/get';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get keyword of report alert\");\n });\n return def.promise;\n }\n\n function getAlertPeriod(reportId) {\n var path = api.report.url + '/' + reportId + '/alert/period/get';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get period of report alert\");\n });\n return def.promise;\n }\n\n function saveAlertPeriod(reportId, body) {\n var path = api.report.url + '/' + reportId + '/alert/period/save';\n var def = $q.defer();\n $http.post(path, body)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to add period of report alert\");\n });\n return def.promise;\n }\n\n function saveAlertItem(reportId,body) {\n var path = api.settings.url + '/' + reportId + '/alert/item';\n var def = $q.defer();\n $http.post(path, body)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to add alert item of report alert\");\n });\n return def.promise;\n }\n\n function updateAlertItem(settingId, body) {\n var path = api.settings.url + '/alert/item/' + settingId;\n var def = $q.defer();\n $http.put(path, body)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to update of report alert item\");\n });\n return def.promise;\n }\n\n function deleteAlertItem(settingId) {\n var path = api.settings.url + '/alert/item/' + settingId;\n var def = $q.defer();\n $http.delete(path)\n .success(function(data) {\n def.resolve(data);\n })\n .error(function() {\n def.reject('Failed to remove Report Documents');\n });\n\n return def.promise;\n }\n\n function getAlertItems(reportId) {\n var path = api.settings.url + '/' + reportId + '/alert/item';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get period of report alert item\");\n });\n return def.promise;\n }\n\n \n\n function hasSubscription(reportId) {\n var path = api.report.url + '/' + reportId + '/alert/subscription';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get subscription of report alert\");\n });\n return def.promise;\n }\n\n function subscribe(reportId) {\n var path = api.report.url + '/' + reportId + '/alert/subscribe';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to subscribe of report alert\");\n });\n return def.promise;\n }\n\n function unsubscribe(reportId) {\n var path = api.report.url + '/' + reportId + '/alert/unsubscribe';\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to unsubscribe of report alert\");\n });\n return def.promise;\n }\n\n function saveCategorySuccessRates(reportId, body) {\n var path = api.report.url + \"/operation/processCategoryChanges/\" + reportId ;\n var def = $q.defer();\n $http.post(path, body)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to process category changes\");\n });\n return def.promise;\n }\n\n function getCategoryChangeOperationResults(reportId) {\n var path = api.report.url + \"/operation/categorySuccessRates/\" + reportId;\n var def = $q.defer();\n $http.post(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get category change operation results\");\n });\n return def.promise;\n }\n\n function getReportAttributeScores(reportId) {\n var path = api.report.url + \"/\" + reportId + \"/score/attribute\";\n var def = $q.defer();\n $http.get(path)\n .success(function (data) {\n def.resolve(data);\n })\n .error(function () {\n def.reject(\"Failed to get category change operation results\");\n });\n return def.promise;\n }\n\n return api;\n }\n\n\n /*\n addNote: reportDocumentAddNote,\n removeNote: reportDocumentRemoveNote,\n assign: reportDocumentAssign,\n unAssign: reportDocumentUnAssign,\n */\n\n\n // V2\n\n\n\n})();\n\nangular.module(\"fuse\").run([\"$templateCache\", function($templateCache) {$templateCache.put(\"app/quick-panel/quick-panel.html\",\"TODAYCHAT\\nACTIVITY\\n\\n\");\n$templateCache.put(\"app/core/layouts/content-only.html\",\"
\");\n$templateCache.put(\"app/core/layouts/content-with-toolbar.html\",\"
\");\n$templateCache.put(\"app/core/layouts/horizontal-navigation.html\",\"
\");\n$templateCache.put(\"app/core/layouts/vertical-navigation.html\",\"
\");\n$templateCache.put(\"app/core/theme-options/theme-options.html\",\"
Layout Style:
Vertical Navigation\\nHorizontal NavigationContent OnlyContent with Toolbar\\n
\\nLayout Mode:
Boxed\\nWide
Color Palette:
\\n\\n{{themeName}}
\");\n$templateCache.put(\"app/auth/register/completed.html\",\"

\");\n$templateCache.put(\"app/auth/register/confirmed.html\",\"

\");\n$templateCache.put(\"app/auth/register/register.html\",\"
\\\"logo\\\"
Create an account\\n
Username field is required
\\n
Email field is required
Email must be a valid e-mail address
\\n
\\n
Password field is required
\\n
Password confirm field must match the password
\\n
CREATE MY ACCOUNT\\n
Already have an account? Log in
\");\n$templateCache.put(\"app/auth/login/account-info.html\",\"

\\n
\");\n$templateCache.put(\"app/auth/login/change-pass-6month.html\",\"
\\\"logo\\\"
\\n
Please enter the old password.
\\n
\\n
new password field is required\\n
Password confirm field must match the password
\\n
CHANGE PASSWORD
\\n
\");\n$templateCache.put(\"app/auth/login/change-pass.html\",\"
\\\"logo\\\"
\\n\\n
new password field is required
\\n
\\nPassword confirm field must match the password
SAVE PASSWORD\\n
\");\n$templateCache.put(\"app/auth/login/change-password-info.html\",\"\");\n$templateCache.put(\"app/auth/login/change-password.html\",\"
\\\"logo\\\"
Password field is required
\\nCHANGE PASSWORD
\\n
\");\n$templateCache.put(\"app/auth/login/error.html\",\"
\\\"logo\\\"
\\\"logo\\\"
\\\"logo\\\"
\");\n$templateCache.put(\"app/auth/login/forgot-password-info.html\",\"
\\\"logo\\\"

\\n
\");\n$templateCache.put(\"app/auth/login/forgot-password-info2.html\",\"
\\\"logo\\\"

\\n
\");\n$templateCache.put(\"app/auth/login/forgot-password.html\",\"
\\\"logo\\\"
\\nUsername field is required
RESET PASSWORD
\");\n$templateCache.put(\"app/auth/login/forgot-password2.html\",\"
\\\"logo\\\" \\\"logo\\\"
\\\"logo\\\"
\\n
\\n
RESET PASSWORD
\\n
\\n
\");\n$templateCache.put(\"app/auth/login/kvkk_en.html\",\"\");\n$templateCache.put(\"app/auth/login/kvkk_tr.html\",\"

\\n

ARTIWISE ANALYTICS İLETİŞİM FORMU DOLDURAN KİŞİLER HAKKINDA

KİŞİSEL VERİLERİN KORUNMASI AYDINLATMA METNİ

 

 

\\n
  1. ARTIWISE YAZILIM TEKNOLOJİLERİ VE DANIŞMANLIKLİMİTED ŞİRKETİ \\n(Bundan böyle “ARTIWISE” olarak anılacaktır.) \\nolarak www.artiwise.com alan adlı internet sitemizde yer alan Artiwise Analytics’i Denemek İstiyorum formunu doldurmak suretiyle kişisel verileriniz daha iyi hizmet verebilmek adına ve aşağıda açıklanan amaçlar doğrultusunda veri sorumlusu sıfatıyla işlenmektedir. Bu kapsamda ARTIWISE tarafından aydınlatma yapılmaktadır.\\n

 

  1. \\nARTIWISE olarak kişisel verilerinizin işlenmesinde ve muhafaza edilmesinde Anayasa’ya ve 6698 sayılı Kişisel Verilerin Korunması Kanunu’na (KVKK) uygun davranmaya ve kişisel verilerinizin güvenliğini sağlanmaya azami hassasiyet göstererek en üst seviyede güvenlik tedbirleri almaktayız.\\n

 

  1. \\nVeri Sorumlusu ve Temsilcisi : KVKK uyarınca, kişisel verileriniz “veri sorumlusu” sıfatıyla ARTIWISE tarafından aşağıda açıklandığı şekliyle ve mevzuatın çizdiği sınırlar içerisinde işlenecektir.\\n

 

  1. \\nİşbu bilgilendirme KVKK’nun 10. maddesinde düzenlenen veri sorumlusunun aydınlatma yükümlülüğü hükümleri kapsamında yapılmaktadır.\\n

 

  1. \\nKişisel Verilerinizin İşlenmesi : Aşağıda başlıkları belirtilen kişisel verilerinizi kişisel veri envanterine kişisel veriler politikamızda belirtilen şekillerde kaydedilmektedir.\\n

 

  • Ad ve Soyad

  • E-posta Adresi

  • Şirketiniz

  • Çalıştığınız Pozisyon

  • Telefon numarası\\n

 

  1. \\nKişisel Veri Toplamanın Yöntemi : Kişisel verileriniz www.artiwise.com internet sitesinde doldurduğunuz Artiwise Analytics’i Denemek İstiyorum formu aracılığıyla elde edilmektedir. \\n

 

  1. \\nKişisel Veri İşleme Amaçları : Kişisel verileriniz Şirketimiz tarafından KVKK’nun 5. ve 6. maddelerinde belirtilen kişisel veri işleme şartları dahilinde aşağıdaki amaçlar doğrultusunda Kanun’un 5 ve 6. maddelerinde belirtilen kişisel veri işleme şartları ve amaçları dâhilinde ve özellikle 5’inci maddenin 1. Fıkrası uyarınca “Açık rıza” ile, 2’inci fıkrasının a bendi uyarınca “Kanunlarda açıkça öngörülmesi” , b bendi uyarınca “Fiili imkânsızlık nedeniyle rızasını açıklayamayacak durumda bulunan veya rızasına hukuki geçerlilik tanınmayan kişinin kendisinin ya da bir başkasının hayatı veya beden bütünlüğünün korunması için zorunlu olması”, c bendi uyarınca “Bir sözleşmenin kurulması veya ifasıyla doğrudan doğruya ilgili olması kaydıyla, sözleşmenin taraflarına ait kişisel verilerin işlenmesinin gerekli olması”, ç bendi uyarınca “Veri sorumlusunun hukuki yükümlülüğünü yerine getirebilmesi için zorunlu olması”, d fıkrası uyarınca “İlgili kişinin kendisi tarafından alenileştirilmiş olması”, e bendi uyarınca “Bir hakkın tesisi, kullanılması veya korunması için veri işlemenin zorunlu olması”, f bendi uyarınca “İlgili kişinin temel hak ve özgürlüklerine zarar vermemek kaydıyla, veri sorumlusunun meşru menfaatleri için veri işlenmesinin zorunlu olması” ve 6. maddesinin 2. fıkrasında belirtilen “Açık rıza” ve 3. fıkrasında belirtilen “Özel nitelikli kişisel verilerin, sağlık ve cinsel hayat dışında kalanlarının kanunlarda ön görülen hallerde açık rıza alınmadan işlenebilmesi”, hukuki sebeplerine dayanılarak işlenebilecektir.\\n

 

  • \\nİş faaliyetlerinin yürütülmesi / denetimi,

  • \\nİş süreçlerinin iyileştirilmesine yönelik önerilerin alınması ve değerlendirilmesi,

    \\n
  • İş sürekliliğinin sağlanması faaliyetlerinin yürütülmesi,\\n

  • Mal / Hizmet satış sonrası destek hizmetlerinin yürütülmesi,\\n

  • Veri sorumlusu operasyonlarının güvenliğinin temini,

  • \\n
  • Yetkili kişi, kurum ve kuruluşlara bilgi verilmesi,

  • \\nŞirket’in ana faaliyet konusundaki hizmetleri yönetilmesi ve yürütülmesi,

    \\n
  • \\nŞirket’in sözleşmeseL yükümlülüklerinin yerine getirilmesi,

  • Verilerin analiz edilerek şirket ve internet sitesindeki hizmetlerin geliştirilmesi,

    \\n
  • İletişim formunu dolduran kişilere daha hızlı ve etkin bir şekilde hizmet verilmesi.\\n

 

  1. \\nKişisel Verilerinizin İşlenmesinin Hukuki Sebepleri : Kişisel Verileriniz aşağıdaki hukuki sebeplerle işlenmektedir:\\n

 

  • Sözleşme imzalanması,\\n

  • \\nBir hakkın tesisi, kullanılması veya korunması için veri işlemenin zorunlu olması,

  • \\nİlgili kişinin temel hak ve özgürlüklerine zarar vermemek kaydıyla, veri sorumlusunun meşru menfaatleri için veri işlenmesinin zorunlu olması.\\n

 

  1. \\nİşlenen Kişisel Verilerin Kimlere ve Hangi Amaçla Aktarılabileceği : İşlenen kişisel verileriniz; erişim kayıtlarının yönetimi, mevzuattan kaynaklanan yükümlülüklerimizin yerine getirilmesi ve Şirketimiz güvenliğinin tesisi, hizmet kalitemizin arttırılması, müşteri ilişkilerinin geliştirilmesi amacıyla iş ortaklarımıza, tedarikçilerimize, kanunen yetkili kamu kurumlarına ve özel kişilere KVKK’nun 8. ve 9. maddelerinde belirtilen kişisel veri işleme şartları ve amaçları çerçevesinde aktarılabilecektir.\\n

 

  1. \\nKişisel Veri Sahibinin KVKK’nun 11. maddesinde Sayılan Hakları : Kişisel veri sahipleri olarak, KVKK’nun 11. maddesi gereğince; kişisel verilerinizin işlenme durumunu, amacını ve bunların amacına uygun kullanılıp kullanılmadığını öğrenme, kişisel verilerin aktarıldığı üçüncü kişileri bilme, eksikliklerin düzeltilmesini talep etme, işlenmesini gerektiren sebeplerin ortadan kalkması halinde kişisel verilerin silinmesini veya yok edilmesini isteme, itiraz, zararın giderilmesini talep etme gibi haklarınız mevcuttur. Buna ilişkin taleplerinizi aşağıda düzenlenen yöntemlerle Şirketimize iletmeniz durumunda Şirketimiz talebin niteliğine göre talebinizi aynı Kanunun 13. maddesinin 2. fıkrası uyarınca en kısa sürede ve en geç otuz gün içinde ücretsiz olarak sonuçlandıracaktır. Ancak, işlemin ayrıca bir maliyeti gerektirmesi halinde, Şirketimiz tarafından Kişisel Verileri Koruma Kurulu’nca belirlenen tarifedeki ücret alınabilecektir. Yukarıda belirtilen haklarınızı kullanmak için kimliğinizi tespit edici gerekli bilgiler ile KVKK’nun 11. maddesinde belirtilen haklardan kullanmayı talep ettiğiniz hakkınıza yönelik açıklamalarınızı KVKK ile ilgili olduğunu açıkça içerir talebinizi; şirketimizden temin edebileceğiniz başvuru formunun imzalı bir nüshasını Reşitpaşa Mahallesi Katar Caddesi İTÜ Teknokent Arı 8 Binası No: 2/11/4 Sarıyer/İstanbul adresine kimliğinizi tespit edici belgeler ile bizzat elden iletebilir, noter kanalıyla veya KVKK’da belirtilen diğer yöntemler ile gönderebilir veya info@artiwise.com e-mail adresine güvenli elektronik imzalı olarak iletebilirsiniz.\\n

 

 

\\nVeri Sorumlusu Unvan : ARTIWISE YAZILIM TEKNOLOJİLERİ VE DANIŞMANLIK

LİMİTED ŞİRKETİ

Mersis No :\\n 0085040901600014

E-Posta Adresi : info@artiwise.com\\n

Fiziki Posta Adresi :\\n Reşitpaşa Mahallesi Katar Caddesi İTÜ Teknokent Arı 8 Binası

\\nNo: 2/11/4 Sarıyer/İstanbul

\\n\\n
\");\n$templateCache.put(\"app/auth/login/login-saml.html\",\"
\\\"logo\\\"
\\n
\\\"logo\\\"
\\\"logo\\\"
\");\n$templateCache.put(\"app/auth/login/login.html\",\"
\\\"logo\\\" \\\"logo\\\"
\\n
\\\"logo\\\"
=3\\\" class=\\\"ml-3\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\">
\\n
\\\"logo\\\"
\");\n$templateCache.put(\"app/auth/login/login2.html\",\"
\\\"logo\\\" \\\"logo\\\"
\\\"logo\\\"
\\n
\\n
\\n
=3\\\" class=\\\"ml-3\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\">
\\n
\\n
\\\"logo\\\"AI-Powered Reputation Intelligence
\\n
\");\n$templateCache.put(\"app/auth/login/login3.html\",\"
AI-Powered Reputation Intelligence
\\\"logo\\\" \\\"logo\\\"
\\n
\\n ({{vm.countDown}})
\\n
\\n
\\n
\\n
=3\\\" \\nclass=\\\"margin-right-10\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\">
=3\\\" class=\\\"margin-top-20 ml-2\\\" \\nlayout=\\\"column\\\" layout-align=\\\"center center\\\">
\");\n$templateCache.put(\"app/auth/login/user_demo_request.html\",\"
\\\"logo\\\" \\\"logo\\\"
*
*
\\n *
\\n *
\\n *
\\n *
\\n *
\\n
\\n *
\\n\\n
\\n
\\n
\\n
\\n
\");\n$templateCache.put(\"app/auth/login/user_register_request.html\",\"
\\\"logo\\\" \\\"logo\\\"
Artiwise Analytics Kullanıcı Oluşturma Talep Formu
\\nBu form kullanıcı tanımlama için oluşturulmuştur. Herhangi bir talebiniz için ekibimizle analytics@artiwise.com üzerinden iletişime geçebilirsiniz.\\n
*
\\n *
\\n{{\\'REGISTER.REGISTER_FORM.USER_TYPES.SAML\\' | translate}}\\n{{\\'REGISTER.REGISTER_FORM.USER_TYPES.STANDART\\' | translate}}\\n
\\n *
\\n
\\n*
\\n *
\\n
\\n*
{{\\'REGISTER.REGISTER_FORM.AUTHORITY.REPORTVIEWER\\'|translate}}{{\\'REGISTER.REGISTER_FORM.AUTHORITY.REPORTADMIN\\'|translate}}\\n\\n{{\\'REGISTER.REGISTER_FORM.AUTHORITY.WORKSPACEADMIN\\'|translate}}\\n{{\\'REGISTER.REGISTER_FORM.AUTHORITY.OTHER\\'|translate}}\\n
\\n *
\\n
\\n
\\n
\\n
\\n
\\n
\");\n$templateCache.put(\"app/auth/login/user_request.html\",\"
\\nAI-Powered Reputation Intelligence
\\\"logo\\\" \\\"logo\\\"

\\n
\");\n$templateCache.put(\"app/core/directives/ms-material-color-picker/ms-material-color-picker.html\",\"\\n{{selectedColor.palette}} {{selectedColor.hue}} Select Color\\n
\\n{{selectedColor.palette}} {{selectedColor.hue}} Select Color\\n
{{palette}}
{{hue}}
\\n
\");\n$templateCache.put(\"app/core/directives/ms-search-bar/ms-search-bar.html\",\"
\");\n$templateCache.put(\"app/navigation/layouts/horizontal-navigation/navigation.html\",\"
\\n
{{vm.name}}
\\n{{m.indicator?m.indicator:m.name}} \\n
-1}\\\" aria-label=\\\"Train\\\" \\nng-click=\\\"vm.train($event)\\\" ng-disabled=\\\"!vm.enable\\\">{{vm.text}}\\n{{ vm.tooltipText()}}
\\n
\");\n$templateCache.put(\"app/navigation/layouts/vertical-navigation/navigation.html\",\"\");\n$templateCache.put(\"app/quick-panel/tabs/activity/activity-tab.html\",\"Friends\\n\\\"{{friend.name}}\\\"
{{contact.unread}}

{{friend.message}}

{{friend.time}}

\\n
Application Servers

{{server.location}}

{{server.detail}}

\\n
User Stats
\\n{{stat.title}} ({{stat.current}} / {{stat.total}})
\");\n$templateCache.put(\"app/quick-panel/tabs/chat/chat-tab.html\",\"
Recent\\\"{{contact.name}}\\\"
{{contact.unread}}

{{contact.name}}

{{contact.lastMessage}}

\\n
Start New Chat\\\"{{contact.name}}\\\"
\\n

{{contact.name}}

\\n{{vm.chat.contact.name}}

\\n
\\\"{{vm.chat.contact.name}}\\\"
{{dialog.message}}
{{dialog.time}}
\\n
\\n
\");\n$templateCache.put(\"app/quick-panel/tabs/today/today-tab.html\",\"Today\\n
\\n
{{vm.date | date:\\'EEEE\\'}}
{{vm.date | date:\\'d\\'}} \\nth {{vm.date | date:\\'MMMM\\'}}
\\nEvents\\n

{{event.title}}

{{event.detail}}

\\nNotes\\n
\\n

{{note.title}}

{{note.detail}}

\\nQuick Settings\\n

Notifications

Cloud Sync

\\n

Retro Thrusters

\");\n$templateCache.put(\"app/toolbar/layouts/content-with-toolbar/toolbar.html\",\"
TW TextWise\\n
\\n
\\\"logo\\\"
\\nJohn Doe
\\nMy ProfileInbox\\n{{vm.userStatus.title}}\\n{{status.title}}\\nLogout\\n
\\\"logo\\\" \\n{{vm.selectedLanguage.code}}
\\n\\\"logo\\\" {{lang.title}}
\\n
\\n
\");\n$templateCache.put(\"app/toolbar/layouts/horizontal-navigation/toolbar.html\",\"
\\n
\\\"logo\\\"\\n
{{vm.user.name}}
\\n\\n\\n\\n
0\\\" id=\\\"workspace-menu\\\">
\\n{{vm.selectedWorkspace.name | allTranslate}}
{{\\'Hepsi\\' | allTranslate}}
\\n
\\n{{w.name | allTranslate}}
0\\\" class=\\\"badge white-fg r-10\\\" \\nstyle=\\\"background: rgb(73, 183, 236);left:55%;position:absolute;top:75%;min-width:20px;height:20px;line-height:20px;padding:0 7px;font-size:10px;font-weight:700;border-radius:20px\\\">\\n{{vm.notificationCount}}
\\n
\\n{{((notification.message | limitTo : 120) + (notification.message.length > 120 ? \\'...\\' : \\'\\'))}} 120\\\" md-direction=\\\"bottom\\\" class=\\\"md-tooltip-break\\\">{{notification.message}}\\n
{{notification.date}}
{{notification.time}}
\\n
$index\\\">\\n
\\\"logo\\\" \\n{{vm.selectedLanguage.code}}
\\n\\\"logo\\\" {{lang.title}}
\\n
\");\n$templateCache.put(\"app/toolbar/layouts/vertical-navigation/toolbar.html\",\"
\\\"logo\\\"\\n\\n
John Doe
My Profile\\nInbox\\n{{vm.userStatus.title}}{{status.title}}\\nLogout
\\n
\\\"logo\\\" \\n{{vm.selectedLanguage.code}}
\\n\\\"logo\\\" {{lang.title}}
\\n
\\n
\");\n$templateCache.put(\"app/core/directives/ms-navigation/templates/horizontal.html\",\"
\");\n$templateCache.put(\"app/core/directives/ms-navigation/templates/sidebar.html\",\"
\\n\");\n$templateCache.put(\"app/core/directives/ms-navigation/templates/vertical.html\",\"
\\n\");\n$templateCache.put(\"app/main/apps/modules/services/basic-confirm-dialog-blue.html\",\"

{{vm.title}}

\\n

{{vm.body}}

\\n\\n
\");\n$templateCache.put(\"app/main/apps/modules/services/basic-confirm-dialog.html\",\"
\\n

{{vm.title}}

\\n

{{vm.body}}

\\n
\");\n$templateCache.put(\"app/main/apps/modules/services/basic-fail-dialog.html\",\"

{{vm.title}}

{{vm.body}}

\\n
\");\n$templateCache.put(\"app/main/apps/modules/services/basic-success-dialog.html\",\"

{{vm.title}}

\\n\\n
\");\n$templateCache.put(\"app/main/apps/modules/services/category-alias-dialog.html\",\"\");\n$templateCache.put(\"app/main/apps/modules/services/clustering-label-context-menu-dialog.html\",\"

\\n\\n

\\n
\\n
\");\n$templateCache.put(\"app/main/apps/modules/services/create-module-dialog.html\",\"

{{vm.title}}

\\n{{workspace.name}}\\n
\");\n$templateCache.put(\"app/main/apps/modules/services/module-add-category-dialog.html\",\"

\\n
\");\n$templateCache.put(\"app/main/apps/modules/services/module-delete-category-dialog.html\",\"

{{vm.title}}

{{vm.categories}}

\\n{{moduleCount.moduleName}} : {{moduleCount.count}}
\\n
\");\n$templateCache.put(\"app/main/apps/modules/services/replace-category-dialog.html\",\"
\\n

{{vm.title}}

\\n

{{vm.body}}

{{moduleCount.moduleName}} : {{moduleCount.count}}\\n
\\n
\");\n$templateCache.put(\"app/main/apps/modules/services/sample-add-category-dialog.html\",\"

\\n
\\n\\n{{item.name}}\\n{{SHARED.INFO.NO_MATCHES_FOUND | translate}}
\\n
Your entry is not long enough.
Your entry is too long.
\\n
\");\n$templateCache.put(\"app/main/apps/modules/services/sample-add-tag-dialog.html\",\"

\\n
\\n
Tag field is required.
\\n
\");\n$templateCache.put(\"app/main/apps/modules/services/save-settings-dialog.html\",\"

\\n\\n

\\n
\\n
\");\n$templateCache.put(\"app/main/apps/modules/services/select-train-aspect-dialog.html\",\"

{{vm.title}}

\\n
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/modules/sidenavs/classification-overview-sidenav-navigation.html\",\"\");\n$templateCache.put(\"app/main/apps/modules/sidenavs/classification-overview-sidenav.html\",\"
\\n {{item.name}} 0\\\">\\n{{item.name}} {{child.name}}\\n{{child.name}}\\n\");\n$templateCache.put(\"app/main/apps/modules/sidenavs/classification-overview-sidenav1.html\",\"
{{item.name}}
{{item.count}}
\\n
\");\n$templateCache.put(\"app/main/apps/modules/sidenavs/classification-sample-sidenav.html\",\"
\");\n$templateCache.put(\"app/main/apps/modules/sidenavs/classification-sample-sidenav0.html\",\"
{{item.name}}
{{item.count}}
\\n
\\n
Tags
\\n{{tag.name}}
{{tag.count}}\\n
\\n\\n
\\n
\");\n$templateCache.put(\"app/main/apps/modules/sidenavs/clustering-sample-sidenav.html\",\"
\\n
\\n{{item.name}} {{item.count}}\\n
\");\n$templateCache.put(\"app/main/apps/modules/sidenavs/list-sidenav.html\",\"
\\n\\n
\\n
0\\\" class=\\\"navigation-simple-top\\\" \\nng-if-permission=\\\"SOURCE/WEBSOURCE/VIEW\\\">
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/modules/sidenavs/rootcause-overview-sidenav.html\",\"
{{item.name}}
{{item.count}}
\\n
\");\n$templateCache.put(\"app/main/apps/modules/sidenavs/rootcause-sample-sidenav.html\",\"
\\n
\\n{{item.name}} {{item.count}}\\n
\");\n$templateCache.put(\"app/main/apps/pipelines/services/basic-confirmation-dialog.html\",\"

{{vm.title}}

{{vm.body}}

\\n\\n
\");\n$templateCache.put(\"app/main/apps/pipelines/services/basic-success-dialog.html\",\"

{{vm.title}}

{{vm.body}}

\\n
\");\n$templateCache.put(\"app/main/apps/pipelines/services/create-pipeline-dialog.html\",\"

{{vm.title}}

\\n{{workspace.name}}\\n
\");\n$templateCache.put(\"app/main/apps/pipelines/services/delete-pipeline-dialog.html\",\"
\\n

\\n\\n

\\n
\\n\\n
\\n
\\n\\n
{{item.name}}\\n
{{item.definition}}
{{item.createDate | date : \\'dd.MM.yyyy\\'}}\\n
{{item.moduleType.name}}
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/pipelines/services/save-pipeline-dialog.html\",\"

\\n\\n

\\n\\n
\");\n$templateCache.put(\"app/main/apps/reports/services/basic-add-dialog.html\",\"

{{vm.title}}

\\n{{vm.body}}

\\n
\");\n$templateCache.put(\"app/main/apps/reports/services/basic-confirm-dialog.html\",\"

{{vm.title}}

\\n

{{vm.body}}

\\n
\");\n$templateCache.put(\"app/main/apps/reports/services/basic-delete-confirm-dialog.html\",\"
\\n

{{vm.title}}

\\n

{{vm.body}}

\\n
\");\n$templateCache.put(\"app/main/apps/reports/services/basic-export-data-dialog.html\",\"

{{vm.title}}

\\n

{{vm.body}}

\\n
\");\n$templateCache.put(\"app/main/apps/reports/services/basic-replace-confirm-dialog.html\",\"
\\n

{{vm.title}}

\\n

{{vm.body}}

\\n
\");\n$templateCache.put(\"app/main/apps/reports/services/basic-update-report-dialog.html\",\"

{{vm.title}}

\\n

{{vm.body}}

\\n
\");\n$templateCache.put(\"app/main/apps/reports/services/field-mapping-dialog.html\",\"

{{vm.title}}

\\n

{{\\'REPORT.DATA_UPLOAD.TEMPLATE_NAME\\'|translate}}:

{{vm.body.uploadMappings.templateName}} {{\\'REPORT.DATA_UPLOAD.UNNAMED_TEMPLATE\\'|translate}}
\\n

0\\\" style=\\\"font-weight: bold; color:#039be5\\\">\\n{{\\'REPORT.DATA_UPLOAD.ADDED_FIELDS\\'|translate}}:

\\n{{\\'SHARED.FIELD\\'|translate}}: \\n{{literalField.fieldHeader}} ({{vm.findNameOfLiteralFieldType(literalField.fieldType)}})
{{\\'REPORT.DATA_UPLOAD.LITERAL_VALUE\\'|translate}}: {{vm.getDateValue(literalField.literalValue)}} {{literalField.literalValue}}

0\\\" style=\\\"font-weight: bold; color:#039be5\\\">\\n{{\\'REPORT.DATA_UPLOAD.DELETED_FIELDS\\'|translate}}:

\\n{{\\'SHARED.FIELD\\'|translate}}: \\n{{deletedField.fieldHeader}} ({{vm.findNameOfLiteralFieldType(deletedField.fieldType)}})

0\\\" style=\\\"font-weight: bold; color:#039be5\\\">\\n{{\\'REPORT.DATA_UPLOAD.EDITS\\'|translate}}:

\\n{{\\'REPORT.DATA_UPLOAD.FIELD\\'|translate}}: {{fieldMapping.fieldHeader}} -> {{fieldMapping.mappedName}}
{{\\'SHARED.PREFIX\\'|translate}}: \\n{{fieldMapping.prefix}}
\\n{{\\'SHARED.SUFFIX\\'|translate}}: {{\\' \\'+fieldMapping.suffix}}
{{\\'REPORT.DATA_UPLOAD.VALUE_MAPS\\'|translate}}: \\n\\n{{value}}->{{mappedValue}}
\\n
\");\n$templateCache.put(\"app/main/apps/reports/services/save-preview-template-dialog.html\",\"

{{vm.title}}

\\n
\\n{{\\'REPORT.DATA_UPLOAD.UPDATE_SELECTED_TEMPLATE\\'|translate}} ({{vm.selectedTemplate.name}})\\n
\\n{{\\'SHARED.COLUMN_NAME\\'|translate}}{{\\'SHARED.FIELD_INFO\\'|translate}}
{{item.originalTitle}}
{{\\'SHARED.NEW_FIELD_NAME\\'|translate}}: {{item.header}}\\n
{{\\'SHARED.FIELD_TYPE\\'|translate}}:\\n {{vm.columnFeatureNameMap[item.columnFeature]}}
\\n{{\\'SHARED.NUMERIC\\'|translate}}:
\\n{{\\'SHARED.MULTI_VALUED\\'|translate}}:
\\n{{\\'SHARED.DELIMETER\\'|translate}}: {{item.delimeter}}
\\n{{\\'SHARED.FORMAT\\'|translate}}: {{item.format}}
\\n{{\\'SHARED.PART\\'|translate}}: {{vm.datePartNameMap[item.part]}}
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/reports/services/select-preview-template-dialog.html\",\"

{{vm.title}}

\\n
{{template.name}}
{{\\'SHARED.COLUMN_NAME\\'|translate}}: {{item.originalTitle}}\\n
{{\\'SHARED.NEW_FIELD_NAME\\'|translate}}:\\n {{item.header}}
{{\\'SHARED.FIELD_TYPE\\'|translate}}:\\n {{vm.columnFeatureNameMap[item.columnFeature]}}
\\n{{\\'SHARED.NUMERIC\\'|translate}}:
\\n{{\\'SHARED.MULTI_VALUED\\'|translate}}:
\\n{{\\'SHARED.DELIMETER\\'|translate}}: {{item.delimeter}}
\\n{{\\'SHARED.FORMAT\\'|translate}}: {{item.format}}
\\n{{\\'SHARED.PART\\'|translate}}: {{vm.datePartNameMap[item.part]}}


\\n
\\n
\");\n$templateCache.put(\"app/main/apps/reports/services/upload-mapping-template-dialog.html\",\"

{{vm.title}}

\\n
{{template.templateName}}
{{\\'REPORT.DATA_UPLOAD.UNNAMED_TEMPLATE\\'|translate}}\\n

0\\\" \\nstyle=\\\"font-weight: bold; color:#039be5\\\">{{\\'REPORT.DATA_UPLOAD.ADDED_FIELDS\\'|translate}}:

{{\\'SHARED.FIELD\\'|translate}}: \\n{{literalField.fieldHeader}} ({{vm.findNameOfLiteralFieldType(literalField.fieldType)}})
{{\\'REPORT.DATA_UPLOAD.LITERAL_VALUE\\'|translate}}: {{vm.getDateValue(literalField.literalValue)}} {{literalField.literalValue}}

0\\\" style=\\\"font-weight: bold; color:#039be5\\\">\\n{{\\'REPORT.DATA_UPLOAD.DELETED_FIELDS\\'|translate}}:

{{\\'SHARED.FIELD\\'|translate}}: \\n{{deletedField.fieldHeader}} ({{vm.findNameOfLiteralFieldType(deletedField.fieldType)}})

0\\\" style=\\\"font-weight: bold; color:#039be5\\\">\\n{{\\'REPORT.DATA_UPLOAD.EDITS\\'|translate}}:

\\n{{\\'REPORT.DATA_UPLOAD.FIELD\\'|translate}}: {{fieldMapping.fieldHeader}} -> {{fieldMapping.mappedName}}
{{\\'SHARED.PREFIX\\'|translate}}: \\n{{fieldMapping.prefix}}
\\n{{\\'SHARED.SUFFIX\\'|translate}}: {{\\' \\'+fieldMapping.suffix}}
{{\\'REPORT.DATA_UPLOAD.VALUE_MAPS\\'|translate}}: \\n\\n{{value}}->{{mappedValue}}
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/reports/services/warning-dialog.html\",\"

{{vm.title}}

\\n

{{vm.body}}

\\n
\");\n$templateCache.put(\"app/main/apps/sources/services/basic-confirm-dialog.html\",\"

{{vm.title}}

\\n

{{vm.body}}

\\n\\n
\");\n$templateCache.put(\"app/main/apps/sources/services/basic-delete-confirm-dialog.html\",\"
\\n

{{vm.title}}

\\n

{{vm.body}}

\\n
\");\n$templateCache.put(\"app/main/apps/sources/services/rule-analysis-dialog.html\",\"

\\n\\n
\\n{{vm.rule.selectedKeywords.operator}}
\\\"{{item.name}}\\\"
{{item.name}}
\\n{{$chip.name}}
\\n
\\n
\\n{{vm.rule.selectedCategories.operator}}{{item.name}}\\n{{$chip.name}}
\\n{{vm.rule.selectedContenttypes.operator}}{{item.name}}\\n{{$chip.name}}
\\n
\\n{{vm.rule.selectedSites.operator}}{{item.name}}\\n{{$chip.name}}
\\n{{vm.rule.selectedSitetypes.operator}}{{item.name}}\\n{{$chip.name}}
\\n{{vm.rule.selectedLanguages.operator}}{{item.name}}\\n{{$chip.name}}
{{document.tag[0]}} \\n\\n{{document.category[0]}} {{document.name_s}}
\\n Detayını Göster\\n
DETAY
\\n
{{vm.document.name_s}}\\n
GazeteTarih\\n{{vm.getTime(vm.document.pdbate_tdt)}}
İçerik Tipi{{vm.document.tag[0]}}İçerik Kategorisi{{vm.document.category[0]}}
Başlık{{vm.document.title}}
Açıklama{{vm.document.description[0]}}
Link
İçerik
{{vm.document.content}}
0\\\">\\n{{((vm.pagination.current-1) * 10) + 1}} - {{(vm.pagination.current * 10 > vm.pagination.count ? vm.pagination.count : vm.pagination.current * 10)}} {{ \\'SHARED.OF\\' | translate }} {{vm.pagination.count}}\\n\\n{{ \\'SHARED.PAGE\\' | translate }} / {{vm.pagination.totalNumber}}\\nvm.pagination.last\\\">\\n
\");\n$templateCache.put(\"app/toolbar/layouts/horizontal-navigation/services/change-password-dialog.html\",\"

\\n
\\n
Please enter the old password.\\n
\\n
new password field is required\\n
\\nPassword confirm field must match the password
\\nSave\\n
\");\n$templateCache.put(\"app/toolbar/layouts/horizontal-navigation/services/success-dialog.html\",\"

Password has changed successfully.

\");\n$templateCache.put(\"app/toolbar/layouts/horizontal-navigation/services/usage-stats-dialog.html\",\"

\\n
\\n
Save
\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-1/template-1.html\",\"
{{card.title}}
{{card.subtitle}}\\n
{{card.text}}
\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-10/template-10.html\",\"
\\n
{{card.title}}
{{card.subtitle}}
\\\"{{card.media.image.alt}}\\\"
{{card.text}}
\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-2/template-2.html\",\"
{{card.title}}
\\n{{card.subtitle}}
{{card.text}}\\n
\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-3/template-3.html\",\"
{{card.title}}
{{card.subtitle}}
{{card.cta}}
\\\"{{card.media.image.alt}}\\\"
\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-4/template-4.html\",\"
{{card.title}}\\n
{{card.text}}
\\\"{{card.media.image.alt}}\\\"
\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-5/template-5.html\",\"
{{card.title}}
\\n{{card.event}}
\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-6/template-6.html\",\"
\\n{{card.subtitle}}
{{card.title}}
{{card.text}}
\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-7/template-7.html\",\"
{{card.title}}\\n
{{card.subtitle}}
{{card.text}}
\\n
\\\"{{card.media.image.alt}}\\\"
\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-8/template-8.html\",\"
{{card.title}}
{{card.subtitle}}\\n
{{card.button1}}\\n{{card.button2}}
{{card.text}}
\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-9/template-9.html\",\"
{{card.title}}
\\n{{card.subtitle}}
{{card.text}}
\\\"{{card.media.image.alt}}\\\"
\\n
\");\n$templateCache.put(\"app/core/directives/ms-stepper/templates/horizontal/horizontal.html\",\"
{{step.stepNumber}} \\n
\\n{{step.stepTitle}}
Optional
\\n
Back
\\n
Next\\nCreate
\");\n$templateCache.put(\"app/main/apps/management/module/views/list.html\",\"
\\n\\n{{\\'SHARED.CLASSIFICATION\\'|translate}}{{\\'SHARED.CLUSTERING\\'|translate}}\\n{{\\'SHARED.TOPICMODELING\\'|translate}}\\n{{\\'SHARED.ROOTCAUSE\\'|translate}}{{\\'SHARED.SENTIMENT\\'|translate}}{{\\'SHARED.NAMEDENTITY\\'|translate}}{{\\'SHARED.CUSTOM_SENTIMENT\\'|translate}}\\n{{\\'SHARED.PIPELINE\\'|translate}}\\n{{\\'SHARED.REPORT\\'|translate}}
\\n{{vm.pagination.current}} - {{vm.pagination.totalPage}} in {{vm.pagination.totalPage}}\\n
\\n
{{\\'SHARED.TABLE_ACTION\\'|translate}}\\n{{\\'SHARED.DATE\\'|translate}}\\n{{\\'SHARED.MODULES\\'|translate}}{{\\'SHARED.ACTIONS\\'|translate}}
{{item.id}}{{item.name}}\\n\\n{{item.description}}\\n{{item.workspace.name}}{{workspace.name}}{{\\'SHARED.CLASSIFICATION\\'|translate}} \\n{{\\'SHARED.CLUSTERING\\'|translate}} {{\\'SHARED.TOPICMODELING\\'|translate}} \\n{{\\'SHARED.ROOTCAUSE\\'|translate}} {{\\'SHARED.SENTIMENT\\'|translate}} \\n{{\\'SHARED.NAMEDENTITY\\'|translate}} {{\\'SHARED.CUSTOM_SENTIMENT\\'|translate}} \\n{{\\'SHARED.PIPELINE\\'|translate}} {{\\'SHARED.REPORT\\'|translate}}{{item.isActive}}\\n{{item.createDate | date:\\'yyyy-MM-dd HH:mm:ss Z\\'}}
  1. {{m.name}}
\\n\\n
\\n\\n
\\n
\");\n$templateCache.put(\"app/main/apps/management/module/views/sidenav.html\",\"
0\\\">0 && ((!vm.feedbackMode && item.title != \\'updated_by_s\\') || vm.feedbackMode)\\\"> {{::item.title}} {{::item.title}} {{::item.title}} {{::item.title}} {{::child.value}}\\n{{::child.value}}\\n {{::child.count}} Daha Fazla\\n
\");\n$templateCache.put(\"app/main/apps/modules/views/analysis/analysis-overview.html\",\"
\\n
\\n
\\n

\\n
{{vm.processMessage}}{{vm.text | translate}} 0\\\" md-direction=\\\"left\\\">{{ vm.analysisUpdateDate }}\\n
{{\\'CLASSIFICATION.GROUP\\' | translate }} {{vm.filters.clusterNo}}
EditEdit
\\n
SELECT All\\nSELECT All
\\n
DeleteDelete
Delete All\\nDelete All
0\\\">{{ \\'CLASSIFICATION.EDIT\\' | translate }}
\\n{{vm.pagination.current==1?1:(vm.pagination.current*10)-10}} - {{vm.pagination.current==1?10:(vm.pagination.current)*10}} of {{vm.pagination.count}}\\n\\n{{ \\'SHARED.PAGE\\' | translate }} / {{vm.pagination.totalNumber}}\\n=vm.pagination.last\\\">\\n
0 && vm.editMode\\\" style=\\\"margin:0px 4px 0px 0px\\\">{{vm.getCategoryTitle(cat)}}\\n
{{vm.getCategoryTitle(cat)}}\\n
\\n\\n{{vm.getCategoryTitle(cat)}}
{{item.content}}
\\n{{vm.getCategoryTitle(category)}}
-
0 && vm.editMode\\\" \\nstyle=\\\"margin:0px 4px 0px 0px\\\" background>{{vm.getCategoryTitle(cat)}}\\n
{{vm.getCategoryTitle(cat)}}\\n
\\n\\n{{vm.getCategoryTitle(cat)}}
+\\n
{{tag}}
\\n
{{cluster.name}}
{{item.categories[0].name}}
\\n\\n\\n
\");\n$templateCache.put(\"app/main/apps/modules/views/category/classification-category.html\",\"
{{vm.getCategoryTitle(category)}}\\n\\n{{vm.getCategoryTitle(category)}}\\n{{vm.getCategoryTitle(category)}}
{{vm.getCategoryTitle(category)}}\\n\\n{{vm.getCategoryTitle(category)}}\\n{{vm.getCategoryTitle(category)}}
\\n
\\n
\\n{{vm.getCategoryTitle(vm.selectedReplace.selectedMainOld)}}
{{vm.getCategoryTitle(vm.selectedReplace.selectedMainOld)}}
\\n
{{vm.getCategoryTitle(vm.selectedReplace.selectedSub1Old)}}
{{vm.getCategoryTitle(vm.selectedReplace.selectedSub1Old)}}\\n
\\n
{{vm.getCategoryTitle(vm.selectedReplace.selectedSub2Old)}}
{{vm.getCategoryTitle(vm.selectedReplace.selectedSub2Old)}}\\n
\\n
{{vm.getCategoryTitle(vm.selectedReplace.selectedMainNew)}}
{{vm.getCategoryTitle(vm.selectedReplace.selectedMainNew)}}\\n
\\n
{{vm.getCategoryTitle(vm.selectedReplace.selectedSub1New)}}
{{vm.getCategoryTitle(vm.selectedReplace.selectedSub1New)}}\\n
\\n
{{vm.getCategoryTitle(vm.selectedReplace.selectedSub2New)}}
{{vm.getCategoryTitle(vm.selectedReplace.selectedSub2New)}}\\n
\\n
\\n
{{vm.getCategoryTitle(item)}}\\n
\\n
\\n\\n{{vm.getCategoryTitle(item)}}
\\n
\\n\\n{{vm.getCategoryTitle(item)}}
\\n
\\n
\\n
{{vm.getCategoryTitle(item)}}\\n
0\\\" \\nflex md-require-match md-floating-label=\\\"Alt Kategori\\\" md-no-cache=\\\"true\\\" md-autoselect=\\\"true\\\" md-clear-button=\\\"true\\\" \\nmd-dropdown-items=\\\"10\\\" md-selected-item=\\\"vm.selectedDeleteSub1Category\\\" md-search-text=\\\"vm.searchDeleteSub1Category\\\" \\nmd-selected-item-change=\\\"vm.changeDeleteSelectSub1Category(item)\\\" \\nmd-search-text-change=\\\"vm.deleteSub1CategorySearch(vm.searchDeleteSub1Category)\\\" \\nmd-items=\\\"item in vm.deleteSub1CategorySearch(vm.searchDeleteSub1Category)\\\" md-item-text=\\\"vm.getCategoryTitle(item)\\\" \\nmd-min-length=\\\"0\\\" md-menu-class=\\\"autocomplete-custom-template\\\">{{vm.getCategoryTitle(item)}}\\n
0\\\" \\nflex md-require-match md-floating-label=\\\"Alt Kategori\\\" md-no-cache=\\\"true\\\" md-autoselect=\\\"true\\\" md-clear-button=\\\"true\\\" \\nmd-dropdown-items=\\\"10\\\" md-selected-item=\\\"vm.selectedDeleteSub2Category\\\" md-search-text=\\\"vm.searchDeleteSub2Category\\\" \\nmd-selected-item-change=\\\"vm.changeDeleteSelectCategory(item)\\\" \\nmd-search-text-change=\\\"vm.deleteSub2CategorySearch(vm.searchDeleteSub2Category)\\\" \\nmd-items=\\\"item in vm.deleteSub2CategorySearch(vm.searchDeleteSub2Category)\\\" md-item-text=\\\"vm.getCategoryTitle(item)\\\" \\nmd-min-length=\\\"0\\\" md-menu-class=\\\"autocomplete-custom-template\\\">{{vm.getCategoryTitle(item)}}\\n
\\n
\\n
\\n
\\n
\\n\\\"logo\\\"
\\n\\n{{ \\'SHARED.ADD\\' | translate }}
-
{{alias.catName}}
\\n
{{alias.trAlias}}
\\\"logo\\\"
{{alias.enAlias}}
\\n
\\n
-1\\\" style=\\\"color:red\\\">\\n{{\\'MODULES.ATTRIBUTE.WARN.TITLE_EXISTS\\'|translate}}
-1\\\">\\n
\\n

{{field.fieldTitle}}
{{field.deleteWarning}}

{{field.fieldTitle}}
{{field.deleteWarning}}
\\n
\");\n$templateCache.put(\"app/main/apps/modules/views/create/classification.html\",\"
\\n
\\n\\n
\\n
\\n
\\n
{{item.name}}
\\n
\");\n$templateCache.put(\"app/main/apps/modules/views/create/clustering.html\",\"
\\n
\\n
\\n
\\n
\\n
{{item.name}}
\\n
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/modules/views/create/create-module.html\",\"

\\n
\");\n$templateCache.put(\"app/main/apps/modules/views/create/namedentity.html\",\"
\\n
\\n
\\n
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/modules/views/create/pipeline.html\",\"
\\n
\\n
\\n
0\\\" layout=\\\"row\\\" \\nng-repeat=\\\"item in vm.added | filter:vm.filters.search track by $index\\\">
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/modules/views/create/report.html\",\"
\\n
\\n
\\n
0\\\" layout=\\\"row\\\" \\nng-repeat=\\\"item in vm.added | filter:vm.filters.search track by $index\\\">
\\n
\\n
\\n
\\n{{workspace.name}}\\n
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/modules/views/create/rootcause.html\",\"
\\n
\\n
\\n
\\n
\\n
{{item.name}}
\\n
\\n
{{item.name}}
\\n
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/modules/views/create/sentiment.html\",\"
\\n
\\n
\\n
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/modules/views/create/topicmodeling.html\",\"
\\n
\\n
\\n
\\n
\\n
{{item.name}}
\\n
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/modules/views/dialog/save-settings-dialog.html\",\"

\\n\\n

\\n
\\n
\");\n$templateCache.put(\"app/main/apps/modules/views/evaluation/classification-evaluation.html\",\"

: {{vm.evaluationResultsCount}}

10\\n50100\\n
\\n
\\n\\n{{category.name}}\\n
{{category.name}}
\\n
PredictedPredicted Rate
\\n{{result.foldNumber}}{{result.text}}{{result.actual}}\\n{{result.predicted}}\\n{{result.predictedRate| number : 2}}
{{rate.name}}\\n{{rate.value|number : 2}}
\\n<
2)\\\" \\nng-click=\\\"vm.searchEvaluation(vm.selectedPage-2,vm.orderType,vm.orderField,vm.searchActualCategory,vm.searchPredictedCategory)\\\">\\n{{vm.selectedPage-2}}
1)\\\" \\nng-click=\\\"vm.searchEvaluation(vm.selectedPage-1,vm.orderType,vm.orderField,vm.searchActualCategory,vm.searchPredictedCategory)\\\">\\n{{vm.selectedPage-1}}
\\n{{vm.selectedPage}}
\\n{{vm.selectedPage + 1}}
\\n{{vm.selectedPage + 2}}
\\n>
\\n\");\n$templateCache.put(\"app/main/apps/modules/views/list/list-view.html\",\"
\\n
\\n
\\n\\n\\n
\\n{{\\'SHARED.PAGING.NUMBER_OF_MODULES\\' | translate}}:
{{\\'SHARED.PAGING.NUMBER_OF_PIPELINES\\' | translate}}:
{{\\'SHARED.PAGING.NUMBER_OF_REPORTS\\' | translate}}:
{{\\'SHARED.PAGING.NUMBER_OF_SOURCES\\' | translate}}:
\\n
102050
{{\\'SHARED.PAGING.TOTAL\\' | translate}}: {{vm.filtertedModulesLength}}
{{\\'SHARED.PAGING.TOTAL\\' | translate}}: {{vm.pipelines.length}}\\n
\\n{{\\'SHARED.PAGING.TOTAL\\' | translate}}: {{vm.reports.length}}
\\n{{\\'SHARED.PAGING.TOTAL\\' | translate}}: {{vm.pagination.sources.totalElements}}
\\n{{vm.pagination.modules.current}}
{{vm.pagination.pipelines.current}}\\n
{{vm.pagination.reports.current}}
{{vm.pagination.sources.current + 1}}
\\n\\n\\n\\n
\\n
\\n
{{item.name}}
\\n
{{item.definition}}
{{item.createDate | date : \\'dd.MM.yyyy\\'}}
{{item.moduleType.name}}
\\n
\\n
\\n
\\n
{{item.name}}
{{item.definition}}
\\n{{item.createDate | date : \\'dd.MM.yyyy\\'}}
{{item.name}}
{{item.definition}}
{{item.createDate | date : \\'dd.MM.yyyy\\'}}
\\n
\\n
\\n
\\n{{item.name}}
{{item.description}}
{{item.createDate | date : \\'dd.MM.yyyy\\'}}
\\n
\\n\\n\\n\\n
\\n
\\\"logo\\\"\\\"logo\\\"
\");\n$templateCache.put(\"app/main/apps/modules/views/overview/classification-overview.html\",\"
\\n
\\n
\\n

\\n
\\n{{vm.counts.all}}
{{vm.counts.category}}
\\n
\\n
0\\\">
\\n
{{vm.getCategoryTitle(row)}}
{{vm.findConfusionTooltip(row,item)}}\\n
0\\\" class=\\\"widget-group\\\" layout=\\\"row\\\" flex=\\\"100\\\" layout-wrap>
\\n
{{\\'CLASSIFICATION.ALL_CATEGORIES\\' | translate}} \\n{{vm.getCategoryTitle(item)}}\\n{{item.accuracy}}%{{item.precision}}%\\n{{item.recall}}%
\\n
\");\n$templateCache.put(\"app/main/apps/modules/views/overview/clustering-overview.html\",\"
\\n

{{vm.counts}}
\\n
\\n
\\n\\n
\");\n$templateCache.put(\"app/main/apps/modules/views/overview/rootcause-overview.html\",\"
\\n

{{vm.counts}}
\\n
\\n\\n
\");\n$templateCache.put(\"app/main/apps/modules/views/overview/topicmodeling-overview.html\",\"
\\n

{{vm.counts}}
\\n
\\n
\\n\\n
\");\n$templateCache.put(\"app/main/apps/modules/views/rules/classification-rules.html\",\"
\\n{{vm.getCategoryTitle(item)}}
Positive
+\\n
{{ term.rule }}-
\\n
Negative
+\\n
{{ term.rule }}-
\\n
Relevant
+\\n
{{ term.rule }}-
\\n
Irrelevant
+\\n
{{ term.rule }}-
\\n
\");\n$templateCache.put(\"app/main/apps/modules/views/sample/sample-overview.html\",\"
\\n
\\n
\\n
\\n

\\n
\\nAdd SamplesAdd Samples\\n
\\nDelete\\nDelete
0\\\">\\n{{vm.pagination.current==1?1:(vm.pagination.current*10)-10}} - {{vm.pagination.current==1?10:(vm.pagination.current)*10}} of {{vm.pagination.count}}\\n\\n{{ \\'SHARED.PAGE\\' | translate }} / {{vm.pagination.totalNumber}}\\n=vm.pagination.last\\\">\\n
\\n
{{vm.getCategoryTitle(category)}}
{{tag}}
{{nominal.title}} : {{nominal.value}}
\\n
{{real.title}}\\n : {{real.value}}
{{cluster.name}}
{{item.categories[0].name}}
\\n
\\n\\n\\n
\");\n$templateCache.put(\"app/main/apps/modules/views/sample/sample-upload.html\",\"
\\n
\\n
\\n
\\n{{column.title?column.title:column.name}}
{{constantCategory.name}}\\n
Remove\\n
\\n{{column.custom?column.name:item[column.name]}}
\\n
\\n

{{trace.message}}

\");\n$templateCache.put(\"app/main/apps/modules/views/settings/module-settings.html\",\"
\\n{{bm.name}}\\n
\\n
\\n
\\n
\\n
ENTR\\n
\\n{{ feature.name }}\\n{{ st.name }}\\n\\n{{ type.name }}\\n\\n{{ source.name }}\\n\\n{{ type.name }}\\n\\n{{ trainAlgorithm }}\\n\\n{{ processUnit }}\\n\\n%{{item}}\\n
\\n\\n
\\n\\n
\\n\\n
\\n
\\n\\n
Id
{{stopLabel.id}}{{stopLabel.word}}
\\n
\\n
Id
\\n{{stopWord.id}}{{stopWord.word}}
\\n
\\n
\\n\\n\\n
0\\\" \\nlayout=\\\"row\\\" ng-repeat=\\\"item in vm.addedPipeline\\\">
\\n
{{item.name}}
{{item.definition}}
\\n
\\n
{{item.name}}
{{item.definition}}
\\n
\\n
\\n
0\\\" layout=\\\"row\\\" ng-repeat=\\\"item in vm.addedClassifier\\\">
\\n
\\n{{item.name}}
{{item.definition}}
\\n
\\n{{item.name}}
{{item.definition}}
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/modules/views/test/classification-test.html\",\"

0\\\" style=\\\"font-weight: bold\\\">{{\\'SHARED.NOMINAL_ATTRIBUTES\\'|translate}}\\n

\\n{{ moduleTrain.name }}\\n
\\n
Add Samples\\nAdd SamplesAdd Samples

{{res.name}}

\\n
\");\n$templateCache.put(\"app/main/apps/modules/views/test/namedentity-test.html\",\"
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/modules/views/test/sentiment-item-detail-dialog.html\",\"
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/modules/views/test/sentiment-multi-tab-preview.html\",\"
\\n
\\n
\\n{{item[column.name]}}

\");\n$templateCache.put(\"app/main/apps/modules/views/test/sentiment-multi-tab-result.html\",\"
\\n
\\n
\\n
\\n
{{item.label}}{{item.content}}
\\n
\");\n$templateCache.put(\"app/main/apps/modules/views/test/sentiment-multi-test.html\",\"
\");\n$templateCache.put(\"app/main/apps/modules/views/test/sentiment-single-test.html\",\"
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/modules/views/test/sentiment-test.html\",\"
\\n\\n
\");\n$templateCache.put(\"app/main/apps/management/role/services/delete-dialog.html\",\"
\\n

\\n\\n

\\n\\n
\");\n$templateCache.put(\"app/main/apps/management/role/services/save-dialog.html\",\"

\\n\\n

\\n\\n
\");\n$templateCache.put(\"app/main/apps/management/role/services/search-ad-group-dialog.html\",\"

\\n
\\n
{{\\'SHARED.PAGING.TOTAL\\' | translate}}: {{vm.groups.length}}\\n
{{vm.pagination.current}}
\\n\\n
\\n
{{item.name}}
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/management/role/services/success-dialog.html\",\"

{{vm.title}}

{{vm.body}}

\\n
\");\n$templateCache.put(\"app/main/apps/management/role/views/edit.html\",\"
\\n
\\n
\\n{{type.name}}
\\n
{{item.name}}\\n{{$chip.name}}
Yetkiler
1 || area.name==\\'SOURCES\\'\\\" class=\\\"v-line\\\" rowspan=\\\"2\\\">
1 || area.name==\\'SOURCES\\'\\\" class=\\\"v-line\\\" \\ntranslate=\\\"SHARED.{{scope.name}}\\\">{{permission.name}}
\\n
{{vm.mode==\\'create\\'?\\'SHARED.CREATE\\':\\'SHARED.SAVE\\' | translate}}\\n
\");\n$templateCache.put(\"app/main/apps/management/role/views/list.html\",\"
\\n
\\n
{{item.name}}\\n
\\n{{item.name}}
\\n{{\\'SHARED.PAGING.NUMBER_OF_ROLES\\' | translate}}:
10\\n2050
{{\\'SHARED.PAGING.TOTAL\\' | translate}}: {{filtered.length}}\\n
{{vm.pagination.current}}
\\n\\n
\\n\\n
{{item.name}}
{{item.definition}}
{{workspace.name}}
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/management/user/services/delete-dialog.html\",\"
\\n

\\n\\n

\\n\\n
\");\n$templateCache.put(\"app/main/apps/management/user/services/delete-user-register-request-dialog.html\",\"
\\n

\\n\\n\\n
\");\n$templateCache.put(\"app/main/apps/management/user/services/save-dialog.html\",\"

\\n\\n

\\n\\n
\");\n$templateCache.put(\"app/main/apps/management/user/services/search-ad-user-dialog.html\",\"

\\n
\\n
{{\\'SHARED.PAGING.TOTAL\\' | translate}}: {{vm.groups.length}}\\n
{{vm.pagination.current}}
\\n\\n
\\n
\\n
\\n{{item.fullName}}
{{item.userName}}
{{item.email}}
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/management/user/services/success-dialog.html\",\"

{{vm.title}}

{{vm.body}}

\\n
\");\n$templateCache.put(\"app/main/apps/management/user/services/user-filter-dialog.html\",\"

\\n
{{filterField.fieldTitle}}\\n
+
\\n-

\\n
\");\n$templateCache.put(\"app/main/apps/management/user/views/edit.html\",\"
\\n
\\n{{type.name}}\\n
\\n
\\n
\\n
\\n
{{item.name}}\\n{{$chip.name}}\\n\\n\\n\\n
{{item.name}}\\n{{$chip.name}}
\\n
\\n{{vm.mode==\\'create\\'||vm.mode==\\'request\\'?\\'SHARED.CREATE\\':\\'SHARED.SAVE\\' | translate}}
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/management/user/views/list.html\",\"
\\n
\\n\\n
\\n\\n\\n{{ \\'MANAGEMENT.USER.USER_REQUESTS\\' | translate }}\\n\\n{{ \\'MANAGEMENT.USER.USER_REGISTER_REQUESTS\\' | translate }}\\n\\n{{ \\'MANAGEMENT.USER.USER_DEMO_REQUESTS\\' | translate }}
\\n\\n{{ \\'MANAGEMENT.USER.USER_REQUESTS\\' | translate }}
\\n{{item.name}}
\\n{{item.name}}
{{item.name}}\\n
\\n{{\\'SHARED.PAGING.NUMBER_OF_USERS\\' | translate}}:
\\n102050\\n
\\n{{\\'SHARED.PAGING.TOTAL\\' | translate}}: {{filtered.length}}
\\n
{{vm.pagination.current}}
\\n
\\n
\\n
{{item.name}}\\n
{{item.userName}}
{{item.createDate | date : \\'dd.MM.yyyy\\'}}
\\n
{{role.name}}
\\n
{{workspace.name}}
\\n
\\n
\\n
{{item.name}}
{{item.userName}}
\\n{{item.createDate | date : \\'dd.MM.yyyy\\'}}
\\n
{{item.name}}
\\n{{item.email}}
Not: {{item.note}}
\\n{{item.createDate | date : \\'dd.MM.yyyy\\'}}
\");\n$templateCache.put(\"app/main/apps/management/user/views/userdemorequest.html\",\"
\\n
\\n *
\\n
*
\\n
\\n
\\n
*
\\n
\\n
\\n
*
\\n
\\n
\\n
*
\\n
\\n
\\n
*
\\n
\\n{{item}}
\\n{{item}}\\n
\\n
{{\\'SHARED.SAVE\\' | translate}}\\n
\");\n$templateCache.put(\"app/main/apps/management/user/views/userregisterrequest.html\",\"
\\n
\\n{{\\'REGISTER.REGISTER_FORM.USER_TYPES.SAML\\' | translate}}\\n\\n{{\\'REGISTER.REGISTER_FORM.USER_TYPES.STANDART\\' | translate}}\\n
\\n
\\n
\\n
\\n
\\n
\\n{{\\'REGISTER.REGISTER_FORM.AUTHORITY.REPORTVIEWER\\'|translate}}\\n\\n{{\\'REGISTER.REGISTER_FORM.AUTHORITY.REPORTADMIN\\'|translate}}{{\\'REGISTER.REGISTER_FORM.AUTHORITY.WORKSPACEADMIN\\'|translate}}\\n\\n{{\\'REGISTER.REGISTER_FORM.AUTHORITY.OTHER\\'|translate}}\\n
\\n
\\n
\\n
\\n
{{\\'SHARED.CREATE\\' | translate}}\\n
\\n
\");\n$templateCache.put(\"app/main/apps/management/workspace/services/delete-dialog.html\",\"
\\n

\\n\\n

\\n
\\n\\n
\\n
\\n\\n
{{item.name}}\\n
{{item.definition}}
{{item.createDate | date : \\'dd.MM.yyyy\\'}}\\n
{{item.moduleType.name}}
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/management/workspace/services/save-dialog.html\",\"

\\n\\n

\\n\\n
\");\n$templateCache.put(\"app/main/apps/management/workspace/services/success-dialog.html\",\"

{{vm.title}}

{{vm.body}}

\\n
\");\n$templateCache.put(\"app/main/apps/management/workspace/views/edit.html\",\"
\\n
\\n
\\n
\\n
\\n
\\n
\\\"{{item.name}}\\\"
Ekle
{{item.keyword}}
{{vm.rule.selectedKeywords.operator}}\\n{{item.name}}{{vm.rule.selectedCategories.operator}}
{{item.name}}\\n{{vm.rule.selectedContenttypes.operator}}\\n{{item.name}}\\n{{vm.rule.selectedSites.operator}}
{{item.name}}\\n{{vm.rule.selectedSitetypes.operator}}{{item.name}}\\n{{vm.rule.selectedLanguages.operator}}
\\n
\\n
{{\\'RULE.EXCLUDE\\' | translate}}
0\\\" \\nlayout=\\\"row\\\" class=\\\"p-3\\\" layout-wrap>{{\\'RULE.SITES\\' | translate}}: {{site.name}}\\n{{vm.rule.selectedSites.operator}}\\n
0\\\" layout=\\\"row\\\" class=\\\"p-3\\\" layout-wrap>{{\\'RULE.SITETYPES\\' | translate}}: {{sitetype.name}}\\n{{vm.rule.selectedSitetypes.operator}}
0\\\" \\nlayout=\\\"row\\\" class=\\\"p-3\\\" layout-wrap>{{\\'RULE.CATEGORIES\\' | translate}}: {{category.name}}\\n{{vm.rule.selectedCategories.operator}}
0\\\" \\nlayout=\\\"row\\\" class=\\\"p-3\\\" layout-wrap>{{\\'RULE.CONTENTTYPES\\' | translate}}: \\n{{contenttype.name}}{{vm.rule.selectedContenttypes.operator}}
0\\\" layout=\\\"row\\\" layout-wrap>\\n{{\\'RULE.LANGUAGES\\' | translate}}: {{language.name}}{{vm.rule.selectedLanguages.operator}}
0\\\" layout=\\\"row\\\" layout-wrap>\\n{{\\'RULE.KEYWORDS\\' | translate}}: {{keyword.name}}{{vm.rule.selectedKeywords.operator}}
\\n
\\n{{\\'RULE.EXCLUDE\\' | translate}}
\\n
\\n
0\\\" layout=\\\"row\\\" class=\\\"p-3\\\" layout-wrap>\\n{{\\'RULE.SITES\\' | translate}}: {{site.name}} {{item.selectedSites.operator}}
0\\\" layout=\\\"row\\\" class=\\\"p-3\\\" layout-wrap>\\n{{\\'RULE.SITETYPES\\' | translate}}: {{sitetype.name}} {{item.selectedSitetypes.operator}}
0\\\" layout=\\\"row\\\" class=\\\"p-3\\\" layout-wrap>\\n{{\\'RULE.CATEGORIES\\' | translate}}: {{category.name}} {{item.selectedCategories.operator}}
0\\\" layout=\\\"row\\\" class=\\\"p-3\\\" layout-wrap>{{\\'RULE.CONTENTTYPES\\' | translate}}: {{contenttype.name}} {{item.selectedContenttypes.operator}}
0\\\" layout=\\\"row\\\" layout-wrap>\\n{{\\'RULE.LANGUAGES\\' | translate}}: {{language.name}} {{item.selectedLanguages.operator}}
0\\\" layout=\\\"row\\\" layout-wrap>\\n{{\\'RULE.KEYWORDS\\' | translate}}: {{keyword.name}} {{item.selectedKeywords.operator}}
\\n
{{vm.mode==\\'create\\'?\\'SHARED.CREATE\\':\\'SHARED.SAVE\\' | translate}}\\n
\");\n$templateCache.put(\"app/main/apps/management/workspace/views/list.html\",\"
\\n
\\n
{{\\'SHARED.PAGING.NUMBER_OF_WORKSPACES\\' | translate}}:
102050
\\n{{\\'SHARED.PAGING.TOTAL\\' | translate}}: {{filtered.length}}
\\n
{{vm.pagination.current}}
\\n
{{item.name}}
{{item.definition}}
\\n\\n
\");\n$templateCache.put(\"app/main/apps/pipelines/views/create/create.html\",\"
\\n
\\n
\\n
0\\\" layout=\\\"row\\\" \\nng-repeat=\\\"item in vm.added | filter:vm.filters.search track by $index\\\">
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/pipelines/views/settings/settings.html\",\"
\\n
\\n
\\n\\n{{ definition.name }}
\\n
\\n
\\n
0\\\" layout=\\\"row\\\" \\nng-repeat=\\\"item in vm.added | filter:vm.filters.search track by $index\\\">
\\n
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/alert/alert.html\",\"
{{\\'REPORT.ALERT.TITLE\\'| translate }}\\n
\\n
{{ \\'REPORT.ALERT.NAME\\' | translate }}\\n{{ \\'REPORT.ALERT.TYPE\\' | translate }}{{ \\'REPORT.ALERT.PERIOD_REPEAT_TIME\\' | translate }}\\n{{ \\'REPORT.ALERT.CONDITION\\' | translate }}{{ \\'REPORT.ALERT.RECEPIENTS\\' | translate }}
{{setting.name}}\\n{{\\'REPORT.ALERT.TYPES.\\' + setting.type | translate}}\\n{{ setting.period | formatPeriod | translate : { period : setting.period, repeatTime: setting.period.repeatTime/100 + \\':00\\', day: ((setting.period.repeatWeekDay > 0) ? vm.dayNames[setting.period.repeatWeekDay-1] : vm.dayNames[setting.period.repeatWeekDay]) } }}\\n
{{vm.getModuleNameById(mc.moduleId)}}
: {{vm.getCategoryTitleById(mc.category.id)}}
\\n-> {{vm.getCategoryTitleById(mc.category.sub.id)}}
\\n-> {{vm.getCategoryTitleById(mc.category.sub.sub.id)}}
(% {{mc.rate}})
\\n
{{\\'REPORT.ALERT.FREQUENCYTYPES.\\' + freq.name | translate}},\\n
{{subscription}}
\\n
\\n
\\n\\n{{ item.name }}{{ item.name }}\\n\\n{{ item.name }}\\n\\n{{ item }}\\n 0 ) || ( vm.currentSetting.period.type == \\'WEEKLY\\' && vm.currentSetting.period.repeatWeekDay > 0 ) || vm.currentSetting.period.type == \\'DAILY\\'\\\">\\n\\n{{ item.name }}
{{ item.name }}\\n{{ item.name }}\\n
\\n
\\n\\n{{ item.module.name }}
{{vm.getCategoryTitle(category)}}\\n
\\n\\n{{vm.getCategoryTitle(sub1category)}}
0\\\" \\nstyle=\\\"width:20%; display:inline-block; vertical-align: middle\\\">\\n\\n{{vm.getCategoryTitle(sub2category)}}
+
\\n-
\\n{{vm.getModuleNameById(mc.moduleId)}}
: {{vm.getCategoryTitleById(mc.category.id)}}
-> {{vm.getCategoryTitleById(mc.category.sub.id)}}
\\n
\\n-> {{vm.getCategoryTitleById(mc.category.sub.sub.id)}}
(% {{mc.rate}})
\\n\\n{{item.settings.definition}}\\n\\n\\n\\n
\\n{{item.settings.definition}}\\n{{item.settings.definition}}\\n
{{item.settings.definition}}->
-\\n
{{item.definition}}
\\n{{item.settings.definition}}\\n\\n{{item.title}}
\\n
\\n\\n
\\n
+
\\n-
{{subscription}}
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/create/create-report-dialog.html\",\"

{{vm.title}}

\\n{{workspace.name}}\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/create/create_xx.html\",\"
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/create/edit-report-field-dialog.html\",\"

\\n\\n
\\n\\n\\n{{ \\'SHARED.CLASSIFIER\\' | translate }}\\n{{ \\'SHARED.SENTIMENT_CLASSIFIER\\' | translate }}\\n{{ \\'SHARED.NOMINAL_ATTRIBUTE\\' | translate }}\\n{{ \\'SHARED.NUMERIC_NOMINAL_ATTRIBUTE\\' | translate }}\\n{{ \\'SHARED.MULTIVALUED_NOMINAL_ATTRIBUTE\\' | translate }}\\n{{ \\'SHARED.NUMERIC_MULTIVALUED_NOMINAL_ATTRIBUTE\\' | translate }}\\n{{ \\'SHARED.DATE\\' | translate }}{{ \\'SHARED.ATTRIBUTE\\' | translate }}\\n{{ \\'SHARED.TITLE\\' | translate }}
\\n\\n\\n
\\n
\\n
\\n
\\n\\n
\\n{{ vm.type==1?\\'SHARED.ADD\\':\\'SHARED.UPDATE\\' | translate }}
\");\n$templateCache.put(\"app/main/apps/reports/views/create/edit-report-settings.html\",\"

\\n\\n
\\n
\\n{{\\'REPORT.SETTINGS.SHOW_ID\\' | translate}}{{\\'REPORT.SETTINGS.SHOW_CONTENT_LENGTH\\' | translate}}\\n\\n{{\\'REPORT.SETTINGS.SHOW_CREATE_DATE\\' | translate}}{{\\'REPORT.SETTINGS.SHOW_CATEGORY_TAGS\\' | translate}}\\n\\n{{\\'REPORT.SETTINGS.SHOW_TAGS\\' | translate}}\\n{{\\'REPORT.SETTINGS.SHOW_DOCUMENT_SENTIMENT_DETAIL_CHART\\' | translate}}\\n{{\\'REPORT.SETTINGS.USER_RESTRICTION_ACTIVE\\' | translate}}
\\n{{\\'REPORT.SETTINGS.TEMPLATES.1\\' | translate}}\\n{{\\'REPORT.SETTINGS.TEMPLATES.2\\' | translate}}{{\\'REPORT.SETTINGS.TEMPLATES.3\\' | translate}}\\n\\n{{\\'REPORT.SETTINGS.TEMPLATES.4\\' | translate}}\\n{{\\'REPORT.SETTINGS.TEMPLATES.5\\' | translate}}
\\n{{\\'REPORT.SETTINGS.TEMPLATES.1\\' | translate}}\\n{{\\'REPORT.SETTINGS.TEMPLATES.2\\' | translate}}\\n{{\\'REPORT.SETTINGS.TEMPLATES.3\\' | translate}}\\n{{\\'REPORT.SETTINGS.TEMPLATES.4\\' | translate}}\\n{{\\'REPORT.SETTINGS.TEMPLATES.5\\' | translate}}
\\n{{ vm.type==1?\\'SHARED.ADD\\':\\'SHARED.UPDATE\\' | translate }}
\");\n$templateCache.put(\"app/main/apps/reports/views/dashboard/dashboard.template1.html\",\"
1\\\">\\nDashboard 1\\nDashboard 2Dashboard 3Dashboard 4\\nDashboard 5
0 && vm.rootfacet\\\">{{facet.title}} {{vm.getFilteredFacetTitle(facet.title)}}
\\n
0 && vm.rootfacet\\\">
\\n
\\n\\n{{vm.getFacetValueAlias(vm.rootfacet.title,facet.value)}}\\n{{vm.getFacetValueAlias(vm.rootfacet.title,facet.value)}}
{{facet.count}}
0 && vm.isFlatModeActive\\\" layout=\\\"row\\\" flex=\\\"8\\\" class=\\\"pl-10 pr-15 pt-5\\\">\\n{{ \\'REPORT.SIMILARITY_MODE\\' | translate }}
\\n
\\n
\\n: {{vm.data.count}}
\\n
0 || vm.patternFilters.chips.length > 0\\\" \\nstyle=\\\"padding:0px 0px;min-height:32px\\\">
{{\\'REPORT.USERS\\' | translate}}
\\n{{vm.getFilteredFacetTitle(chip[0].titleKey)}}
\\n
{{vm.getFacetValueAlias(chip[0].titleKey,c.value)}}
{{vm.getCategoryChipAlias(c)}}
\\n
{{item.name}} |\\n
\\n{{item.value}}
\\n
\\n\\n
0 && vm.data.count == 0 && !vm.searching && !vm.noTrainedModule\\\" \\nstyle=\\\"text-align: center\\\">

\\n

0\\\">
0 && !vm.searching\\\">
{{vm.charts.reportAttributeScore.settings.name}}
\\n\\n\\n
0\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" flex=\\\"100\\\" \\nstyle=\\\"height:400px; justify-content: center; align-items: center; display: flex\\\">
{{ column.name }}
\\n\\n{{ vm.attributeFormulItem(row, column.key).value }}
\\n{{vm.charts.attributeBasedCategory.settings.name}}
\\n\\nPERCENTAGEQUANTITY
0\\\" \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\" flex=\\\"100\\\" \\nstyle=\\\"height:400px; justify-content: center; align-items: center; display: flex\\\">\\n=vm.charts.attributeBasedCategory.settings.limit && $index!=vm.charts.attributeBasedCategory.data.rows.length-1)\\\" \\nng-style=\\\"(row.key == \\'TOTAL\\') && {\\'background-color\\':\\'#ebebf7\\'} || {\\'font-size\\': \\'14\\'}\\\">\\n
\\n{{column.name != \\'TOTAL\\' ? column.name : (\\'REPORT.DASHBOARD_TEMPLATE_2.CONFIG.\\' + column.name | translate)}}
\\n{{vm.numberWithCommas(item.value)}}\\n {{\\\"(%\\\" + vm.padLeft(item.percent!=1?(item.percent * 100).toFixed(2):(item.percent * 100).toFixed(1), 5) + \\\")\\\"}}
1\\\" flex>\\n\\n
\\n
PERCENTAGE\\nQUANTITY\\n\\n
0\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" flex=\\\"100\\\" \\nstyle=\\\"height:400px; justify-content: center; align-items: center; display: flex\\\">\\n
\\n{{ \\'REPORT.DASHBOARD_TEMPLATE_2.CONFIG.\\' + column.name | translate }}
\\n{{vm.numberWithCommas(item.value)}}\\n {{\\\"(%\\\" + vm.padLeft(item.percent!=1?(item.percent * 100).toFixed(2):(item.percent * 100).toFixed(1), 5) + \\\")\\\"}}
0\\\">
{{dataset.key}}
\\n
\\n
\\n
= vm.keywordDocumentLimit\\\" style=\\\"cursor: pointer\\\">
\\n
\\n

+

\\n{{ stopWord }}\\n-
\\n

\\n

+

\\n{{ keyword.text }}\\n+

\\n{{ stopLabel }}-
\\n\\n
0\\\" \\nlayout=\\\"row\\\" flex=\\\"100\\\" flex-gt-md=\\\"50\\\">
= 100\\\" style=\\\"cursor: pointer\\\">
\\n
\\n
\\ndocPercent\\ndocCountcatCountdocCatPercent\\n\\n
\\n
\\n\\n
\\n
0\\\">

 : 

{{vm.getFilteredFacetTitle(vm.matrixXfield.fieldTitle)}}

\\n  -  

 : 

{{vm.getFilteredFacetTitle(vm.matrixYfield.fieldTitle)}}

0\\\" refresh=\\\"vm.matrixDataRefresh\\\">

\\nNone{{vm.getFilteredFacetTitle(item.fieldTitle)}}\\n\\n\\n{{vm.getFacetValueAlias(vm.matrixXfield.fieldTitle,item.value)}}
\\n{{vm.getFacetValueAlias(vm.matrixXfield.fieldTitle,item.value)}}

\\nNone{{vm.getFilteredFacetTitle(item.fieldTitle)}}\\n\\n\\n{{vm.getFacetValueAlias(vm.matrixYfield.fieldTitle,item.value)}}
\\n{{vm.getFacetValueAlias(vm.matrixYfield.fieldTitle,item.value)}}
\\n
\\n\\n\\n\\n\\n\\n\\n
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/dashboard/dashboard.template2.html\",\"
1\\\">\\nDashboard 1\\nDashboard 2Dashboard 3Dashboard 4\\nDashboard 5
{{item.count}}
\\n
\\n
{{item.count}}
\\n
\\n
{{item.count}}
\\n
{{ \\'REPORT.COMPARATION_DATE_PERIOD\\' | translate }}
0 && vm.isFlatModeActive\\\" layout=\\\"row\\\" flex=\\\"8\\\" class=\\\"pl-10 pr-10 pt-8\\\">\\n{{ \\'REPORT.SIMILARITY_MODE\\' | translate }}
\\n
\\n
\\n
\\n
\\n{{item}}
\\n\\n: {{vm.data.count}}
\\n
0 || vm.patternFilters.chips.length > 0\\\" \\nstyle=\\\"padding:0px 0px;min-height:32px;border-bottom: 1px solid #E8E9EB\\\">
\\n{{\\'REPORT.USERS\\' | translate}}
{{vm.getFilteredFacetTitle(chip[0].titleKey)}}
\\n
{{vm.getFacetValueAlias(chip[0].titleKey,c.value)}}
{{vm.getCategoryChipAlias(c)}}
\\n
{{item.name}} |\\n
\\n{{item.value}}
\\n
\\n\\n
0 && vm.data.count == 0 && !vm.searching && !vm.noTrainedModule\\\" \\nstyle=\\\"text-align: center\\\">

\\n

0\\\">
0\\\">

0\\\">
\\n
0\\\">
1\\\" flex>\\n
0\\\">
\\n
\\nBildirim Değişimleri

\\n{{vm.charts.notifications.data.totalAfterCount-vm.charts.notifications.data.totalBeforeCount}}
\\n

\\n% {{vm.charts.notifications.data.positiveAfterPercent - vm.charts.notifications.data.positiveBeforePercent | number:2}}\\n
\\n
\\n
\\n% {{vm.charts.notifications.data.negativeAfterPercent - vm.charts.notifications.data.negativeBeforePercent | number:2}}\\n

\\n{{vm.charts.notifications.data.afterCategoryDocumentRate - vm.charts.notifications.data.beforeCategoryDocumentRate | number:2}}\\n

\\n{{vm.charts.notifications.data.afterEmptyFullDocumentRate - vm.charts.notifications.data.beforeEmptyFullDocumentRate | number:2}}\\n
\\n
\\n
\\n
1\\\" \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\" layout-wrap flex>\\n\\n
0\\\" data=\\\"vm.charts.categorySentimentVariance.data\\\" \\nrefresh=\\\"vm.categoryVarianceDataRefresh\\\" barclick=\\\"vm.clickHorizontalSentimentCategoryChart(data_)\\\">\\n
1\\\" \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\" layout-wrap flex>\\n
\\n
\\n
\\n 0\\\" \\ndata=\\\"vm.charts.categorySentimentVariance.data\\\" visibility=\\\"vm.charts.categorySentimentVariance.visibility\\\" \\nrefresh=\\\"vm.categorySentimentVarianceDataRefresh\\\" barclick=\\\"vm.clickHorizontalSentimentCategoryChart(data_)\\\">\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n\\n\\n
{{\\'SHARED.BEFORE\\' | translate}}{{\\'SHARED.NOW\\' | translate}}
{{category.name}}{{category.parentCategoryName}} -> {{category.name}}\\n
\\n% {{category.negativeChange}} {{category.negativeChangeRatio}}\\n
% {{-1 * category.negativeNowCount}} {{-1 * category.negativeNowCountRatio}}\\n
{{\\'SHARED.BEFORE\\' | translate}} : \\n% \\n{{category.negativeBeforeCount * -1}} ({{category.negativeBeforeTotal * -1}}) \\n{{category.negativeBeforeCountRatio * -1}} ({{category.negativeBeforeTotal * -1}})
\\n{{\\'SHARED.NOW\\' | translate}} : % \\n{{category.negativeNowCount * -1}} ({{category.negativeNowTotal * -1}}) \\n{{category.negativeNowCountRatio * -1}} ({{category.negativeNowTotal * -1}})
\\n
% {{category.positiveNowCount}} {{category.positiveNowCountRatio}}
{{\\'SHARED.BEFORE\\' | translate}} : \\n% \\n{{category.positiveBeforeCount}} ({{category.positiveBeforeTotal}}) \\n{{category.positiveBeforeCountRatio}} ({{category.positiveBeforeTotal}})
{{\\'SHARED.NOW\\' | translate}} : % \\n{{category.positiveNowCount}} ({{category.positiveNowTotal}}) \\n{{category.positiveNowCountRatio}} ({{category.positiveNowTotal}})
\\n
\\n\\n% {{category.positiveChange}} {{category.positiveChangeRatio}}% {{category.beforeCategoryCount.toFixed(1)}} {{category.beforeCount.toFixed(1)}}( category.nowCategoryCount\\\">- + {{category.categoryChange}} {{category.change}} )% {{category.nowCategoryCount.toFixed(1)}} {{category.nowCount.toFixed(1)}}\\n{{\\'REPORT.DASHBOARD_TEMPLATE_2.CATEGORY_DATA_COMPARE.THRESHOLD_CATEGORY\\' | translate}}\\n\\n{{\\'REPORT.DASHBOARD_TEMPLATE_2.CATEGORY_DATA_COMPARE.VISIBLE_CATEGORY\\' | translate}}\\n
\\n
{{\\'SENTIMENT.NEGATIVE\\' | translate}}
{{\\'SENTIMENT.POSITIVE\\' | translate}}\\n
\\n
%{{item}}\\n
\\n{{category.name}}+
\\n
\\n{{visibleCategory.name}}
-\\n
\\n{{category.name}}+\\n
\\n
\\n{{nonVisibleCategory.name}}
-
\\n
\\ndocPercent\\ndocCountcatCountdocCatPercent\\n\\n
\\n
\\n
\\n
\\n
= vm.keywordDocumentLimit\\\" \\nstyle=\\\"cursor: pointer\\\">
\\n

+

\\n{{ stopWord }}-

+

{{ keyword.text }}\\n+

\\n{{ stopLabel }}\\n-
\\n
\\n
\\n
\\n{{vm.afterStartDate|date:\\'dd/MM/yyyy\\'}} - {{vm.afterEndDate|date:\\'dd/MM/yyyy\\'}}
\\n
0\\\">
\\n\\n
\\n
\\n
0\\\">

 : 

{{vm.getFilteredFacetTitle(vm.matrixXfield.fieldTitle)}}

\\n  -  

 : 

{{vm.getFilteredFacetTitle(vm.matrixYfield.fieldTitle)}}

0\\\" refresh=\\\"vm.matrixDataRefresh\\\">

\\nNone{{vm.getFilteredFacetTitle(item.fieldTitle)}}\\n\\n\\n{{vm.getFacetValueAlias(vm.matrixXfield.fieldTitle,item.value)}}
\\n{{vm.getFacetValueAlias(vm.matrixXfield.fieldTitle,item.value)}}

\\nNone{{vm.getFilteredFacetTitle(item.fieldTitle)}}\\n\\n\\n{{vm.getFacetValueAlias(vm.matrixYfield.fieldTitle,item.value)}}
\\n{{vm.getFacetValueAlias(vm.matrixYfield.fieldTitle,item.value)}}
\\n
\\n\\n\\n\\n\\n\\n\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/dashboard/dashboard.template3.html\",\"
1\\\">\\nDashboard 1\\nDashboard 2Dashboard 3Dashboard 4\\nDashboard 5
0 && vm.isFlatModeActive\\\" \\nlayout=\\\"row\\\" flex=\\\"8\\\" class=\\\"pl-10 pr-15 pt-5\\\">{{ \\'REPORT.SIMILARITY_MODE\\' | translate }}
\\n
\\n
: {{vm.data.count}}
0 || vm.patternFilters.chips.length > 0\\\" style=\\\"padding:0px 0px;min-height:32px\\\">
\\n{{\\'REPORT.USERS\\' | translate}}
{{vm.getFilteredFacetTitle(chip[0].titleKey)}}
\\n
{{vm.getFacetValueAlias(chip[0].titleKey,c.value)}}
{{vm.getCategoryChipAlias(c)}}
\\n
{{item.name}} |\\n
\\n{{item.value}}
\\n
\\n\\n
0 && vm.data.count == 0 && !vm.searching && !vm.noTrainedModule\\\" \\nstyle=\\\"text-align: center\\\">

\\n

0\\\">
0\\\">

0 && !vm.searching\\\">\\n
\\n
\\n
0 && vm.tableColumns.length > 0)\\\" layout=\\\"row\\\" \\nflex=\\\"100\\\" style=\\\"max-height:500px; justify-content: center; display: flex\\\">
\\n
\\n\\n
\\n{{vm.tableAfterValues[column.title][row.value].value}}\\n
{{::vm.tableTotalAfterValues[value][column.title].value}}
\\n{{::vm.tableTotalAfterValues[\\'allData\\'][column.title].value}}
\\n\\n\\n
\\n\\n
\\n\\n
{{ ::vm.getFilteredFacetTitle(column.title) }} {{ ::vm.getFacetValueAlias(vm.formulaTable.fieldX, column.title) }}\\n{{ ::vm.getFilteredFacetTitle(column.title) }} {{ ::vm.getFacetValueAlias(vm.formulaTable.fieldX, column.title) }}\\n
{{::vm.tableBeforeValues[column.title][row.value].value}}
\\n{{::vm.tableTotalBeforeValues[value][column.title].value}}
{{::vm.tableTotalBeforeValues[\\'allData\\'][column.title].value}}
\\n
{{vm.getFieldHierarchyFieldTitle(vm.formulaTable.fieldX)}} : {{vm.filteredTableColumn.value}} :
\\n{{ vm.getFilteredFacetTitle(field.title) }} \\n{{ vm.getFacetValueAlias(vm.formulaTable.fieldX, field.title) }}\\n
0 && vm.charts.categoryTimeline.insufficientTimelineData\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" style=\\\"height:100%\\\">
0 && !vm.charts.categoryTimeline.insufficientTimelineData\\\" flex-gt-xs=\\\"100\\\">
0\\\" id=\\\"standartnormalcurve\\\" \\nchartid=\\\"standartnormalcurve\\\" data=\\\"vm.standartNormalCurveData\\\">
\\n
\\n
1\\\" flex>\\n\\n
\\n
PERCENTAGE\\nQUANTITY\\n\\n
0\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" flex=\\\"100\\\" \\nstyle=\\\"height:400px; justify-content: center; align-items: center; display: flex\\\">\\n
\\n{{ \\'REPORT.DASHBOARD_TEMPLATE_2.CONFIG.\\' + column.name | translate }}
\\n{{vm.numberWithCommas(item.value)}}\\n {{\\\"(%\\\" + vm.padLeft(item.percent!=1?(item.percent * 100).toFixed(2):(item.percent * 100).toFixed(1), 5) + \\\")\\\"}}
\\n
\\n
\\n
\\n
= vm.keywordDocumentLimit\\\" \\nstyle=\\\"cursor: pointer\\\">
\\n

+

\\n{{ stopWord }}-

+

{{ keyword.text }}\\n+

\\n{{ stopLabel }}\\n-
\\n
\\n\\n
PositiveNegativeNeutralInsensitive\\n
\\n
\\n
\\n\\n\\n\\n\\n\\n
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/dashboard/dashboard.template4.html\",\"
1\\\">\\nDashboard 1\\nDashboard 2Dashboard 3Dashboard 4\\nDashboard 5
0 && vm.isFlatModeActive\\\" \\nlayout=\\\"row\\\" flex=\\\"8\\\" class=\\\"pl-10 pr-15 pt-5\\\">{{ \\'REPORT.SIMILARITY_MODE\\' | translate }}
\\n
\\n
\\n: {{vm.data.count}}
\\n
0 || vm.patternFilters.chips.length > 0\\\" \\nstyle=\\\"padding:0px 0px;min-height:32px\\\">
{{\\'REPORT.USERS\\' | translate}}
\\n{{vm.getFilteredFacetTitle(chip[0].titleKey)}}
\\n
{{vm.getFacetValueAlias(chip[0].titleKey,c.value)}}
{{vm.getCategoryChipAlias(c)}}
\\n
{{item.name}} |\\n
\\n{{item.value}}
\\n
\\n\\n
0 && vm.data.count == 0 && !vm.searching && !vm.noTrainedModule\\\" \\nstyle=\\\"text-align: center\\\">

\\n

0\\\">
0 && !vm.searching\\\">
\\n\\n\\n\\n\\n\\n
\\n\\n
\\n\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n+
{{vm.getCatName(cat.id)}}
\\n
-\\n
\\n
\\n
\\n\\n\\n
\\n
\\n
\\n\\n
\\n
\\n\\n
\\n
\\n\\n\\n\\n\\n\\n
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/dashboard/dashboard.template5.html\",\"
1\\\">\\nDashboard 1\\nDashboard 2Dashboard 3Dashboard 4\\nDashboard 5
-
\\n
\\n
\\n: {{vm.data.count}}
\\n
0 || vm.patternFilters.chips.length > 0\\\" \\nstyle=\\\"padding:0px 0px;min-height:32px; background-color:white\\\">
{{\\'REPORT.USERS\\' | translate}}
\\n{{vm.getFilteredFacetTitle(chip[0].titleKey)}}
\\n
{{vm.getFacetValueAlias(chip[0].titleKey,c.value)}}
{{vm.getCategoryChipAlias(c)}}
\\n
{{item.name}} |\\n
\\n{{item.value}}
\\n
\\n\\n

0 && vm.data.count == 0 && !vm.searching && !vm.noTrainedModule\\\" \\nstyle=\\\"text-align: center\\\">

\\n

0\\\">
\\n\\n
\\n\\n
\\n
\\n{{ \\'REPORT.DASHBOARD_TEMPLATE_4.SUCCESS_RATE_CHART.SCORES\\' | translate }}\\n{{ \\'REPORT.DASHBOARD_TEMPLATE_4.SUCCESS_RATE_CHART.NUMBER_OF_CATEGORIES\\' | translate }}{{ \\'REPORT.DASHBOARD_TEMPLATE_4.SUCCESS_RATE_CHART.WEIGHTED_SCORES\\' | translate }}\\n{{item.name}}{{item}}\\n{{item + 1}}\\n
\\n
0\\\" \\nstyle=\\\"position:relative; height:400px; margin:60px\\\" ms-scroll>\\n\\n\\n
\\n{{vm.getCategoryChangeOperationValue(cat, vm.categoryOperationMode==1 ? \\\"remained\\\" : \\\"precision\\\",item)}}\\n\\n{{vm.getCategoryChangeOperationValue(cat,vm.categoryOperationMode==1 ? \\\"added\\\" : \\\"recall\\\",item)}}\\n{{vm.getCategoryChangeOperationValue(cat, vm.categoryOperationMode==1 ? \\\"removed\\\" : \\\"f1\\\",item)}}
{{\\'REPORT.DASHBOARD_TEMPLATE_2.CONFIG.TOTAL\\'|translate}}\\n{{vm.totalResult[\\\"precision\\\"][item].toFixed(2)}}\\n{{vm.totalResult[\\\"recall\\\"][item].toFixed(2)}}\\n{{vm.totalResult[\\\"f1\\\"][item].toFixed(2)}}
\\n\\n
\\n
\\n{{vm.getCategoryChangeOperationScoreValue(cat, item)}}
{{\\'REPORT.DASHBOARD_TEMPLATE_2.CONFIG.TOTAL\\'|translate}}\\n{{vm.totalResult[item].toFixed(2)}}
\\n{{item.module.name}}{{item}}{{item}}
{{ \\'SHARED.SAVE\\' | translate }}
\\n
\\n\\n\\n\\n\\n\\n
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/data/bookmarksidenav.html\",\"

\\n
{{ \\'REPORT.BOOKMARK.EDITABLE_MODE\\' | translate }}
\\n

{{\\'REPORT.BOOKMARK.PERSONAL\\' | translate }}

{{ \\'REPORT.BOOKMARK.NOT_FOUND\\' | translate }}

\\n

{{\\'REPORT.BOOKMARK.GENERAL\\' | translate }}

\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/data/data.html\",\"
\");\n$templateCache.put(\"app/main/apps/reports/views/data/dataoverview.html\",\"
\\n{{ \\'REPORT.ANNOTATIONS\\' | translate }}\\n\\n{{ \\'REPORT.NOT_ANNOTATED\\' | translate }}{{ \\'REPORT.ANNOTATED\\' | translate }}{{ \\'REPORT.PENDING\\' | translate }}\\n{{ \\'REPORT.DRAFTS\\' | translate }}\\n{{ \\'REPORT.TRASHED\\' | translate }}
\\n\\n{{ \\'REPORT.ASSIGNATIONS\\' | translate }}\\n\\n{{ \\'REPORT.ALL\\' | translate }}\\n\\n\\n{{ \\'REPORT.MY_ASSIGNATIONS\\' | translate }}{{ \\'REPORT.ASSIGNED_TO_ME\\' | translate }}\\n\\n
\\n\\n{{ \\'REPORT.FEEDBACK\\' | translate }}
\\n{{ \\'REPORT.SIMILARITY_MODE\\' | translate }}
\\n
\\n
{{\\'REPORT.CONTENT_DATE\\' | translate}}\\n
{{field.fieldTitle}}
\\n
\\n\\n
0\\\">\\n{{((vm.pagination.current-1) * 10) + 1}} - {{(vm.pagination.current * 10 > vm.pagination.count ? vm.pagination.count : vm.pagination.current * 10)}} {{ \\'SHARED.OF\\' | translate }} {{vm.pagination.count}}\\n\\n{{ \\'SHARED.PAGE\\' | translate }} / {{vm.pagination.totalNumber}}\\nvm.pagination.last\\\">\\n
0 || vm.patternFilters.chips.length > 0 || vm.extraFilters || vm.parameters.periods.length>0\\\" \\nstyle=\\\"padding:0px 0px;min-height:32px;border-bottom: 1px solid #E8E9EB\\\">
\\n{{\\'REPORT.USERS\\' | translate}}
{{vm.getFilteredFacetTitle(chip[0].titleKey)}}
\\n
{{vm.getFacetValueAlias(chip[0].titleKey,c.value)}}
{{vm.getCategoryChipAlias(c)}}
\\n
{{item.name}} |\\n
\\n{{item.value}}
\\n
0\\\" style=\\\"margin-left: 8px\\\">Period |
0\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nstyle=\\\"background-color:#ebebeb; border-radius:2px;margin-left:5px;max-height:20px\\\">
{{item}}
\\n
\\n
0 || vm.patternFilters.chips.length > 0\\\" class=\\\"ml-20\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\">\\n\\n\\n
{{field.fieldTitle}}\\n
\\n
-\\n\\n
\\n\\n

0\\\" ng-class=\\\"{\\'sortable\\': vm.taskOrder === \\'\\'}\\\">
\\n {{ \\'REPORT.EDIT_DOCUMENT.UNDO_REMOVE\\' | translate }}{{ \\'REPORT.EDIT_DOCUMENT.TITLE\\' | translate }}{{ vm.translations.SELECT_ASSIGN_USER_PLACEHOLDER }} 0 && item.assignments[0].isActive == 1) && vm.feedbackMode\\\" \\nng-if-permission=\\\"REPORT/FEEDBACK/EXECUTE\\\" class=\\\"md-fab\\\" ng-click=\\\"vm.unAssignDocument(item)\\\" \\nstyle=\\\"width:35px;height:35px;line-height: 45px;background-color:#ff7f0e\\\" aria-label=\\\"UnAssign\\\" translate \\ntranslate-attr-aria-label=\\\"REPORT.EDIT_DOCUMENT.UNASSIGN_DOCUMENT\\\">{{ vm.translations.UNASSIGN_DOCUMENT }}{{ \\'REPORT.EDIT_DOCUMENT.USER_TAGS\\' | translate }}\\n{{ \\'REPORT.HISTORY.HISTORY\\' | translate }}\\n
0\\\">\\n{{ \\'REPORT.EDIT_DOCUMENT.SHOW_SIMILAR\\' | translate }} \\n{{ \\'REPORT.EDIT_DOCUMENT.HIDE_SIMILAR\\' | translate }}{{item.children.length}}\\n
0\\\" class=\\\"notes scrollable\\\" \\nstyle=\\\"min-height:50px; margin-bottom: 10px;font-size: 15px\\\">
\\n{{\\'SHARED.NEW\\' | translate}} {{vm.documentNickname}}
\\n{{\\'SHARED.NEW\\' | translate}} {{vm.documentNickname}}
\\n
vm.getContentLimit(content.text,147) ? \\'...\\' : \\'\\'))\\\" \\nstyle=\\\"font-size:12px;white-space:pre-wrap\\\">
\\n{{content.text}}
{{content.title}} :
{{content.title}} :
\\n\\n
0\\\" layout-wrap>\\n
\\n{{vm.getCategoryTitle(tag)}}
\\n%{{vm.calculatePercentageForCategorySentimentTooltip(item,tag.id,field)}} \\n- {{vm.categoryTextTooltip}}
\\n
\\n
%{{vm.calculatePercentageForSentimentTooltip(item,field)}} - {{vm.categoryTextTooltip}}
\\n\\n
\\n
%{{vm.calculatePercentageForTotalSentiment(item)}}
\\n
\\n
\\n
Id : {{item.originalId}}
{{vm.getFilteredFacetTitle(tag.title)}} : {{tag.value}}
\\n
{{vm.getFilteredFacetTitle(tag.title)}}\\n : {{vm.getFacetValueAlias(tag.title,tag.value)}}
\\n{{\\'REPORT.EDIT_DOCUMENT.NOTE\\' | translate}} : {{note.text}}
0 && vm.reportSettings.commonSettings.showContentLength\\\" class=\\\"tags\\\" \\nstyle=\\\"display:inline-block!important\\\">
\\n{{\\'SHARED.ORDER.CONTENT_LENGTH\\' | translate}} : {{item.content.length}}
0\\\" class=\\\"tags\\\" \\nng-click=\\\"vm.goToParentDocument(item); $event.stopPropagation();\\\" style=\\\"display:inline-block!important\\\">
\\n{{\\'REPORT.EDIT_DOCUMENT.GO_TO_PARENT_DOCUMENT\\' | translate}}
\\n: {{item.date | date:\\'dd.MM.yyyy HH:mm\\':\\'+0300\\'}}
\\n
\\n : {{item.createDate| date:\\'dd.MM.yyyy HH:mm\\':\\'+0300\\'}}
{{vm.getFilteredFacetTitle(tag.title)}} : {{tag.value| date:\\'dd.MM.yyyy HH:mm\\':\\'+0300\\'}}
\\n
\\n
\\n\\n{{vm.getCategoryTitle(category)}}
\\n
0\\\">
\\n\\n{{vm.getCategoryTitle(category)}}
\\n
0 && item.sub1Categories.length > 0\\\">
\\n\\n\\n{{vm.getCategoryTitle(category)}}
\\n
\\n
\\n+
0\\\" \\nstyle=\\\"color:white; border:0px\\\" class=\\\"icon icon-swap-horizontal s20\\\">
0) || item.isIgnored\\\">\\n

\\n{{ \\'REPORT.EDIT_DOCUMENT.DRAFT_BY\\' | translate }} : {{item.draftedByName}}

{{ \\'REPORT.EDIT_DOCUMENT.DRAFT_DATE\\' | translate }} : \\n{{item.draftedDate| date:\\'dd.MM.yyyy HH:mm\\':\\'+0300\\'}}

\\n{{ \\'REPORT.EDIT_DOCUMENT.READY_BY\\' | translate }} : {{item.readyByName}}

{{ \\'REPORT.EDIT_DOCUMENT.READY_DATE\\' | translate }} : \\n{{item.readyDate| date:\\'dd.MM.yyyy HH:mm\\':\\'+0300\\'}}

0 && item.assignments[0].isActive == 1\\\">\\n{{ \\'REPORT.EDIT_DOCUMENT.ASSIGN_DATE\\' | translate }} : \\n{{item.assignments[0].createDate| date:\\'dd.MM.yyyy HH:mm\\':\\'+0300\\'}}

0 && item.assignments[0].isActive == 1\\\">\\n{{ \\'REPORT.EDIT_DOCUMENT.ASSIGN_BY\\' | translate }} : {{item.assignments[0].assignedByName}}

0 && item.assignments[0].isActive == 1\\\">\\n{{ \\'REPORT.EDIT_DOCUMENT.ASSIGN_TO\\' | translate }} : {{item.assignments[0].assignedToName}}

{{ \\'REPORT.EDIT_DOCUMENT.TRASH_BY\\' | translate }} : {{item.ignoredByName}}\\n

{{ \\'REPORT.EDIT_DOCUMENT.TRASH_DATE\\' | translate }} : \\n{{item.ignoredDate| date:\\'dd.MM.yyyy HH:mm\\':\\'+0300\\'}}

{{item.draftedByName}}
0\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\">
0\\\" layout-wrap>
\\n{{vm.getCategoryTitle(tag)}}
0\\\"> \\n{{ \\'SHARED.AI\\' | translate }}
0\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\">
0\\\" layout-wrap>
\\n{{vm.getCategoryTitle(tag)}}
0\\\" class=\\\"notes scrollable\\\" \\nstyle=\\\"min-height:50px;margin-bottom: 10px;font-size: 15px\\\">
\\n{{\\'SHARED.NEW\\' | translate}} {{vm.documentNickname}}
vm.getContentLimit(content.text,147) ? \\'...\\' : \\'\\'))\\\" \\nstyle=\\\"font-size:12px;white-space:pre-wrap\\\">
\\n{{\\'SHARED.NEW\\' | translate}} {{vm.documentNickname}}{{content.title}} :
\\n{{\\'SHARED.NEW\\' | translate}} {{vm.documentNickname}}{{content.title}} :
\\n
\\n
Id\\n : {{child.originalId}}
{{tag.title}} : {{tag.value}}
\\n{{vm.getFilteredFacetTitle(tag.title)}} : {{vm.getFacetValueAlias(tag.title,tag.value)}}
0 && vm.reportSettings.commonSettings.showContentLength\\\" class=\\\"tags\\\" \\nstyle=\\\"display:inline-block!important\\\">
\\n{{\\'SHARED.ORDER.CONTENT_LENGTH\\' | translate}} : {{child.content.length}}
: {{child.createDate| date:\\'dd.MM.yyyy HH:mm\\':\\'+0300\\'}}\\n
\\n: {{child.date | date:\\'dd.MM.yyyy HH:mm\\':\\'+0300\\'}}
\\n{{vm.getFilteredFacetTitle(tag.title)}} : {{tag.value| date:\\'dd.MM.yyyy HH:mm\\':\\'+0300\\'}}
\\n
\\n\\n\\n\\n\\n\\n
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/data/exportprompt.html\",\"

\\n

\\n
\\n
\\n\\n
0 && vm.pivotable\\\">\\n\\n
\\n
\\n

{{ item.fieldTitle }}\\n
{{ \\'REPORT.EXPORT.EXPORT_REPORT_BUTTON\\' | translate }}\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/data/overview.html\",\"
\\n

{{facet.name}}
{{facet.name}}
{{facet.count}}\\n
\\n
\\n{{ \\'REPORT.ANNOTATIONS\\' | translate }}\\n\\n\\n{{ \\'REPORT.NOT_ANNOTATED\\' | translate }}{{ \\'REPORT.ANNOTATED\\' | translate }}\\n\\n{{ \\'REPORT.DRAFTS\\' | translate }}\\n\\n\\n{{ \\'REPORT.TRASHED\\' | translate }}\\n\\n
\\n{{ \\'REPORT.ASSIGNATIONS\\' | translate }}\\n\\n{{ \\'REPORT.ALL\\' | translate }}\\n\\n\\n{{ \\'REPORT.MY_ASSIGNATIONS\\' | translate }}{{ \\'REPORT.ASSIGNED_TO_ME\\' | translate }}\\n\\n
\\n{{ \\'REPORT.FEEDBACK\\' | translate }}
\\n{{field.fieldTitle}}
\\n
0 && vm.state == 2\\\">\\n{{vm.pagination.current==1?1:((vm.pagination.current-1)*10)}} - {{vm.pagination.current==1?10:(vm.pagination.current)*10}} of {{vm.pagination.count}}\\nvm.pagination.last\\\">\\n\\n
0\\\">
{{facet.name}}
\\n\\n\\n
\\n
{{ \\'REPORT.EDIT_DOCUMENT.CLOSE\\' | translate }}{{ \\'REPORT.EDIT_DOCUMENT.TITLE\\' | translate }}{{ \\'REPORT.EDIT_DOCUMENT.SELECT_ASSIGN_USER_PLACEHOLDER\\' | translate }}\\n\\n\\n{{ \\'REPORT.EDIT_DOCUMENT.NOTE\\' | translate }}\\n
\\n
0\\\" \\nng-repeat=\\\"contentField in item.contentFields\\\">{{contentField.title}} :
{{item.content}}
\\nKategorileri Göster\\nKategorileri Gizle
\\n{{tag.name}}
{{vm.categoryTextTooltip}}\\n
\\n
{{vm.categoryTextTooltip}}
\\n{{tag.name}}
\\n\\n
{{tag.name}}
Etiketleri GösterEtiketleri Gizle
\\n
{{tag.title}} : {{tag.name}}
{{tag.title}} : {{tag.name}}
{{tag.title}}\\n : {{tag.name| date:\\'dd.MM.yyyy HH:mm\\':\\'+0300\\'}}
\\n : {{item.createDate| date:\\'dd.MM.yyyy HH:mm\\':\\'+0300\\'}}
\\n
\\n{{tag.name | date:\\'dd.MM.yyyy HH:mm\\':\\'+0300\\'}}
{{item.updateDate | date:\\'dd.MM.yyyy HH:mm\\':\\'+0300\\'}}
{{item.updateBy}}
\\n
0\\\">
Toplam Bildirim: {{vm.datasetCount}}\\n
\\n{{data[0].label}}
0\\\">
{{dataset.key}}
\\n
= 100\\\">
Duygu Matrisi
\\n\\n
{{column.name}}
\\n
\\n\\n\\n\\n

Yer İşaretleri

\\n
\\n{{ \\'REPORT.BOOKMARK.EDITABLE_MODE\\' | translate }}
\\n

{{ \\'REPORT.BOOKMARK.NOT_FOUND\\' | translate }}

\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/data/reevaluatereport.html\",\"

\\n\\n

\\n{{module.name}} ->{{item.name}}

{{ \\'REPORT.REPLICATE_REPORT_BUTTON\\' | translate }}\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/data/sidenav.html\",\"
\\n
0\\\">0 && item.type!=310 && item.type!=311 && item.type!=312 && item.type!=313 && ((!vm.feedbackMode && item.title != \\'updated_by_s\\') || vm.feedbackMode) && (vm.dataOrganization!=1 || (item.type == 300 || item.type == 301 || item.type == 302 || item.type == 303 || item.type == 700 || item.type == 800 || item.type == 200))\\\">\\n\\n {{::item.title}}\\n {{vm.getAttributeAlias(item)}} {{::item.title}} {{vm.getAttributeAlias(item)}}\\n\\n
\\n
\\n \\n{{::childItem.title}} \\n{{vm.getFilteredFacetTitle(childItem.title)}} \\n \\n{{vm.getFacetValueAlias(childItem.title,child.value)}} {{vm.getCategoryAlias(child)}}\\n{{vm.getFacetValueAlias(childItem.title,child.value)}}\\n{{vm.getCategoryAlias(child)}}{{::child.count}} item.size\\\"> Daha Fazla\\n
\\n
\\n{{vm.getFacetValueAlias(item.title,child.value)}} {{vm.getCategoryAlias(child)}}\\n{{vm.getFacetValueAlias(item.title,child.value)}}\\n{{vm.getCategoryAlias(child)}} {{::child.count}} item.size\\\"> Daha Fazla
\\n
\\nDaha Fazla
\\n\");\n$templateCache.put(\"app/main/apps/reports/views/data/source.html\",\"
\\n

\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/data/upload-edit.html\",\"


{{\\'SHARED.LOADING\\'|translate}}

\\n
\\n{{field.fieldHeader}}->{{field.mappedField.title}}
{{field.fieldHeader}}




\\n
{{item.mappedValue}} ({{item.count}})
{{field.prefix}}{{item.value}}{{field.suffix}} ({{item.count}})
\\n
\\n
{{field.fieldHeader}}
\\n
\\n
\\n
{{field.fieldHeader}}
\\n{{item.title}}
\\n\\n\\n
\\n
\\n
\\n
\\n
\\n
\\n{{field.prefix}}{{item.value}}{{field.suffix}}
({{item.count}}) {{field.prefix}}\\n{{item.value}}{{field.suffix}}
\\n{{val.value}}
\\n
\\n
\\n
\\n
\\n{{\\'SHARED.FIELD_NAME\\'|translate}}: {{literalField.fieldHeader}}
\\n{{\\'SHARED.FIELD_TYPE\\'|translate}}: {{vm.findNameOfLiteralFieldType(literalField.fieldType)}}
{{\\'SHARED.VALUE\\'|translate}}: {{literalField.literalValue}}
\\n{{\\'SHARED.VALUE\\'|translate}}: {{literalField.literalValue.getDate()}}-{{literalField.literalValue.getMonth()+1}}-{{literalField.literalValue.getFullYear()}}\\n
\\n
\\n
\\n
{{\\'SHARED.FIELD_TYPE\\'|translate}}:
{{val.fieldName}}
{{\\'SHARED.FIELD_NAME\\'|translate}}:
\\n{{item.title}}
\\n\\n
\\n
\\n\\n
\\n
\\n
\\n
\\n
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/data/upload-feedback-confirm-dialog.html\",\"
\\n

\\nBelirtilen geri bildirimleri yüklemek istediğinize emin misiniz?

\\n
{{vm.feed}}
\\n{{ \\'REPORT.APPROVED_FEEDBACK.MODULE_NAME\\' | translate }}\\n{{ \\'REPORT.APPROVED_FEEDBACK.FEEDBACK_COUNT\\' | translate }}
{{feedback.moduleName}}{{feedback.count}}
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/data/upload.html\",\"
\\n

\\n
\\n
\\n
{{column.title?column.title:column.name}}
\\n\\n{{item.name}}\\n
\\n
{{ \\'SHARED.NUMERIC\\' | translate}}
{{ \\'SHARED.MULTI_VALUED\\' | translate}}
\\n
\\n
{{item}}\\n
\\n
\\n
\\n{{item}}\\n
\\n
\\n
{{item[column.name]}}

{{trace.message}}
\\n{{trace.exception}}
\");\n$templateCache.put(\"app/main/apps/reports/views/data/uploadfeedbackprompt.html\",\"

\\n\\n
\\n{{ module.name }}
{{ item.name }}\\n\\n{{ item.name }}{{ item }}\\n{{ item.name }}\\n
\\n
\\n{{vm.getModuleName(period.moduleId)}}
->
{{vm.getPeriodType(period.type)}}
{{vm.getRepeatWeekday(period.repeatWeekDay)}}
{{period.repeatDay}}
\\n{{vm.getRepeatTime(period.repeatTime)}}
-\\n
Select All{{module.name}}\\n
\\n
\\n\\n
\\n

{{vm.errorMessage}}

\\n\\n{{ \\'SHARED.CANCEL\\' | translate }}\\n{{ \\'REPORT.UPLOAD_FEEDBACK\\' | translate }}
\");\n$templateCache.put(\"app/main/apps/reports/views/data/web-content-document-dialog.html\",\"

\\n\\n
\\n\\n{{vm.getCategoryTitle(category)}}
\\n
0\\\">\\n\\n{{vm.getCategoryTitle(category)}}
0\\\" style=\\\"margin-top: 15px; margin-left: -15px\\\">
0 && vm.document.sub1Categories.length > 0\\\">\\n\\n{{vm.getCategoryTitle(category)}}
0 && vm.document.sub1Categories.length > 0\\\" \\nstyle=\\\"margin-top: 15px; margin-left: -15px\\\">
\\n
\\n
\\n+
0\\\" \\nstyle=\\\"color:white; border:0px\\\" class=\\\"icon icon-swap-horizontal s20\\\">
\\n{{vm.document.draftedByName}}
0\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\">
0\\\" layout-wrap>
\\n{{vm.getCategoryTitle(tag)}}
0\\\"> {{ \\'SHARED.AI\\' | translate }}
0\\\" layout-wrap>
\\n{{vm.getCategoryTitle(tag)}}
\\n\\n
\\n
\\n
\\n
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/data/websource.html\",\"
\\n
\\n
\\n{{vm.pagination.allWebsources.current + 1}}
\\n
\\n
{{item.name}}
\\n{{item.description}}
\\n\\n\\n
\\n
0\\\" \\nng-repeat=\\\"item in vm.added\\\">
\\n
{{item.name}}
\\n{{item.description}}
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/data-organization/data-organization.html\",\"
\\n
\\n
\\n
\\n: {{vm.data.count}}
0\\\" style=\\\"padding:0px 0px;min-height:32px\\\">
\\n{{\\'REPORT.USERS\\' | translate}} |
{{vm.getFilteredFacetTitle(chip[0].key)}}
{{c.value}}
{{vm.getFacetValueAlias(chip[0].titleKey,c.value)}}
{{c.value}}
\\n
\\n\\n
\\n\\n
\\n
\\n{{category.fieldTitle}}\\n
0 && !vm.loaders.fetchingCategoryValues\\\"> 0\\\" ng-value=\\\"categoryValue.name\\\" \\nclass=\\\"category-option\\\">
{{categoryValue.name}}
\\n{{categoryValue.count}}
\\n
0 && !vm.loaders.fetchingCategoryValues\\\">
\\n 0 && !vm.loaders.fetchingCategoryValues\\\">
\\n
0 && !vm.loaders.deletingCategoryValues\\\">
\\n
\\n{{tag.fieldTitle}}\\n
\\n
\\n
\\n
{{reportField.fieldTitle}} \\n ({{ reportField.fieldType==100?\\'SHARED.CLASSIFIER\\': reportField.fieldType==200?\\'SHARED.SENTIMENT_CLASSIFIER\\': reportField.fieldType==300 || reportField.fieldType==310?\\'SHARED.NOMINAL_ATTRIBUTE\\': reportField.fieldType==301 || reportField.fieldType==311?\\'SHARED.NUMERIC_NOMINAL_ATTRIBUTE\\': reportField.fieldType==302 || reportField.fieldType==312?\\'SHARED.MULTIVALUED_NOMINAL_ATTRIBUTE\\': reportField.fieldType==303 || reportField.fieldType==313?\\'SHARED.NUMERIC_MULTIVALUED_NOMINAL_ATTRIBUTE\\': reportField.fieldType==400?\\'SHARED.DATE\\': reportField.fieldType==500?\\'SHARED.ATTRIBUTE\\': reportField.fieldType==600?\\'SHARED.TITLE\\':\\'SHARED.UNCLEAR\\' | translate }})\\n
\\n
\\n
\\n
\\n
{{reportField.fieldTitle}}\\n
{{reportField.fieldTitle}}\\n
{{item.name}}
\\n{{cat.name}}
\\n{{item.name}}\\n
\\n
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/data-summary/data-summary.html\",\"
\\n
\\n
\\n{{ \\'REPORT.DATA_SUMMARY.FILE_UPLOAD_INFO\\' | translate }}
{{vm.pagination.current}}
\\n\\n
{{ \\'REPORT.DATA_SUMMARY.FILE_NAME\\' | translate }}\\n{{ \\'REPORT.DATA_SUMMARY.UPLOADER\\' | translate }}{{ \\'REPORT.DATA_SUMMARY.UPLOAD_DATE\\' | translate }}\\n{{ \\'REPORT.DATA_SUMMARY.DATA_COUNT\\' | translate }}{{ \\'REPORT.DATA_SUMMARY.UPLOAD_STATUS\\' | translate }}\\n\\n
{{::file.fileName}}{{::file.createdBy}}\\n{{::file.createDate| date:\\'dd.MM.yyyy HH:mm\\':\\'+0300\\'}}
{{ \\'REPORT.DATA_SUMMARY.UPLOADED\\' | translate }} : {{::file.uploadedRowCount}}

\\n{{ \\'REPORT.DATA_SUMMARY.USER_ERROR\\' | translate }} : {{::file.invalidRowCount}}0\\\" md-font-icon=\\\"icon-download\\\" class=\\\"icon-download\\\" \\nstyle=\\\"margin-left:10px;cursor:pointer;color: #039be5\\\" ng-click=\\\"vm.exportFileData(file.id,\\'invalid\\')\\\">\\n

\\n{{ \\'REPORT.DATA_SUMMARY.SYSTEM_ERROR\\' | translate }} : {{::file.uploadFailedRowCount}}0\\\" md-font-icon=\\\"icon-download\\\" class=\\\"icon-download\\\" \\nstyle=\\\"margin-left:10px;cursor:pointer;color: #039be5\\\" ng-click=\\\"vm.exportFileData(file.id,\\'error\\')\\\">\\n
-
\\n{{file.uploadStatus}}(%{{file.uploadPercentage}})
{{file.uploadStatus}}\\n
\\n
\\n{{ \\'REPORT.DATA_SUMMARY.WEBSOURCES.INFO\\' | translate }}
\\n{{vm.pagination.websource.current + 1}}
= vm.pagination.websource.last - 1\\\">\\n
\\n
{{ \\'REPORT.DATA_SUMMARY.WEBSOURCES.NAME\\' | translate }}\\n{{ \\'REPORT.DATA_SUMMARY.WEBSOURCES.DESCRIPTION\\' | translate }}\\n{{ \\'REPORT.DATA_SUMMARY.WEBSOURCES.CONNECTER\\' | translate }}\\n{{ \\'REPORT.DATA_SUMMARY.WEBSOURCES.CONNECT_DATE\\' | translate }}\\n{{ \\'REPORT.DATA_SUMMARY.WEBSOURCES.TYPE\\' | translate }}
{{::websource.name}}{{::websource.description}}-\\n-\\n
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/edit/SaveBookmarkPopup.html\",\"
\");\n$templateCache.put(\"app/main/apps/reports/views/edit/annotate.html\",\"

{{vm.selectedText}}

{{field.moduleName}}
\\n
{{tag.name}}
\\n 0 && field.editing && $index == field.tagList.length-1\\\" \\nstyle=\\\"min-width:100%\\\" md-require-match md-no-cache=\\\"true\\\" \\nmd-floating-label=\\\"{{ \\'REPORT.EDIT_DOCUMENT.SELECT_CATEGORY_PLACEHOLDER\\' | translate }}\\\" md-autoselect=\\\"true\\\" \\nmd-clear-button=\\\"true\\\" md-dropdown-items=\\\"10\\\" md-selected-item=\\\"tag.updateCategory\\\" \\nmd-search-text=\\\"tag.categorySearching\\\" md-selected-item-change=\\\"vm.mainCategoryChange(item)\\\" \\nmd-search-text-change=\\\"vm.categorySearchInDropdown(tag.categorySearching,tag.sameHierCats)\\\" \\nmd-items=\\\"item in vm.categorySearchInDropdown(tag.categorySearching,tag.sameHierCats)\\\" md-item-text=\\\"item.name\\\" \\nmd-min-length=\\\"0\\\" md-menu-class=\\\"autocomplete-custom-template\\\">{{item.name}}\\n
-
×
+
{{field.moduleName}}
\\n{{tag.name}}
-
\\n{{ module.name }}\\n
0\\\">\\n 0\\\" style=\\\"min-width:100%\\\" md-require-match \\nmd-floating-label=\\\"{{ \\'REPORT.EDIT_DOCUMENT.SELECT_MAIN_CATEGORY_PLACEHOLDER\\' | translate }}\\\" md-no-cache=\\\"true\\\" \\nmd-autoselect=\\\"true\\\" md-clear-button=\\\"true\\\" md-dropdown-items=\\\"10\\\" md-selected-item=\\\"vm.selectedMainCategory\\\" \\nmd-search-text=\\\"vm.searchMainCategory\\\" md-selected-item-change=\\\"vm.mainCategoryChange(item)\\\" \\nmd-search-text-change=\\\"vm.mainCategorySearch(vm.searchMainCategory)\\\" \\nmd-items=\\\"item in vm.mainCategorySearch(vm.searchMainCategory) | filter: { parent:null} \\\" md-item-text=\\\"item.name\\\" \\nmd-min-length=\\\"0\\\" md-menu-class=\\\"autocomplete-custom-template\\\">{{item.name}}\\n
0\\\"> 0\\\" style=\\\"min-width:100%\\\" md-no-cache=\\\"true\\\" md-autoselect=\\\"true\\\" md-require-match \\nmd-floating-label=\\\"{{ \\'REPORT.EDIT_DOCUMENT.SELECT_SUB_CATEGORY_PLACEHOLDER\\' | translate }}\\\" \\nmd-selected-item=\\\"vm.selectedSub1Category\\\" md-search-text=\\\"vm.searchSub1Category\\\" \\nmd-selected-item-change=\\\"vm.sub1CategoryChange(item)\\\" \\nmd-search-text-change=\\\" vm.sub1CategorySearch(vm.searchSub1Category)\\\" \\nmd-items=\\\"item in vm.sub1CategorySearch(vm.searchSub1Category)\\\" md-item-text=\\\"item.name\\\" md-min-length=\\\"0\\\" \\nmd-menu-class=\\\"autocomplete-custom-template\\\">{{item.name}}
0\\\"> 0\\\" style=\\\"min-width:100%\\\" \\nmd-no-cache=\\\"true\\\" md-autoselect=\\\"true\\\" md-require-match \\nmd-floating-label=\\\"{{ \\'REPORT.EDIT_DOCUMENT.SELECT_SUB_CATEGORY_PLACEHOLDER\\' | translate }}\\\" \\nmd-selected-item=\\\"vm.selectedSub2Category\\\" md-search-text=\\\"vm.searchSub2Category\\\" \\nmd-selected-item-change=\\\"vm.sub2CategoryChange(item)\\\" \\nmd-search-text-change=\\\" vm.sub2CategorySearch(vm.searchSub2Category)\\\" \\nmd-items=\\\"item in vm.sub2CategorySearch(vm.searchSub2Category)\\\" md-item-text=\\\"item.name\\\" md-min-length=\\\"0\\\" \\nplaceholder=\\\"Alt Kategori\\\" md-menu-class=\\\"autocomplete-custom-template\\\">{{item.name}}\\n
+
\\n\\n
{{vm.aspectSentiment}}
\\n{{ sentiment}}
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/edit/editdocumentdialog.html\",\"

\\n

\\n

{{ module.name}}\\n
\\n

{{field.moduleName}}
{{tag.name}}
-
{{field.moduleName}}
{{tag.name}}
\\n-

\\n\\n
{{tag.name}}
\\n{{ sentiment}}
\\n
\\n\\n{{ \\'REPORT.EDIT_DOCUMENT.REMOVE\\' | translate }}{{ \\'REPORT.EDIT_DOCUMENT.CLOSE\\' | translate }}
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/edit/report-document-annotation-dialog.html\",\"

\\n

\\n

\\n
{{ module.name}}
0\\\" \\nng-model=\\\"vm.isCategoryD\\\" ng-change=\\\"vm.changeDefaultCategorys()\\\">
\\n\\n{{vm.getCategoryTitle(category)}}
\\n
0\\\">\\n\\n{{vm.getCategoryTitle(category)}}
0\\\" style=\\\"margin-left: -15px\\\">\\n
0 && vm.document.sub1Categories.length > 0\\\">\\n\\n{{vm.getCategoryTitle(category)}}
0 && vm.document.sub1Categories.length > 0\\\" style=\\\"margin-left: -15px\\\">\\n
\\n+
0\\\" \\nstyle=\\\"color:white; border:0px\\\" class=\\\"icon icon-swap-horizontal s20\\\">
\\n{{ sentiment.name}}
\\n
\\n
\\n

0\\\" \\nng-repeat=\\\"field in vm.document.categories| filter : {moduleId:vm.selectedModule.id} track by $index\\\" layout-wrap \\nstyle=\\\"font-size:16px;margin-bottom:5px\\\">
{{vm.getCategoryTitle(tag)}}\\n
\\n\\n
-
\\n{{ \\'REPORT.EDIT_DOCUMENT.REMOVE\\' | translate }}
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/edit/report-document-aspect-annotation-dialog.html\",\"

{{vm.annotation.text}}

{{field.moduleName}}
\\n
{{tag.name}}
\\n 0 && field.editing && $index == field.tagList.length-1\\\" \\nstyle=\\\"min-width:100%\\\" md-require-match md-no-cache=\\\"true\\\" \\nmd-floating-label=\\\"{{ \\'REPORT.EDIT_DOCUMENT.SELECT_CATEGORY_PLACEHOLDER\\' | translate }}\\\" md-autoselect=\\\"true\\\" \\nmd-clear-button=\\\"true\\\" md-dropdown-items=\\\"10\\\" md-selected-item=\\\"tag.updateCategory\\\" \\nmd-search-text=\\\"tag.categorySearching\\\" md-selected-item-change=\\\"vm.mainCategoryChange(item)\\\" \\nmd-search-text-change=\\\"vm.categorySearchInDropdown(tag.categorySearching,tag.sameHierCats)\\\" \\nmd-items=\\\"item in vm.categorySearchInDropdown(tag.categorySearching,tag.sameHierCats)\\\" md-item-text=\\\"item.name\\\" \\nmd-min-length=\\\"0\\\" md-menu-class=\\\"autocomplete-custom-template\\\">{{item.name}}\\n
-
×
+
0\\\" \\nng-repeat=\\\"aspectCategory in vm.aspectCategories track by $index\\\" layout-wrap style=\\\"margin-top:5px;font-size:16px\\\">\\n
{{vm.getCategoryTitle(category)}}
-
0\\\">
0\\\" \\nstyle=\\\"display:contents; min-width:100%\\\" md-require-match \\nmd-floating-label=\\\"{{ \\'REPORT.EDIT_DOCUMENT.SELECT_MAIN_CATEGORY_PLACEHOLDER\\' | translate }}\\\" md-no-cache=\\\"true\\\" \\nmd-autoselect=\\\"true\\\" md-clear-button=\\\"true\\\" md-dropdown-items=\\\"10\\\" md-selected-item=\\\"vm.selectedMainCategory\\\" \\nmd-search-text=\\\"vm.searchMainCategory\\\" md-selected-item-change=\\\"vm.mainCategoryChange(item)\\\" \\nmd-search-text-change=\\\"vm.mainCategorySearch(vm.searchMainCategory)\\\" \\nmd-items=\\\"item in vm.mainCategorySearch(vm.searchMainCategory) | filter: { parent:null} \\\" \\nmd-item-text=\\\"vm.getCategoryTitle(item)\\\" md-min-length=\\\"0\\\" md-menu-class=\\\"autocomplete-custom-template\\\">\\n{{vm.getCategoryTitle(item)}}\\n
0\\\">
{{vm.getCategoryTitle(item)}}\\n
0\\\">
{{vm.getCategoryTitle(item)}}\\n
+
\\n
\\n\\n
{{vm.annotation.sentiment}}
\\n{{ sentiment.name}}\\n
0) || (vm.annotation.sentiment && !vm.removeAspectSentimentLoading))\\\" \\nng-click=\\\"vm.reject($event)\\\">
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/edit/report-document-assign-dialog.html\",\"

0\\\" style=\\\"min-width:100%\\\" \\nmd-require-match md-floating-label=\\\"{{ \\'REPORT.ASSIGN_DOCUMENT.SELECT_ASSIGN_USER_PLACEHOLDER\\' | translate }}\\\" \\nmd-no-cache=\\\"true\\\" md-autoselect=\\\"true\\\" md-clear-button=\\\"true\\\" md-dropdown-items=\\\"10\\\" \\nmd-selected-item=\\\"vm.selectedUsername\\\" md-search-text=\\\"vm.searchUsernameText\\\" \\nmd-selected-item-change=\\\"vm.changeAssignedUsername(item)\\\" \\nmd-search-text-change=\\\"vm.usernameSearch(vm.searchUsernameText)\\\" \\nmd-items=\\\"item in vm.usernameSearch(vm.searchUsernameText) \\\" md-item-text=\\\"item.name\\\" md-min-length=\\\"0\\\" \\nmd-menu-class=\\\"autocomplete-custom-template\\\">{{item.name}}
\\n{{ \\'REPORT.EDIT_DOCUMENT.ADD_TAG\\' | translate }}\\n
\\n\\n{{ \\'REPORT.ASSIGN_DOCUMENT.CONFIRM_ASSIGN\\' | translate }}
\");\n$templateCache.put(\"app/main/apps/reports/views/edit/report-document-history-dialog.html\",\"

\\n\\n
\\n\\n
{{item.createdBy}}
{{tag}}
\\n\\n
\\n
{{item.detail}}
\\n\\n
\\n
\\n
\\n\\n
{{vm.setDate(item.createDate)}}
\");\n$templateCache.put(\"app/main/apps/reports/views/edit/report-document-note-dialog.html\",\"

0 || vm.document.noteReady\\\" class=\\\"md-raised md-accent\\\" ng-click=\\\"vm.readyNote()\\\" \\nng-style=\\\"(vm.document.noteReady) && {\\'background-color\\':\\'#4CAF50\\'}\\\" aria-label=\\\"Confirm\\\"> \\n\\n
{{defaultTag.value}}
\\\"{{item.name}}\\\"
Ekle
{{item}}
0\\\" class=\\\"highlight mt-8 mr-8\\\">\\n{{\\'REPORT.EDIT_DOCUMENT.SELECTED_TAGS\\' | translate}}:
\\n{{value}}\\n
\\n
\\n
\\\"logo\\\"\\n{{note.username}}
{{note.value}}
\\n
{{vm.formatDate(note.date)}}
\");\n$templateCache.put(\"app/main/apps/reports/views/overview/overview.html\",\"
\\n

\\n
0\\\">
\\n{{vm.data.documentCount}}
\\n
0\\\">

{{chart.name}}\\n
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/settings/add-document-tag-settings.html\",\"

+
\\n
-
{{tag}}
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/settings/add-period-field-settings.html\",\"

{{item.fieldTitle}}
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/settings/bottom-sheet-formula-template.html\",\"Formul Yazılımı Hakkında\\n

\\n{{ \\'REPORT.SETTINGS.FORMULA.\\' + item + \\'_TITLE\\' | translate }}

\\n{{ \\'REPORT.SETTINGS.FORMULA.\\' + item | translate}}

\\n== , != , < , > , ≥ , ≤

\");\n$templateCache.put(\"app/main/apps/reports/views/settings/category-alias-dialog.html\",\"

\\n{{ \\'REPORT.SETTINGS.CATEGORY_ALIAS.TITLE\\' | translate }}

\\n
\\n
\\n
\\n
-\\n
{{alias.categoryName}} -> {{alias.aliasName}}
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/settings/category-limit-dialog.html\",\"

\\n{{ \\'REPORT.SETTINGS.LIMIT.EDIT_LIMITS\\' | translate }}

\\n
{{module.moduleName}}
\\n
+\\n
-
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/settings/category-threshold-dialog.html\",\"

\\n{{ \\'REPORT.SETTINGS.THRESHOLDING.EDIT_CATEGORIES\\' | translate }}

\\n
\\n
\\n{{item}}
\\n
\\n
-\\n
{{threshold.categoryName}} -> {{threshold.thresholdValue}}
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/settings/edit-formula-dialog.html\",\"

{{vm.pageHeader}}

\\n\\n
\\n
{{field.fieldTitle}}\\n
\\n
\\n{{ item.name }}\\n\\n\\n{{ item.name }}{{ item }}\\n 0 ) || ( vm.formula.period.type == \\'WEEKLY\\' && vm.formula.period.repeatWeekDay > 0 ) || vm.formula.period.type == \\'DAILY\\'\\\">\\n\\n\\n{{ item.name }}
\\n
0\\\" \\nng-class=\\\"{\\'sortable\\': vm.taskOrder === \\'\\'}\\\">
0\\\" class=\\\"notes scrollable\\\" \\nstyle=\\\"min-height:50px; margin-bottom: 10px;font-size: 15px;max-height:150px\\\" ms-scroll>
\\n
{{content.title}} :
0\\\" layout-wrap>
\\n{{vm.getCategoryTitle(tag)}}
\\n%{{vm.calculatePercentageForCategorySentimentTooltip(item,tag.id,field)}}
\\n
\\n
{{vm.getFilteredFacetTitle(tag.title)}}\\n : {{vm.getFacetValueAlias(tag.title,tag.value)}}
Score : {{item.testScore}}
\\n
\\n\\n
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/settings/edit-formulatable-settings.html\",\"

\\n{{ \\'REPORT.SETTINGS.SCORE_TABLE_SETTINGS\\' | translate }}

\\n
\\n{{field.fieldTitle}}\\n
\\n{{field.fieldTitle}}\\n{{field.fieldTitle}}+
\\n
\\n{{vm.getFieldHierarchyFieldTitle(key)}}
->
\\n{{vm.getFieldHierarchyFieldTitle(value)}}
-\\n
{{field.fieldTitle}}\\n
{{field.name}}\\n{{field.fieldTitle}}\\n{{ field.fieldTitle }}\\n
\\n{{connectedFieldValue.fieldXValue}}
->
\\n{{vm.getFieldHierarchyFieldTitle(connectedFieldValue.defaultXField)}}
->
\\n{{connectedFieldValue.fieldXConnectedFields.length}} {{\\'REPORT.DASHBOARD_TEMPLATE_3.FORMULA_TABLE.CONNECTED_FIELDS\\' | translate}}\\n
-
\");\n$templateCache.put(\"app/main/apps/reports/views/settings/edit-reputation-score-widget-settings.html\",\"

\\n\\n
\\n
\\n\\n{{item.settings.definition}}+\\n
\\n
\\n
-\\n
{{item.definition}}
\\n
{{item.settings.definition}}\\n\\n{{item.title}}
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/settings/edit-reputation-widget-settings.html\",\"

\\n\\n\\n
\\n
\\n{{model.fieldTitle}}\\n{{field.fieldTitle}}\\n\\n{{catLevel}}\\n
\\n
+\\n
-
{{vm.getCategoryText(id)}}\\n
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/settings/edit-rule-dialog.html\",\"

\\n{{ \\'REPORT.SETTINGS.RULES.EDIT_RULE_TITLE\\' | translate }}

\\n
\\n
\\n
{{item.fieldTitle}}\\n
\\n
{{item.text}}{{item.text}}
{{item.name}}\\n
-
\\n
{{item.module.name}}
{{item.text}}\\n{{item.text}}\\n
\\n
{{item.name}}\\n
-
\\n
-\\n
{{threshold.categoryName}} -> {{threshold.thresholdValue}}
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/settings/facet-order-dialog.html\",\"

\\n{{ \\'REPORT.SETTINGS.FACET_ORDER2_TITLE\\' | translate }}

\\n
\\n
\\n
{{item.fieldTitle}}
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/settings/filter-categories-settings.html\",\"

\\n

\\n
\\n+\\n
-
{{vm.getCategoryText(id)}}\\n
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/settings/indicator-settings.html\",\"

\\n{{ \\'REPORT.SETTINGS.INDICATORS.ADD_INDICATOR_PANEL.TITLE\\' | translate }}

\\n
Modules
\\n{{ \\'REPORT.SETTINGS.INDICATORS.ADD_INDICATOR_PANEL.TABLE.NAME\\' | translate }}\\n{{ \\'REPORT.SETTINGS.INDICATORS.ADD_INDICATOR_PANEL.TABLE.TYPE\\' | translate }}\\n{{ \\'REPORT.SETTINGS.INDICATORS.ADD_INDICATOR_PANEL.TABLE.VALUE\\' | translate }}\\n{{ \\'REPORT.SETTINGS.INDICATORS.ADD_INDICATOR_PANEL.TABLE.INDICATOR_VALUE\\' | translate }}
{{reportModule.module.name}}\\n{{reportModule.module.moduleTypeId}}\\n
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/settings/report-field-alias-dialog.html\",\"

\\n
\\n\\\"logo\\\"
{{ \\'SHARED.ADD\\' | translate }}
\\n
-
{{alias.fieldTitle}}
\\n
\\\"logo\\\"
{{alias.trFieldAlias}}
{{alias.enFieldAlias}}
\");\n$templateCache.put(\"app/main/apps/reports/views/settings/report-field-value-alias-dialog.html\",\"

\\n
\\n\\n{{ value.name }}\\n
\\\"logo\\\"\\n\\\"logo\\\"
{{ \\'SHARED.ADD\\' | translate }}
\\n
-
{{alias.fieldTitle}}
\\n
{{alias.fieldValue}}
\\n
{{alias.trAlias}}
\\\"logo\\\"
{{alias.enAlias}}
\");\n$templateCache.put(\"app/main/apps/reports/views/settings/report-module-classifier-settings-dialog.html\",\"

\\n{{ \\'REPORT.SETTINGS.REPORT_MODULES.CLASSIFIER_SETTINGS\\' | translate }}

\\n

0\\\" style=\\\"margin-block-start: 0; margin-block-end: 0\\\">\\n{{ \\'REPORT.SETTINGS.REPORT_MODULES.ADD_TEXT_FIELD\\' | translate }}:

0\\\">{{field.fieldTitle}}\\n{{field.fieldTitle}}\\n+\\n

0\\\" style=\\\"margin-block-start: 0; margin-block-end: 0\\\">\\n{{ \\'REPORT.SETTINGS.REPORT_MODULES.ADD_NUMERIC_FIELD\\' | translate }}:

0\\\">{{field.fieldTitle}}\\n{{field.fieldTitle}}\\n\\n+

0\\\" \\nstyle=\\\"margin-block-start: 0; margin-block-end: 0\\\">{{ \\'REPORT.SETTINGS.REPORT_MODULES.CHOOSEN_FIELDS\\' | translate }}:\\n

{{classificationField.reportField.fieldTitle}}
->
\\n{{classificationField.moduleField.fieldTitle}}
-

{{ \\'REPORT.SETTINGS.REPORT_MODULES.NER_MATCH_FIELD\\' | translate }}:\\n

\\n{{field.fieldTitle}}\\n{{ category.name }}{{ \\'REPORT.SETTINGS.REPORT_MODULES.NER_MATCH_TYPES.\\'+type | translate }}\\n+

\\n{{ \\'REPORT.SETTINGS.REPORT_MODULES.NER_MATCH_FIELD\\' | translate }}:

{{vm.nerMatchingReportField.fieldTitle}}
->
\\n
{{nerCategoryName}}
->
{{ \\'REPORT.SETTINGS.REPORT_MODULES.NER_MATCH_TYPES.\\'+type | translate }}
\\n
-
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/settings/save-report-filters-dialog.html\",\"

\\n\\n
0\\\">

  • {{filterChip.titleKey}} : {{filterChip.value}}

\\n
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/settings/settings.html\",\"
\\n
\\n
\\n
\\n
{{period}}
\\n
\\n
{{\\'REPORT.SETTINGS.FACET_ORDER_TITLE\\'| translate }}
\\n\\n\\n
\\n{{\\'REPORT.SETTINGS.FACET_ORDER2_TITLE\\'| translate }}
\\n
\\n
{{field.fieldTitle}}\\n
{{field.fieldTitle}}\\n
\\n
{{ \\'REPORT.SETTINGS.REPORTFIELD_ALIAS.TITLE\\' |translate }}\\n
\\n
{{ \\'REPORT.SETTINGS.REPORTFIELD_VALUE_ALIAS.TITLE\\' |translate }}
\\n
{{\\'REPORT.SETTINGS.THRESHOLDING_TITLE\\'| translate }}
\\n\\n\\n{{\\'REPORT.SETTINGS.THRESHOLDING.ALL_CATEGORIES\\'|translate}}{{item}}\\n{{\\'SHARED.NOT_SELECTED\\'| translate}}{{item}}
\\n\\n{{item}}\\n{{ \\\"REPORT.SETTINGS.THRESHOLDING.DEFINITION.MAX_CATEGORY_COUNT\\\" | translate }}\\n
{{item}}\\n\\n{{ \\\"REPORT.SETTINGS.THRESHOLDING.DEFINITION.MAX_SUB_CATEGORY_COUNT\\\" | translate }}\\n
\\n
\\n
{{\\'REPORT.SETTINGS.DASHBOARD_TEMPLATES\\'| translate }}
\\n\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\nSeçilmedi\\n{{field.fieldTitle}}\\n
\\n\\n{{field.fieldTitle}}\\n
\\n{{field.fieldTitle}}\\n
\\n{{field.fieldTitle}}\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n%{{item}}\\n
\\n
\\n
\\n
\\n
\\n
{{\\'REPORT.SETTINGS.MODULES\\'| translate }}
\\n
\\n{{ \\'REPORT.SETTINGS.REPORT_MODULES.NAME\\' | translate }}\\n{{ \\'REPORT.SETTINGS.REPORT_MODULES.FEEDBACK\\' | translate }}\\n{{ \\'REPORT.SETTINGS.REPORT_MODULES.DASHBOARD\\' | translate }}\\n{{ \\'REPORT.SETTINGS.REPORT_MODULES.SENTIMENT\\' | translate }}\\n{{ \\'REPORT.SETTINGS.REPORT_MODULES.SIMILARITY\\' | translate }}\\n{{ \\'REPORT.SETTINGS.REPORT_MODULES.CLASSIFIER_SETTINGS\\' | translate }}\\n
{{module.module.name}}\\n\\n\\n\\n
\\n
{{\\'REPORT.SETTINGS.RULES_TITLE\\'| translate }}
{{ \\'REPORT.SETTINGS.RULES.APPLY\\' | translate }}\\n{{ \\'REPORT.SETTINGS.RULES.DEFINITION\\' | translate }}{{ \\'REPORT.SETTINGS.RULES.EDIT\\' | translate }}\\n{{ \\'REPORT.SETTINGS.RULES.REMOVE\\' | translate }}
\\n\\n{{rule.definition}}\\n

\\n

{{\\'REPORT.SETTINGS.FORMULA.TITLE\\'| translate }}
\\n
{{ \\'REPORT.SETTINGS.FORMULA.CATEGORY\\' | translate }}\\n{{ \\'REPORT.SETTINGS.FORMULA.DEFINITION\\' | translate }}\\n{{ \\'REPORT.SETTINGS.FORMULA.ACTIVATE\\' | translate }}/{{ \\'REPORT.SETTINGS.FORMULA.DEACTIVATE\\' | translate }}\\n{{ \\'REPORT.SETTINGS.FORMULA.EDIT\\' | translate }}{{ \\'REPORT.SETTINGS.FORMULA.REMOVE\\' | translate }}
\\n{{ \\'REPORT.SETTINGS.FORMULA.\\' + formula.settingType | translate}}{{ formula.settings.definition}}\\n
\\n
\\n

\\n
\\n

\\n
\\n{{ \\'REPORT.SETTINGS.RECYCLE_DOCUMENTS.TITLE\\' | translate }}
\\n{{ \\'REPORT.SETTINGS.RECYCLE_DOCUMENTS.BATCH_ID\\' | translate }}{{ \\'SHARED.DATE\\' | translate }}\\n{{ \\'SHARED.COUNT\\' | translate }}\\n{{ \\'REPORT.SETTINGS.RECYCLE_DOCUMENTS.RECYCLE_BUTTON_ALL\\' | translate }}
{{batch.batchId}}\\n{{batch.createDate| date:\\'dd.MM.yyyy HH:mm\\':\\'+0300\\'}}{{batch.count}}{{ \\'REPORT.SETTINGS.RECYCLE_DOCUMENTS.RECYCLE_BUTTON\\' | translate }}\\n
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/settings/topbottompreview.html\",\"

\\n

\\n

\\n{{ widget.title }}
\\n
\\n{{widget.attributeName}}\\n{{formulaCol.definition}}\\n{{widget.changeColumnName}}
\\nPreview Firma {{$index + 1}}
{{f.val}}
0 ? vm.addopacity(widget.color, 0.99) : vm.addopacity(widget.alternateColor, 0.99)}\\\">\\n{{f.val}}
{{f.change}}
\\n
\");\n$templateCache.put(\"app/main/apps/reports/views/test/reporttest.html\",\"
\\n
\\n
JSON
0\\\" layout-wrap>
{{vm.getCategoryTitle(tag)}}
\\n%{{(tag.probability*100).toFixed()}} - {{field.text}}
\\n
\\n
%{{(field.sentimentRate*100).toFixed()}}
\\n\\n
%{{(vm.result.documents[0].sentimentRate*100).toFixed()}}\\n
{{ner.key}}\\n : {{ner.value}}
\\n
\");\n$templateCache.put(\"app/main/apps/sources/views/edit/create-source.html\",\"

\");\n$templateCache.put(\"app/main/apps/sources/views/edit/topic.html\",\"
\\n{{\\'SOURCE.MAKE_PUBLIC\\' | translate}}
\\n
\\n\\n
\\n
\\n
\\n
\\\"{{item.name}}\\\"
Ekle
\\n{{item.keyword}}
{{vm.rule.selectedKeywords.operator}}\\n{{item.name}}{{vm.rule.selectedCategories.operator}}
{{item.name}}\\n{{vm.rule.selectedContenttypes.operator}}\\n{{item.name}}\\n{{vm.rule.selectedSites.operator}}
{{item.name}}\\n{{vm.rule.selectedSitetypes.operator}}{{item.name}}\\n{{vm.rule.selectedLanguages.operator}}
\\n
\\n
\\n\\n
\\n{{\\'RULE.EXCLUDE\\' | translate}}
0\\\" layout=\\\"row\\\" class=\\\"p-3\\\" layout-wrap>{{\\'RULE.SITES\\' | translate}}: {{site.name}}\\n{{vm.rule.selectedSites.operator}}\\n
0\\\" layout=\\\"row\\\" class=\\\"p-3\\\" layout-wrap>{{\\'RULE.SITETYPES\\' | translate}}: {{sitetype.name}}\\n{{vm.rule.selectedSitetypes.operator}}
0\\\" \\nlayout=\\\"row\\\" class=\\\"p-3\\\" layout-wrap>{{\\'RULE.CATEGORIES\\' | translate}}: {{category.name}}\\n{{vm.rule.selectedCategories.operator}}
0\\\" \\nlayout=\\\"row\\\" class=\\\"p-3\\\" layout-wrap>{{\\'RULE.CONTENTTYPES\\' | translate}}: \\n{{contenttype.name}}{{vm.rule.selectedContenttypes.operator}}
0\\\" layout=\\\"row\\\" layout-wrap>\\n{{\\'RULE.LANGUAGES\\' | translate}}: {{language.name}}{{vm.rule.selectedLanguages.operator}}
0\\\" layout=\\\"row\\\" layout-wrap>\\n{{\\'RULE.KEYWORDS\\' | translate}}: {{item.name}}{{vm.rule.selectedKeywords.operator}}
\\n
{{vm.pageRules.number + 1}}\\n
= vm.pageRules.totalPages - 1\\\">\\n

{{item.name}}

\\n: {{item.payload}}
\\n{{\\'RULE.EXCLUDE\\' | translate}}
0\\\" layout=\\\"row\\\" layout-wrap>\\n{{\\'RULE.SITES\\' | translate}}: {{site.name}} {{item.selectedSites.operator}}
0\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" layout-wrap>{{\\'RULE.SITETYPES\\' | translate}}: {{sitetype.name}} \\n{{item.selectedSitetypes.operator}}
0\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" layout-wrap>{{\\'RULE.CATEGORIES\\' | translate}}: {{category.name}} \\n{{item.selectedCategories.operator}}
0\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" layout-wrap>{{\\'RULE.CONTENTTYPES\\' | translate}}: {{contenttype.name}} \\n{{item.selectedContenttypes.operator}}
0\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" layout-wrap>{{\\'RULE.LANGUAGES\\' | translate}}: {{language.name}} \\n{{item.selectedLanguages.operator}}
0\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" layout-wrap>{{\\'RULE.KEYWORDS\\' | translate}}: \\n{{keyword.name}} {{item.selectedKeywords.operator}}\\n
\\n
\");\n$templateCache.put(\"app/main/apps/sources/views/edit/websource-upload.html\",\"
\\n
\\n
\\n{{column.title?column.title:column.name}}
\\n{{column.custom?column.name:item[column.name]}}
\\n
\\n

{{trace.message}}

\");\n$templateCache.put(\"app/main/apps/sources/views/edit/websource.html\",\"
\\n{{\\'SOURCE.MAKE_PUBLIC\\' | translate}}
\\n
\\n
\\n
\\n
{{vm.boundedTopics.number + 1}}
= vm.boundedTopics.totalPages - 1\\\">\\n
\\n\\n\\n\\n
\\n
\\n
Aktif/PasifKonu AdıKonu Açıklaması
\\n
{{item.name}}
{{item.description}}
\\n
\\n\\n
\\n
\\n
\\n
\\n
\\\"{{item.name}}\\\"
Ekle
{{item.keyword}}
{{vm.rule.selectedKeywords.operator}}\\n{{item.name}}{{vm.rule.selectedCategories.operator}}
{{item.name}}\\n{{vm.rule.selectedContenttypes.operator}}\\n{{item.name}}\\n{{vm.rule.selectedSites.operator}}
{{item.name}}\\n{{vm.rule.selectedSitetypes.operator}}{{item.name}}\\n{{vm.rule.selectedLanguages.operator}}
\\n
\\n
\\n\\n
\\n{{\\'RULE.EXCLUDE\\' | translate}}
0\\\" layout=\\\"row\\\" class=\\\"p-3\\\" layout-wrap>{{\\'RULE.SITES\\' | translate}}: {{site.name}}\\n{{vm.rule.selectedSites.operator}}\\n
0\\\" layout=\\\"row\\\" class=\\\"p-3\\\" layout-wrap>{{\\'RULE.SITETYPES\\' | translate}}: {{sitetype.name}}\\n{{vm.rule.selectedSitetypes.operator}}
0\\\" \\nlayout=\\\"row\\\" class=\\\"p-3\\\" layout-wrap>{{\\'RULE.CATEGORIES\\' | translate}}: {{category.name}}\\n{{vm.rule.selectedCategories.operator}}
0\\\" \\nlayout=\\\"row\\\" class=\\\"p-3\\\" layout-wrap>{{\\'RULE.CONTENTTYPES\\' | translate}}: \\n{{contenttype.name}}{{vm.rule.selectedContenttypes.operator}}
0\\\" layout=\\\"row\\\" layout-wrap>\\n{{\\'RULE.LANGUAGES\\' | translate}}: {{language.name}}{{vm.rule.selectedLanguages.operator}}
0\\\" layout=\\\"row\\\" layout-wrap>\\n{{\\'RULE.KEYWORDS\\' | translate}}: {{keyword.name}}{{vm.rule.selectedKeywords.operator}}
\\n
{{vm.pageRules.number + 1}}\\n
= vm.pageRules.totalPages - 1\\\">\\n

{{item.name}}

\\n: {{item.payload}}
\\n{{\\'RULE.EXCLUDE\\' | translate}}
0\\\" layout=\\\"row\\\" layout-wrap>\\n{{\\'RULE.SITES\\' | translate}}: {{site.name}} {{item.selectedSites.operator}}
0\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" layout-wrap>{{\\'RULE.SITETYPES\\' | translate}}: {{sitetype.name}} \\n{{item.selectedSitetypes.operator}}
0\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" layout-wrap>{{\\'RULE.CATEGORIES\\' | translate}}: {{category.name}} \\n{{item.selectedCategories.operator}}
0\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" layout-wrap>{{\\'RULE.CONTENTTYPES\\' | translate}}: {{contenttype.name}} \\n{{item.selectedContenttypes.operator}}
0\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" layout-wrap>{{\\'RULE.LANGUAGES\\' | translate}}: {{language.name}} \\n{{item.selectedLanguages.operator}}
0\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" layout-wrap>{{\\'RULE.KEYWORDS\\' | translate}}: \\n{{keyword.name}} {{item.selectedKeywords.operator}}\\n
\\n
\\n
\\n
\\n
\\n
{{ trace.reportCode }}{{ trace.reportName }}
\\n\\n
{{ step.status }}{{ step.ruleName }}{{ step.topicName }}
0\\\" style=\\\"position: absolute; top:20px; right:20px\\\">
\\n\\n
\\n
\\n
\");\n$templateCache.put(\"app/main/apps/modules/views/create/steps/classifiers.html\",\"
\\\"{{item.name}}\\\"
{{item.name[0] | uppercase}}
{{item.name}}
\\n{{item.definition}}
\");\n$templateCache.put(\"app/main/apps/modules/views/create/steps/module-information.html\",\"
\\nModule name field is required.
\\n
\\nModule definition field is required.
\");\n$templateCache.put(\"app/main/apps/modules/views/create/steps/module-type.html\",\"
\\n
\\\"{{item.name}}\\\"
{{item.name[0] | uppercase}}
\\n
{{item.name}}
\\n
{{item.definition}}
\");\n$templateCache.put(\"app/main/apps/modules/views/create/steps/pipeline-information.html\",\"
\\nPipeline name field is required.
\\n
\\n
Pipeline definition field is required.
\");\n$templateCache.put(\"app/main/apps/modules/views/create/steps/stages.html\",\"
\\n
\\\"{{task.name}}\\\"
{{item.name[0] | uppercase}}
{{item.name}}
{{item.definition}}
ADD
\\n
\\\"{{task.title}}\\\"
{{item.name[0]}}
{{item.name}}
{{item.definition}}
\\n\\nRemove\\n
\");}]);"],"sourceRoot":"/source/"}