From c52e012c41fa8321380dd86f97adbd1b11dc6b47 Mon Sep 17 00:00:00 2001 From: dacowan404 Date: Fri, 9 Feb 2024 11:45:40 -0500 Subject: [PATCH] Auto-generated commit [ci skip] --- 404.html | 2 +- index.html | 2 +- main.js | 1860 +++++----------------------------------------------- vendor.js | 6 +- 4 files changed, 172 insertions(+), 1698 deletions(-) diff --git a/404.html b/404.html index 7289262e..e2caa85e 100644 --- a/404.html +++ b/404.html @@ -5,7 +5,7 @@ MicrobeTrace - + diff --git a/index.html b/index.html index 7289262e..e2caa85e 100644 --- a/index.html +++ b/index.html @@ -5,7 +5,7 @@ MicrobeTrace - + diff --git a/main.js b/main.js index 93cdac47..c8c099e8 100644 --- a/main.js +++ b/main.js @@ -78,60 +78,58 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ "AppModule": () => (/* binding */ AppModule), /* harmony export */ "TestedComponent": () => (/* binding */ TestedComponent) /* harmony export */ }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! tslib */ 70655); -/* harmony import */ var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @angular/platform-browser */ 11481); -/* harmony import */ var _angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @angular/platform-browser/animations */ 84934); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @angular/core */ 94650); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! tslib */ 70655); +/* harmony import */ var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @angular/platform-browser */ 11481); +/* harmony import */ var _angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @angular/platform-browser/animations */ 84934); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @angular/core */ 94650); /* harmony import */ var _app_routing_module__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./app-routing.module */ 90158); /* harmony import */ var _app_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./app.component */ 55041); /* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! jquery */ 58259); /* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _angular_common_http__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @angular/common/http */ 80529); -/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @angular/forms */ 24006); +/* harmony import */ var _angular_common_http__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @angular/common/http */ 80529); +/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @angular/forms */ 24006); /* harmony import */ var _shared_utils_utils_module__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @shared/utils/utils.module */ 27955); /* harmony import */ var ngx_bootstrap__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ngx-bootstrap */ 11109); /* harmony import */ var _golden_layout_component_service__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./golden-layout-component.service */ 90893); /* harmony import */ var _golden_layout_host_component__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./golden-layout-host.component */ 42027); -/* harmony import */ var primeng_table__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! primeng/table */ 41765); -/* harmony import */ var primeng_fileupload__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! primeng/fileupload */ 13388); -/* harmony import */ var primeng_listbox__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! primeng/listbox */ 38433); -/* harmony import */ var primeng_radiobutton__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! primeng/radiobutton */ 50613); -/* harmony import */ var primeng_calendar__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! primeng/calendar */ 70585); -/* harmony import */ var primeng_paginator__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! primeng/paginator */ 29061); -/* harmony import */ var primeng_progressbar__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! primeng/progressbar */ 78235); -/* harmony import */ var primeng_confirmdialog__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! primeng/confirmdialog */ 32137); -/* harmony import */ var primeng_dropdown__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! primeng/dropdown */ 82210); -/* harmony import */ var primeng_accordion__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! primeng/accordion */ 32174); -/* harmony import */ var primeng_sidebar__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! primeng/sidebar */ 23214); -/* harmony import */ var primeng_multiselect__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! primeng/multiselect */ 65722); -/* harmony import */ var primeng_slider__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! primeng/slider */ 78177); -/* harmony import */ var primeng_tabview__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! primeng/tabview */ 58783); -/* harmony import */ var primeng_selectbutton__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! primeng/selectbutton */ 85362); -/* harmony import */ var primeng_tree__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! primeng/tree */ 14323); -/* harmony import */ var primeng_dialog__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! primeng/dialog */ 77729); +/* harmony import */ var primeng_table__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! primeng/table */ 41765); +/* harmony import */ var primeng_fileupload__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! primeng/fileupload */ 13388); +/* harmony import */ var primeng_listbox__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! primeng/listbox */ 38433); +/* harmony import */ var primeng_radiobutton__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! primeng/radiobutton */ 50613); +/* harmony import */ var primeng_calendar__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! primeng/calendar */ 70585); +/* harmony import */ var primeng_paginator__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! primeng/paginator */ 29061); +/* harmony import */ var primeng_progressbar__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! primeng/progressbar */ 78235); +/* harmony import */ var primeng_confirmdialog__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! primeng/confirmdialog */ 32137); +/* harmony import */ var primeng_dropdown__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! primeng/dropdown */ 82210); +/* harmony import */ var primeng_accordion__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! primeng/accordion */ 32174); +/* harmony import */ var primeng_sidebar__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! primeng/sidebar */ 23214); +/* harmony import */ var primeng_multiselect__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! primeng/multiselect */ 65722); +/* harmony import */ var primeng_slider__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! primeng/slider */ 78177); +/* harmony import */ var primeng_tabview__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! primeng/tabview */ 58783); +/* harmony import */ var primeng_selectbutton__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! primeng/selectbutton */ 85362); +/* harmony import */ var primeng_tree__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! primeng/tree */ 14323); +/* harmony import */ var primeng_dialog__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! primeng/dialog */ 77729); /* harmony import */ var _microbe_trace_next_plugin_component__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./microbe-trace-next-plugin.component */ 87097); /* harmony import */ var _shared_common_session_app_session_service__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @shared/common/session/app-session.service */ 34845); /* harmony import */ var _shared_common_ui_app_ui_customization_service__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @shared/common/ui/app-ui-customization.service */ 87940); /* harmony import */ var _shared_common_nav_app_url_service__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @shared/common/nav/app-url.service */ 33116); /* harmony import */ var _filesComponent_files_plugin_component__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./filesComponent/files-plugin.component */ 53710); /* harmony import */ var _visualizationComponents_PhylogeneticComponent_phylogenetic_plugin_component__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./visualizationComponents/PhylogeneticComponent/phylogenetic-plugin.component */ 23046); -/* harmony import */ var _visualizationComponents_TimelineComponent_timeline_component_component__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./visualizationComponents/TimelineComponent/timeline-component.component */ 18011); -/* harmony import */ var _visualizationComponents_TwoDComponent_twoD_plugin_component__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./visualizationComponents/TwoDComponent/twoD-plugin.component */ 36481); -/* harmony import */ var _metronic_app_core_core_module__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @metronic/app/core/core.module */ 95760); -/* harmony import */ var _visualizationComponents_TableComponent_table_plugin_component__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./visualizationComponents/TableComponent/table-plugin-component */ 31209); -/* harmony import */ var _visualizationComponents_MapComponent_map_plugin_component__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./visualizationComponents/MapComponent/map-plugin.component */ 53605); -/* harmony import */ var _visualizationComponents_AlignmentViewComponent_alignment_view_plugin_component__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./visualizationComponents/AlignmentViewComponent/alignment-view-plugin-component */ 37536); -/* harmony import */ var _asymmetrik_ngx_leaflet__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! @asymmetrik/ngx-leaflet */ 76651); -/* harmony import */ var _asymmetrik_ngx_leaflet_markercluster__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! @asymmetrik/ngx-leaflet-markercluster */ 46597); -/* harmony import */ var _angular_material_button__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! @angular/material/button */ 4859); -/* harmony import */ var _angular_material_input__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! @angular/material/input */ 284); -/* harmony import */ var _angular_material_menu__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! @angular/material/menu */ 28255); -/* harmony import */ var _angular_material_toolbar__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! @angular/material/toolbar */ 83683); -/* harmony import */ var _angular_material_slider__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! @angular/material/slider */ 87314); -/* harmony import */ var _shared_dnd_directive__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @shared/dnd.directive */ 7015); -/* harmony import */ var _angular_material_select__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! @angular/material/select */ 84385); -/* harmony import */ var _angular_material_icon__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! @angular/material/icon */ 97392); -/* harmony import */ var _angular_material_progress_spinner__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! @angular/material/progress-spinner */ 51572); +/* harmony import */ var _visualizationComponents_TwoDComponent_twoD_plugin_component__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./visualizationComponents/TwoDComponent/twoD-plugin.component */ 36481); +/* harmony import */ var _metronic_app_core_core_module__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @metronic/app/core/core.module */ 95760); +/* harmony import */ var _visualizationComponents_TableComponent_table_plugin_component__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./visualizationComponents/TableComponent/table-plugin-component */ 31209); +/* harmony import */ var _visualizationComponents_MapComponent_map_plugin_component__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./visualizationComponents/MapComponent/map-plugin.component */ 53605); +/* harmony import */ var _asymmetrik_ngx_leaflet__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! @asymmetrik/ngx-leaflet */ 76651); +/* harmony import */ var _asymmetrik_ngx_leaflet_markercluster__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! @asymmetrik/ngx-leaflet-markercluster */ 46597); +/* harmony import */ var _angular_material_button__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @angular/material/button */ 4859); +/* harmony import */ var _angular_material_input__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @angular/material/input */ 284); +/* harmony import */ var _angular_material_menu__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! @angular/material/menu */ 28255); +/* harmony import */ var _angular_material_toolbar__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! @angular/material/toolbar */ 83683); +/* harmony import */ var _angular_material_slider__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! @angular/material/slider */ 87314); +/* harmony import */ var _shared_dnd_directive__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @shared/dnd.directive */ 7015); +/* harmony import */ var _angular_material_select__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! @angular/material/select */ 84385); +/* harmony import */ var _angular_material_icon__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! @angular/material/icon */ 97392); +/* harmony import */ var _angular_material_progress_spinner__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! @angular/material/progress-spinner */ 51572); var _class; @@ -185,8 +183,6 @@ var _class; - - @@ -195,33 +191,33 @@ window['$'] = jquery__WEBPACK_IMPORTED_MODULE_2__; let TestedComponent = (_class = class TestedComponent { constructor() {} }, _class.ctorParameters = () => [], _class); -TestedComponent = (0,tslib__WEBPACK_IMPORTED_MODULE_20__.__decorate)([(0,_angular_core__WEBPACK_IMPORTED_MODULE_21__.Component)({ +TestedComponent = (0,tslib__WEBPACK_IMPORTED_MODULE_18__.__decorate)([(0,_angular_core__WEBPACK_IMPORTED_MODULE_19__.Component)({ template: `

Test2

`, selector: `app-tested` -}), (0,tslib__WEBPACK_IMPORTED_MODULE_20__.__metadata)("design:paramtypes", [])], TestedComponent); +}), (0,tslib__WEBPACK_IMPORTED_MODULE_18__.__metadata)("design:paramtypes", [])], TestedComponent); let AppModule = class AppModule {}; -AppModule = (0,tslib__WEBPACK_IMPORTED_MODULE_20__.__decorate)([(0,_angular_core__WEBPACK_IMPORTED_MODULE_21__.NgModule)({ - declarations: [_app_component__WEBPACK_IMPORTED_MODULE_1__.AppComponent, _microbe_trace_next_plugin_component__WEBPACK_IMPORTED_MODULE_7__.MicrobeTraceNextHomeComponent, _filesComponent_files_plugin_component__WEBPACK_IMPORTED_MODULE_11__.FilesComponent, _visualizationComponents_TwoDComponent_twoD_plugin_component__WEBPACK_IMPORTED_MODULE_14__.TwoDComponent, _visualizationComponents_TableComponent_table_plugin_component__WEBPACK_IMPORTED_MODULE_16__.TableComponent, _golden_layout_host_component__WEBPACK_IMPORTED_MODULE_6__.GoldenLayoutHostComponent, _visualizationComponents_MapComponent_map_plugin_component__WEBPACK_IMPORTED_MODULE_17__.MapComponent, TestedComponent, _shared_dnd_directive__WEBPACK_IMPORTED_MODULE_19__.DndDirective, _visualizationComponents_PhylogeneticComponent_phylogenetic_plugin_component__WEBPACK_IMPORTED_MODULE_12__.PhylogeneticComponent, _visualizationComponents_TimelineComponent_timeline_component_component__WEBPACK_IMPORTED_MODULE_13__.TimelineComponent, _visualizationComponents_AlignmentViewComponent_alignment_view_plugin_component__WEBPACK_IMPORTED_MODULE_18__.AlignmentViewComponent], - imports: [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_22__.BrowserModule, _angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_23__.BrowserAnimationsModule, _app_routing_module__WEBPACK_IMPORTED_MODULE_0__.AppRoutingModule, +AppModule = (0,tslib__WEBPACK_IMPORTED_MODULE_18__.__decorate)([(0,_angular_core__WEBPACK_IMPORTED_MODULE_19__.NgModule)({ + declarations: [_app_component__WEBPACK_IMPORTED_MODULE_1__.AppComponent, _microbe_trace_next_plugin_component__WEBPACK_IMPORTED_MODULE_7__.MicrobeTraceNextHomeComponent, _filesComponent_files_plugin_component__WEBPACK_IMPORTED_MODULE_11__.FilesComponent, _visualizationComponents_TwoDComponent_twoD_plugin_component__WEBPACK_IMPORTED_MODULE_13__.TwoDComponent, _visualizationComponents_TableComponent_table_plugin_component__WEBPACK_IMPORTED_MODULE_15__.TableComponent, _golden_layout_host_component__WEBPACK_IMPORTED_MODULE_6__.GoldenLayoutHostComponent, _visualizationComponents_MapComponent_map_plugin_component__WEBPACK_IMPORTED_MODULE_16__.MapComponent, TestedComponent, _shared_dnd_directive__WEBPACK_IMPORTED_MODULE_17__.DndDirective, _visualizationComponents_PhylogeneticComponent_phylogenetic_plugin_component__WEBPACK_IMPORTED_MODULE_12__.PhylogeneticComponent], + imports: [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_20__.BrowserModule, _angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_21__.BrowserAnimationsModule, _app_routing_module__WEBPACK_IMPORTED_MODULE_0__.AppRoutingModule, //ngCommon.CommonModule, - _angular_forms__WEBPACK_IMPORTED_MODULE_24__.FormsModule, + _angular_forms__WEBPACK_IMPORTED_MODULE_22__.FormsModule, // GoldenLayoutModule.forRoot(config), - _angular_common_http__WEBPACK_IMPORTED_MODULE_25__.HttpClientModule, _angular_material_button__WEBPACK_IMPORTED_MODULE_26__.MatButtonModule, _angular_material_input__WEBPACK_IMPORTED_MODULE_27__.MatInputModule, _angular_material_menu__WEBPACK_IMPORTED_MODULE_28__.MatMenuModule, _angular_material_slider__WEBPACK_IMPORTED_MODULE_29__.MatSliderModule, _angular_material_toolbar__WEBPACK_IMPORTED_MODULE_30__.MatToolbarModule, _angular_material_select__WEBPACK_IMPORTED_MODULE_31__.MatSelectModule, _angular_material_progress_spinner__WEBPACK_IMPORTED_MODULE_32__.MatProgressSpinnerModule, _angular_material_icon__WEBPACK_IMPORTED_MODULE_33__.MatIconModule, _angular_common_http__WEBPACK_IMPORTED_MODULE_25__.HttpClientJsonpModule, ngx_bootstrap__WEBPACK_IMPORTED_MODULE_4__.ModalModule.forRoot(), ngx_bootstrap__WEBPACK_IMPORTED_MODULE_4__.TooltipModule.forRoot(), ngx_bootstrap__WEBPACK_IMPORTED_MODULE_4__.TabsModule.forRoot(), ngx_bootstrap__WEBPACK_IMPORTED_MODULE_4__.BsDropdownModule.forRoot(), ngx_bootstrap__WEBPACK_IMPORTED_MODULE_4__.PopoverModule.forRoot(), primeng_fileupload__WEBPACK_IMPORTED_MODULE_34__.FileUploadModule, + _angular_common_http__WEBPACK_IMPORTED_MODULE_23__.HttpClientModule, _angular_material_button__WEBPACK_IMPORTED_MODULE_24__.MatButtonModule, _angular_material_input__WEBPACK_IMPORTED_MODULE_25__.MatInputModule, _angular_material_menu__WEBPACK_IMPORTED_MODULE_26__.MatMenuModule, _angular_material_slider__WEBPACK_IMPORTED_MODULE_27__.MatSliderModule, _angular_material_toolbar__WEBPACK_IMPORTED_MODULE_28__.MatToolbarModule, _angular_material_select__WEBPACK_IMPORTED_MODULE_29__.MatSelectModule, _angular_material_progress_spinner__WEBPACK_IMPORTED_MODULE_30__.MatProgressSpinnerModule, _angular_material_icon__WEBPACK_IMPORTED_MODULE_31__.MatIconModule, _angular_common_http__WEBPACK_IMPORTED_MODULE_23__.HttpClientJsonpModule, ngx_bootstrap__WEBPACK_IMPORTED_MODULE_4__.ModalModule.forRoot(), ngx_bootstrap__WEBPACK_IMPORTED_MODULE_4__.TooltipModule.forRoot(), ngx_bootstrap__WEBPACK_IMPORTED_MODULE_4__.TabsModule.forRoot(), ngx_bootstrap__WEBPACK_IMPORTED_MODULE_4__.BsDropdownModule.forRoot(), ngx_bootstrap__WEBPACK_IMPORTED_MODULE_4__.PopoverModule.forRoot(), primeng_fileupload__WEBPACK_IMPORTED_MODULE_32__.FileUploadModule, // AbpModule, _app_routing_module__WEBPACK_IMPORTED_MODULE_0__.AppRoutingModule, _shared_utils_utils_module__WEBPACK_IMPORTED_MODULE_3__.UtilsModule, //AppCommonModule.forRoot(), // ServiceProxyModule, - primeng_table__WEBPACK_IMPORTED_MODULE_35__.TableModule, primeng_listbox__WEBPACK_IMPORTED_MODULE_36__.ListboxModule, primeng_radiobutton__WEBPACK_IMPORTED_MODULE_37__.RadioButtonModule, primeng_calendar__WEBPACK_IMPORTED_MODULE_38__.CalendarModule, primeng_paginator__WEBPACK_IMPORTED_MODULE_39__.PaginatorModule, + primeng_table__WEBPACK_IMPORTED_MODULE_33__.TableModule, primeng_listbox__WEBPACK_IMPORTED_MODULE_34__.ListboxModule, primeng_radiobutton__WEBPACK_IMPORTED_MODULE_35__.RadioButtonModule, primeng_calendar__WEBPACK_IMPORTED_MODULE_36__.CalendarModule, primeng_paginator__WEBPACK_IMPORTED_MODULE_37__.PaginatorModule, //PrimeNgFileUploadModule, - primeng_progressbar__WEBPACK_IMPORTED_MODULE_40__.ProgressBarModule, + primeng_progressbar__WEBPACK_IMPORTED_MODULE_38__.ProgressBarModule, //PerfectScrollbarModule, - _metronic_app_core_core_module__WEBPACK_IMPORTED_MODULE_15__.CoreModule, + _metronic_app_core_core_module__WEBPACK_IMPORTED_MODULE_14__.CoreModule, //NgxChartsModule, //TextMaskModule, //ImageCropperModule, - primeng_confirmdialog__WEBPACK_IMPORTED_MODULE_41__.ConfirmDialogModule, primeng_dropdown__WEBPACK_IMPORTED_MODULE_42__.DropdownModule, primeng_tabview__WEBPACK_IMPORTED_MODULE_43__.TabViewModule, primeng_selectbutton__WEBPACK_IMPORTED_MODULE_44__.SelectButtonModule, primeng_tree__WEBPACK_IMPORTED_MODULE_45__.TreeModule, primeng_dialog__WEBPACK_IMPORTED_MODULE_46__.DialogModule, primeng_accordion__WEBPACK_IMPORTED_MODULE_47__.AccordionModule, primeng_sidebar__WEBPACK_IMPORTED_MODULE_48__.SidebarModule, primeng_multiselect__WEBPACK_IMPORTED_MODULE_49__.MultiSelectModule, primeng_slider__WEBPACK_IMPORTED_MODULE_50__.SliderModule, _asymmetrik_ngx_leaflet__WEBPACK_IMPORTED_MODULE_51__.LeafletModule, _asymmetrik_ngx_leaflet_markercluster__WEBPACK_IMPORTED_MODULE_52__.LeafletMarkerClusterModule], - exports: [primeng_selectbutton__WEBPACK_IMPORTED_MODULE_44__.SelectButtonModule], + primeng_confirmdialog__WEBPACK_IMPORTED_MODULE_39__.ConfirmDialogModule, primeng_dropdown__WEBPACK_IMPORTED_MODULE_40__.DropdownModule, primeng_tabview__WEBPACK_IMPORTED_MODULE_41__.TabViewModule, primeng_selectbutton__WEBPACK_IMPORTED_MODULE_42__.SelectButtonModule, primeng_tree__WEBPACK_IMPORTED_MODULE_43__.TreeModule, primeng_dialog__WEBPACK_IMPORTED_MODULE_44__.DialogModule, primeng_accordion__WEBPACK_IMPORTED_MODULE_45__.AccordionModule, primeng_sidebar__WEBPACK_IMPORTED_MODULE_46__.SidebarModule, primeng_multiselect__WEBPACK_IMPORTED_MODULE_47__.MultiSelectModule, primeng_slider__WEBPACK_IMPORTED_MODULE_48__.SliderModule, _asymmetrik_ngx_leaflet__WEBPACK_IMPORTED_MODULE_49__.LeafletModule, _asymmetrik_ngx_leaflet_markercluster__WEBPACK_IMPORTED_MODULE_50__.LeafletMarkerClusterModule], + exports: [primeng_selectbutton__WEBPACK_IMPORTED_MODULE_42__.SelectButtonModule], providers: [_shared_common_session_app_session_service__WEBPACK_IMPORTED_MODULE_8__.AppSessionService, _shared_common_ui_app_ui_customization_service__WEBPACK_IMPORTED_MODULE_9__.AppUiCustomizationService, _shared_common_nav_app_url_service__WEBPACK_IMPORTED_MODULE_10__.AppUrlService, _golden_layout_component_service__WEBPACK_IMPORTED_MODULE_5__.GoldenLayoutComponentService], bootstrap: [_app_component__WEBPACK_IMPORTED_MODULE_1__.AppComponent] })], AppModule); @@ -265,11 +261,6 @@ let BaseComponentDirective = (_class = class BaseComponentDirective { setZIndex(value) { this.rootHtmlElement.style.zIndex = value; } - /** - * Convert a number to a string and adds 'px' at end of the string - * @param value a number to be converted into string - * @returns the string - */ numberToPixels(value) { return value.toString(10) + 'px'; } @@ -3526,11 +3517,6 @@ let FilesComponent = (_class = class FilesComponent extends _app_base_component_ this.edgeIds = []; this.uniqueNodes = []; this.uniqueEdgeNodes = []; - /** - * Updates SelectedDefaultDistanceThresholdVariable, microbeTrace.SelectedLinkThresholdVariable, and link-threshold widget values. - * Then calls microbeTrace.onLinkThresholdChanged clusters, nodes, and links as well as visualizations and statistics - * @param {string} e string representation of link threshold such as '16' - */ this.onLinkThresholdChange = e => { if (this.commonService.debugMode) { console.log('changing link threshold'); @@ -3540,11 +3526,6 @@ let FilesComponent = (_class = class FilesComponent extends _app_base_component_ this.visuals.microbeTrace.commonService.session.style.widgets['link-threshold'] = parseFloat(e); this.visuals.microbeTrace.onLinkThresholdChanged(); }; - /** - * Updates this.SelectedDefaultDistanceMetricVariable, microbeTrace.SelectedDistanceMetricVariable, and default-distance-metric widget. - * Updates link-threshold variable to default values and updates clusters, nodes, links as well as visualizations and statitistics - * @param {string} e such as 'snps' - */ this.onDistanceMetricChange = e => { if (this.commonService.debugMode) { console.log('distance ch:', e); @@ -3571,7 +3552,6 @@ let FilesComponent = (_class = class FilesComponent extends _app_base_component_ }; // this.title = this.container.title; this.id = this.container.parent.id; - // sets container.stateRequestEvent to a function that returns "state is here" this.container.stateRequestEvent = () => this.handleContainerStateRequestEvent(); const state = this.container.initialState; // let color: string; @@ -3607,7 +3587,6 @@ let FilesComponent = (_class = class FilesComponent extends _app_base_component_ this.processFile(); }); } - // TODO: the rest of ngOnInit can be revised to take advantage of angular features $('.alignConfigRow').hide(); $('#align-sw').parent().on('click', () => { this.visuals.microbeTrace.commonService.session.style.widgets['align-sw'] = true; @@ -3847,9 +3826,7 @@ let FilesComponent = (_class = class FilesComponent extends _app_base_component_ }, 2000); // console.log('session: ', this.commonService?.session?.files, this.commonService.session.files.length); } - /** - * For each file in commonService.session.files, addToTable(file) - */ + populateTable() { const fileTableRows = $(".file-table-row"); fileTableRows.slideUp(() => fileTableRows.remove()); @@ -3863,11 +3840,6 @@ let FilesComponent = (_class = class FilesComponent extends _app_base_component_ } }, 500); } - /** - * Toggles the value of multiple variables associated with sequence setting audit including: - * SelectedAuditEmptyVariable, SelectedAuditGapsVariable, SelectedAuditRNAVariable, - * SelectedAuditAminoAcidsVariable, SelectedAuditCIGARVariable, SelectedAuditMalformedVariable - */ toglleAll() { this.SelectedAuditEmptyVariable = !this.SelectedAuditEmptyVariable; this.SelectedAuditGapsVariable = !this.SelectedAuditGapsVariable; @@ -3876,36 +3848,19 @@ let FilesComponent = (_class = class FilesComponent extends _app_base_component_ this.SelectedAuditCIGARVariable = !this.SelectedAuditCIGARVariable; this.SelectedAuditMalformedVariable = !this.SelectedAuditMalformedVariable; } - /** - * XXXXX - */ run() {} - /** - * Updates isDataAvaible variable based on if any nodes under commonService.session.data - * - * XXXXX not used XXXXX - */ InitView() { this.IsDataAvailable = this.visuals.microbeTrace.commonService.session.data.nodes.length === 0 ? false : true; } - /** - * @returns {string} "state is here" - */ handleContainerStateRequestEvent() { return "state is here"; } - /** - * Updated default-view widget and localStorageService - */ changeDefaultView(e) { const v = e.target.selectedOptions[0].innerText; this.visuals.microbeTrace.commonService.localStorageService.setItem('default-view', v); this.visuals.microbeTrace.commonService.session.style.widgets['default-view'] = v; this.visuals.microbeTrace.commonService.session.layout.content[0].type = v; } - /** - * Opens/Closes the settings window - */ openSettings() { this.displayFileSettings = !this.displayFileSettings; } @@ -3914,17 +3869,9 @@ let FilesComponent = (_class = class FilesComponent extends _app_base_component_ openPinAllNodes() {} openRefreshScreen() {} openSelectDataSetScreen() {} - /** - * Opens/Closes Sequence Controls modal/dialog box - */ showSequenceSettings() { this.displaySequenceSettings = !this.displaySequenceSettings; } - /** - * Sets commonService.session.messages and this.messages to empty arrays []. Clears and closes loading-information modal. - * Emits a LoadDefaultVisualizationEvent. - * @param e - */ loadDefaultVisualization(e) { setTimeout(() => { this.visuals.microbeTrace.commonService.session.messages = []; @@ -3935,21 +3882,11 @@ let FilesComponent = (_class = class FilesComponent extends _app_base_component_ }, 1000); this.LoadDefaultVisualizationEvent.emit(e); } - /** - * Adds msg to this.messages and commonService.session.messages. - * Updates messages on loading-information modal based on commonService.session.message - * @param {string} msg message to add to messages arrays - */ showMessage(msg) { this.messages.push(msg); this.visuals.microbeTrace.commonService.session.messages.push(msg); $('#loading-information').html(this.visuals.microbeTrace.commonService.session.messages.join('
')); } - /** - * Resets the value of session.data, temp.trees if previously launched (or more if not previously launched). Retains the values of following - * widgets: link-threshold, default-distance-metric, ambiguity-resolution-strategy, and default view. - * Calls creatLaunchSequences to process the data files loaded. - */ launchClick() { const thresholdOnLaunch = this.visuals.microbeTrace.commonService.session.style.widgets["link-threshold"]; const metricOnLaunch = this.visuals.microbeTrace.commonService.session.style.widgets["default-distance-metric"]; @@ -3958,7 +3895,7 @@ let FilesComponent = (_class = class FilesComponent extends _app_base_component_ if (this.commonService.session.network.launched) { this.visuals.microbeTrace.commonService.session.data = this.visuals.microbeTrace.commonService.sessionSkeleton().data; const newTempSkeleton = this.visuals.microbeTrace.commonService.tempSkeleton(); - this.visuals.microbeTrace.commonService.temp.trees = newTempSkeleton.trees; + this.visuals.microbeTrace.commonService.temp.tress = newTempSkeleton.trees; $('#launch').text('Update'); } else if (!this.commonService.session.network.launched) { this.visuals.microbeTrace.commonService.resetData(); @@ -3977,10 +3914,6 @@ let FilesComponent = (_class = class FilesComponent extends _app_base_component_ this.creatLaunchSequences(); }, 1000); } - /** - * Processes all files in following order (auspice, newick, matrix, link, node, fasta). - * Adds/Updates nodes and links. After processing all files, calls processData. - */ creatLaunchSequences() { this.visuals.microbeTrace.commonService.session.meta.startTime = Date.now(); $('#launch').prop('disabled', true); @@ -3991,7 +3924,6 @@ let FilesComponent = (_class = class FilesComponent extends _app_base_component_ }, 20000); const nFiles = this.visuals.microbeTrace.commonService.session.files.length - 1; const check = nFiles > 0; - // sorts files based on hierarchy const hierarchy = ['auspice', 'newick', 'matrix', 'link', 'node', 'fasta']; this.visuals.microbeTrace.commonService.session.files.sort((a, b) => hierarchy.indexOf(a.format) - hierarchy.indexOf(b.format)); this.visuals.microbeTrace.commonService.session.meta.anySequences = this.visuals.microbeTrace.commonService.session.files.some(file => file.format === "fasta" || file.format === "node" && file.field2 !== "None"); @@ -4074,15 +4006,10 @@ let FilesComponent = (_class = class FilesComponent extends _app_base_component_ let l = 0; let sources = []; let targets = []; - /** - * Processes and then adds link. updates value of l - * @param {object} link - */ let forEachLink = link => { const keys = Object.keys(link); const n = keys.length; let safeLink = {}; - // for each key in link object for (let i = 0; i < n; i++) { let key = this.visuals.microbeTrace.commonService.filterXSS(keys[i]); // console.log('key is: ',key); @@ -4158,7 +4085,6 @@ let FilesComponent = (_class = class FilesComponent extends _app_base_component_ t = 0; let nodeIDs = []; const k = data.length; - // for each line or excel file, check if node exist, if not add it for (let i = 0; i < k; i++) { const l = data[i]; const f1 = l[file.field1]; @@ -4199,7 +4125,6 @@ let FilesComponent = (_class = class FilesComponent extends _app_base_component_ totalNodes = 0; const n = data.length; let nodeIDs = []; - // for each object in json, check if node exist, if not add it for (let i = 0; i < n; i++) { const l = data[i]; const f1 = l[file.field1]; @@ -4437,10 +4362,6 @@ let FilesComponent = (_class = class FilesComponent extends _app_base_component_ } }); } - /** - * Adds links for nodes with no edge? - * Then calls processSequence - */ processData() { let nodes = this.visuals.microbeTrace.commonService.session.data.nodes; if (this.commonService.debugMode) { @@ -4459,9 +4380,6 @@ let FilesComponent = (_class = class FilesComponent extends _app_base_component_ }); this.processSequence(); } - /** - * If sequences are present, processes them by aligning if needed, computing consensus, consensus distances, ambiguity counts, and then links - */ processSequence() { var _this = this; return (0,C_Users_ryf7_Desktop_MicrobeTrace_node_modules_angular_devkit_build_angular_node_modules_babel_runtime_helpers_esm_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function* () { @@ -4514,10 +4432,6 @@ let FilesComponent = (_class = class FilesComponent extends _app_base_component_ _this.showMessage("Finishing..."); })(); } - /** - * XXXXX not currently used; if implemented in future switch open parameter to boolean XXXXX - * @param open 0 or 1 - */ accordianToggle(open) { if (open) { $(".m-content").css("overflow-y", "auto"); @@ -4525,10 +4439,6 @@ let FilesComponent = (_class = class FilesComponent extends _app_base_component_ $(".m-content").css("overflow-y", "hidden"); } } - /** - * When a new file/files are add, each one if processed by processFile - * @param files - */ processFiles(files) { this.isLoadingFiles = true; if (Array.from(files).length > 0) { @@ -4543,14 +4453,6 @@ let FilesComponent = (_class = class FilesComponent extends _app_base_component_ this.isLoadingFiles = false; }, 2000); } - /** - * Gets file extension and calls appropriate function to load info into MicrobeTrace. - * For example, for json files commonService.processJSON is used. - * Adds file to commonService.session.files and adds file to table with this.addToTable - * - * XXXXX Currrently unable to load zip files XXXXX - * @returns - */ processFile(rawfile) { if (!rawfile) { rawfile = this.visuals.microbeTrace.commonService.session.files[0]; @@ -4618,10 +4520,6 @@ let FilesComponent = (_class = class FilesComponent extends _app_base_component_ this.addToTable(file); }); } - /** - * Removes all files from commonService.session.files, sets this.nodeIds and this.edgeIds to empty arrays []. - * Calls nodeEdgeCheck - */ removeAllFiles() { const fileTableRows = $(".file-table-row"); fileTableRows.slideUp(() => fileTableRows.remove()); @@ -4630,9 +4528,6 @@ let FilesComponent = (_class = class FilesComponent extends _app_base_component_ this.edgeIds = []; this.nodeEdgeCheck(); } - /** - * Gets information from file about extension, file type, and header and uses that information to addTableTile for file-table - */ addToTable(file) { if (this.commonService.debugMode) { console.log(file); @@ -4693,9 +4588,6 @@ let FilesComponent = (_class = class FilesComponent extends _app_base_component_ } //For the love of all that's good... //TODO: Rewrite this as a [Web Component](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements) or [something](https://reactjs.org/docs/react-component.html) or something. - /** - * Adds a file-table-row for the file. - */ function addTableTile(headers, context) { console.log(headers); let parentContext = context; @@ -4807,9 +4699,6 @@ let FilesComponent = (_class = class FilesComponent extends _app_base_component_ refit(); } } - /** - * Updates commonService.session.files info, such as field1, field2 ...etc, based on value user selects - */ updateMetadata(file) { $('#file-panel .file-table-row').each((i, el) => { const $el = $(el); @@ -4825,9 +4714,6 @@ let FilesComponent = (_class = class FilesComponent extends _app_base_component_ } }); } - /** - * Populates this.nodeIds - */ loadNodes(fileName, output, isJson) { if (isJson) { const data = output; @@ -4851,9 +4737,6 @@ let FilesComponent = (_class = class FilesComponent extends _app_base_component_ } } } - /** - * Populated this.edgeIds - */ loadEdges(fileName, output, isJson) { if (isJson) { const data = output; @@ -4889,17 +4772,12 @@ let FilesComponent = (_class = class FilesComponent extends _app_base_component_ } } } - /** - * Updates this.uniqueEdgeNodes and this.uniqueNodes - */ nodeEdgeCheck() { - // populated with a string[] of unique node ids let allNodesListNodes = []; this.nodeIds.forEach(x => { x.ids.forEach(y => allNodesListNodes.push(y)); }); allNodesListNodes = lodash__WEBPACK_IMPORTED_MODULE_11__.uniq(allNodesListNodes); - // populated with a string[] of unique node ids that have a link/edge let allEdgeListNodes = []; this.edgeIds.forEach(x => x.ids.forEach(y => { allEdgeListNodes.push(y.source); @@ -4909,21 +4787,11 @@ let FilesComponent = (_class = class FilesComponent extends _app_base_component_ this.uniqueEdgeNodes = allEdgeListNodes.filter(x => x && !allNodesListNodes.some(y => y == x)); this.uniqueNodes = allNodesListNodes.filter(x => x && !this.uniqueEdgeNodes.some(y => y == x)); } - /** - * Removes elements of this.nodeIds and this.edgeIds where the fileName == fileName and then calls nodeEdgeCheck to update uniqueEdgeNodes and uniqueNodes - * @param fileName - */ removeFile(fileName) { this.nodeIds = this.nodeIds.filter(x => x.fileName != fileName); this.edgeIds = this.edgeIds.filter(x => x.fileName != fileName); this.nodeEdgeCheck(); } - /** - * Async function that reads sequencing data from fasta files - * - * XXXXX Not currently working with sequences from csv file XXXXX - * @returns An array of sequencing objects [{id, seq},] - */ readFastas() { var _this2 = this; return (0,C_Users_ryf7_Desktop_MicrobeTrace_node_modules_angular_devkit_build_angular_node_modules_babel_runtime_helpers_esm_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function* () { @@ -5016,17 +4884,9 @@ let GoldenLayoutComponentService = (_class = class GoldenLayoutComponentService this.componentFactoryResolver = componentFactoryResolver; this._componentTypeMap = new Map(); } - /** - * Adds a new element with a specified key and value to the Map (_componentTypeMap). If an element with the same key already exists, the element will be updated. - * It doesn't make new view, just registers the view/component with goldenLayout map (_componentTypeMap). - */ registerComponentType(name, componentType) { this._componentTypeMap.set(name, componentType); } - /** - * XXXXX Never called in codebase XXXXX - * @returns an array of registered components - */ getRegisteredComponentTypeNames() { const count = this._componentTypeMap.size; const result = new Array(count); @@ -5073,19 +4933,17 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "GoldenLayoutHostComponent": () => (/* binding */ GoldenLayoutHostComponent) /* harmony export */ }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! tslib */ 70655); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! tslib */ 70655); /* harmony import */ var C_Users_ryf7_Desktop_MicrobeTrace_src_app_golden_layout_host_component_ts_css_ngResource_C_Users_ryf7_Desktop_MicrobeTrace_node_modules_ngtools_webpack_src_loaders_inline_resource_js_data_CiAgICA6aG9zdCB7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIHBhZGRpbmc6IDA7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CiAgICA_3D_C_Users_ryf7_Desktop_MicrobeTrace_src_app_golden_layout_host_component_ts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./src/app/golden-layout-host.component.ts.css?ngResource!=!./node_modules/@ngtools/webpack/src/loaders/inline-resource.js?data=CiAgICA6aG9zdCB7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIHBhZGRpbmc6IDA7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CiAgICA%3D!./src/app/golden-layout-host.component.ts */ 91874); /* harmony import */ var C_Users_ryf7_Desktop_MicrobeTrace_src_app_golden_layout_host_component_ts_css_ngResource_C_Users_ryf7_Desktop_MicrobeTrace_node_modules_ngtools_webpack_src_loaders_inline_resource_js_data_CiAgICA6aG9zdCB7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIHBhZGRpbmc6IDA7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CiAgICA_3D_C_Users_ryf7_Desktop_MicrobeTrace_src_app_golden_layout_host_component_ts__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(C_Users_ryf7_Desktop_MicrobeTrace_src_app_golden_layout_host_component_ts_css_ngResource_C_Users_ryf7_Desktop_MicrobeTrace_node_modules_ngtools_webpack_src_loaders_inline_resource_js_data_CiAgICA6aG9zdCB7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIHBhZGRpbmc6IDA7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CiAgICA_3D_C_Users_ryf7_Desktop_MicrobeTrace_src_app_golden_layout_host_component_ts__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @angular/core */ 94650); -/* harmony import */ var golden_layout__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! golden-layout */ 13761); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @angular/core */ 94650); +/* harmony import */ var golden_layout__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! golden-layout */ 13761); /* harmony import */ var _golden_layout_component_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./golden-layout-component.service */ 90893); /* harmony import */ var _filesComponent_files_plugin_component__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./filesComponent/files-plugin.component */ 53710); /* harmony import */ var _visualizationComponents_MapComponent_map_plugin_component__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./visualizationComponents/MapComponent/map-plugin.component */ 53605); /* harmony import */ var _visualizationComponents_PhylogeneticComponent_phylogenetic_plugin_component__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./visualizationComponents/PhylogeneticComponent/phylogenetic-plugin.component */ 23046); -/* harmony import */ var _visualizationComponents_TimelineComponent_timeline_component_component__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./visualizationComponents/TimelineComponent/timeline-component.component */ 18011); -/* harmony import */ var _visualizationComponents_TableComponent_table_plugin_component__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./visualizationComponents/TableComponent/table-plugin-component */ 31209); -/* harmony import */ var _visualizationComponents_TwoDComponent_twoD_plugin_component__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./visualizationComponents/TwoDComponent/twoD-plugin.component */ 36481); -/* harmony import */ var _visualizationComponents_AlignmentViewComponent_alignment_view_plugin_component__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./visualizationComponents/AlignmentViewComponent/alignment-view-plugin-component */ 37536); +/* harmony import */ var _visualizationComponents_TableComponent_table_plugin_component__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./visualizationComponents/TableComponent/table-plugin-component */ 31209); +/* harmony import */ var _visualizationComponents_TwoDComponent_twoD_plugin_component__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./visualizationComponents/TwoDComponent/twoD-plugin.component */ 36481); var _class; @@ -5097,8 +4955,6 @@ var _class; - - let GoldenLayoutHostComponent = (_class = class GoldenLayoutHostComponent { get goldenLayout() { return this._goldenLayout; @@ -5122,22 +4978,20 @@ let GoldenLayoutHostComponent = (_class = class GoldenLayoutHostComponent { this._goldenLayoutBoundingClientRect = new DOMRect(); this._goldenLayoutBindComponentEventListener = (container, itemConfig) => this.handleBindComponentEvent(container, itemConfig); this._goldenLayoutUnbindComponentEventListener = container => this.handleUnbindComponentEvent(container); - this.TabRemovedEvent = new _angular_core__WEBPACK_IMPORTED_MODULE_9__.EventEmitter(); - this.TabChangedEvent = new _angular_core__WEBPACK_IMPORTED_MODULE_9__.EventEmitter(); + this.TabRemovedEvent = new _angular_core__WEBPACK_IMPORTED_MODULE_7__.EventEmitter(); + this.TabChangedEvent = new _angular_core__WEBPACK_IMPORTED_MODULE_7__.EventEmitter(); this._goldenLayoutElement = this._elRef.nativeElement; this.goldenLayoutComponentService.registerComponentType(_filesComponent_files_plugin_component__WEBPACK_IMPORTED_MODULE_2__.FilesComponent.componentTypeName, _filesComponent_files_plugin_component__WEBPACK_IMPORTED_MODULE_2__.FilesComponent); - this.goldenLayoutComponentService.registerComponentType(_visualizationComponents_TwoDComponent_twoD_plugin_component__WEBPACK_IMPORTED_MODULE_7__.TwoDComponent.componentTypeName, _visualizationComponents_TwoDComponent_twoD_plugin_component__WEBPACK_IMPORTED_MODULE_7__.TwoDComponent); - this.goldenLayoutComponentService.registerComponentType(_visualizationComponents_TableComponent_table_plugin_component__WEBPACK_IMPORTED_MODULE_6__.TableComponent.componentTypeName, _visualizationComponents_TableComponent_table_plugin_component__WEBPACK_IMPORTED_MODULE_6__.TableComponent); + this.goldenLayoutComponentService.registerComponentType(_visualizationComponents_TwoDComponent_twoD_plugin_component__WEBPACK_IMPORTED_MODULE_6__.TwoDComponent.componentTypeName, _visualizationComponents_TwoDComponent_twoD_plugin_component__WEBPACK_IMPORTED_MODULE_6__.TwoDComponent); + this.goldenLayoutComponentService.registerComponentType(_visualizationComponents_TableComponent_table_plugin_component__WEBPACK_IMPORTED_MODULE_5__.TableComponent.componentTypeName, _visualizationComponents_TableComponent_table_plugin_component__WEBPACK_IMPORTED_MODULE_5__.TableComponent); this.goldenLayoutComponentService.registerComponentType(_visualizationComponents_MapComponent_map_plugin_component__WEBPACK_IMPORTED_MODULE_3__.MapComponent.componentTypeName, _visualizationComponents_MapComponent_map_plugin_component__WEBPACK_IMPORTED_MODULE_3__.MapComponent); this.goldenLayoutComponentService.registerComponentType(_visualizationComponents_PhylogeneticComponent_phylogenetic_plugin_component__WEBPACK_IMPORTED_MODULE_4__.PhylogeneticComponent.componentTypeName, _visualizationComponents_PhylogeneticComponent_phylogenetic_plugin_component__WEBPACK_IMPORTED_MODULE_4__.PhylogeneticComponent); - this.goldenLayoutComponentService.registerComponentType(_visualizationComponents_TimelineComponent_timeline_component_component__WEBPACK_IMPORTED_MODULE_5__.TimelineComponent.componentTypeName, _visualizationComponents_TimelineComponent_timeline_component_component__WEBPACK_IMPORTED_MODULE_5__.TimelineComponent); - this.goldenLayoutComponentService.registerComponentType(_visualizationComponents_AlignmentViewComponent_alignment_view_plugin_component__WEBPACK_IMPORTED_MODULE_8__.AlignmentViewComponent.componentTypeName, _visualizationComponents_AlignmentViewComponent_alignment_view_plugin_component__WEBPACK_IMPORTED_MODULE_8__.AlignmentViewComponent); } ngOnDestroy() { this._goldenLayout.destroy(); } initialise() { - this._goldenLayout = new golden_layout__WEBPACK_IMPORTED_MODULE_10__.GoldenLayout(this._goldenLayoutElement, this._goldenLayoutBindComponentEventListener, this._goldenLayoutUnbindComponentEventListener); + this._goldenLayout = new golden_layout__WEBPACK_IMPORTED_MODULE_8__.GoldenLayout(this._goldenLayoutElement, this._goldenLayoutBindComponentEventListener, this._goldenLayoutUnbindComponentEventListener); this._goldenLayout.resizeWithContainerAutomatically = true; this._goldenLayout.beforeVirtualRectingEvent = count => this.handleBeforeVirtualRectingEvent(count); if (this._goldenLayout.isSubWindow) { @@ -5279,31 +5133,31 @@ let GoldenLayoutHostComponent = (_class = class GoldenLayoutHostComponent { this.TabChangedEvent.emit(contentItem._title); } }, _class.ctorParameters = () => [{ - type: _angular_core__WEBPACK_IMPORTED_MODULE_9__.ApplicationRef + type: _angular_core__WEBPACK_IMPORTED_MODULE_7__.ApplicationRef }, { - type: _angular_core__WEBPACK_IMPORTED_MODULE_9__.ElementRef + type: _angular_core__WEBPACK_IMPORTED_MODULE_7__.ElementRef }, { type: _golden_layout_component_service__WEBPACK_IMPORTED_MODULE_1__.GoldenLayoutComponentService }], _class.propDecorators = { _componentViewContainerRef: [{ - type: _angular_core__WEBPACK_IMPORTED_MODULE_9__.ViewChild, + type: _angular_core__WEBPACK_IMPORTED_MODULE_7__.ViewChild, args: ['componentViewContainer', { - read: _angular_core__WEBPACK_IMPORTED_MODULE_9__.ViewContainerRef, + read: _angular_core__WEBPACK_IMPORTED_MODULE_7__.ViewContainerRef, static: true }] }], TabRemovedEvent: [{ - type: _angular_core__WEBPACK_IMPORTED_MODULE_9__.Output + type: _angular_core__WEBPACK_IMPORTED_MODULE_7__.Output }], TabChangedEvent: [{ - type: _angular_core__WEBPACK_IMPORTED_MODULE_9__.Output + type: _angular_core__WEBPACK_IMPORTED_MODULE_7__.Output }] }, _class); -GoldenLayoutHostComponent = (0,tslib__WEBPACK_IMPORTED_MODULE_11__.__decorate)([(0,_angular_core__WEBPACK_IMPORTED_MODULE_9__.Component)({ +GoldenLayoutHostComponent = (0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([(0,_angular_core__WEBPACK_IMPORTED_MODULE_7__.Component)({ selector: 'app-golden-layout-host', template: '', styles: [(C_Users_ryf7_Desktop_MicrobeTrace_src_app_golden_layout_host_component_ts_css_ngResource_C_Users_ryf7_Desktop_MicrobeTrace_node_modules_ngtools_webpack_src_loaders_inline_resource_js_data_CiAgICA6aG9zdCB7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIHBhZGRpbmc6IDA7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CiAgICA_3D_C_Users_ryf7_Desktop_MicrobeTrace_src_app_golden_layout_host_component_ts__WEBPACK_IMPORTED_MODULE_0___default())] -}), (0,tslib__WEBPACK_IMPORTED_MODULE_11__.__metadata)("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_9__.ApplicationRef, _angular_core__WEBPACK_IMPORTED_MODULE_9__.ElementRef, _golden_layout_component_service__WEBPACK_IMPORTED_MODULE_1__.GoldenLayoutComponentService])], GoldenLayoutHostComponent); +}), (0,tslib__WEBPACK_IMPORTED_MODULE_9__.__metadata)("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_7__.ApplicationRef, _angular_core__WEBPACK_IMPORTED_MODULE_7__.ElementRef, _golden_layout_component_service__WEBPACK_IMPORTED_MODULE_1__.GoldenLayoutComponentService])], GoldenLayoutHostComponent); /***/ }), @@ -6120,10 +5974,6 @@ let MicrobeTraceNextHomeComponent = (_class = class MicrobeTraceNextHomeComponen this.HideThisForNow = false; this.files = []; this.homepageTabs = []; - /** - * Updates default-distance-metric widget and this.SelectedLinkThresholdVariable (16 for snps, 0.015 for TN93). - * Calls onLinkThresholdChanged to updated links - */ this.onDistanceMetricChanged = () => { if (this.SelectedDistanceMetricVariable.toLowerCase() === 'snps') { $('#default-distance-threshold, #link-threshold').attr('step', 1).val(16).trigger('change'); @@ -6274,10 +6124,6 @@ let MicrobeTraceNextHomeComponent = (_class = class MicrobeTraceNextHomeComponen this.loadSettings(); }); } - /** - * Removes a component from this.homepageTabs - * @param component name of the component to be removed - */ removeComponent(component) { this.homepageTabs = this.homepageTabs.filter(tab => { return tab.label !== component; @@ -6290,12 +6136,8 @@ let MicrobeTraceNextHomeComponent = (_class = class MicrobeTraceNextHomeComponen deleteFile(index) { this.files.splice(index, 1); } - /** - * Uses search-field, search-whole-word, search-case-sensitive widgets, and searchText variable to search each node and select all nodes that meet current criteria. - * Also populates search-results list, and sets function that selects the node for when an option in the list is selected. - */ onSearch() { - let nodes = this.commonService.session.data.nodes; + let nodes = this.visuals.twoD.commonService.session.data.nodes; const n = nodes.length; let v = this.searchText; const val = v; @@ -6312,7 +6154,6 @@ let MicrobeTraceNextHomeComponent = (_class = class MicrobeTraceNextHomeComponen let node = nodes[i]; if (node[field]) { let fieldData = node[field].toString(); // Convert the data to string - // matches anything that is not a digit, letter, whitespace or one of following char < > & and replaces with corresponding HTML entity number const encodedField = fieldData.replace(/[\u00A0-\u9999<>\&]/g, function (i) { return '&#' + i.charCodeAt(0) + ';'; }); @@ -6331,7 +6172,6 @@ let MicrobeTraceNextHomeComponent = (_class = class MicrobeTraceNextHomeComponen } }); let that = this; - // on click of an option from the search list, the node is selected $('.autocomplete-wrapper li').on('click', function () { let ac_v = $(this).attr('data-value'); const ac_val = ac_v; @@ -6354,7 +6194,6 @@ let MicrobeTraceNextHomeComponent = (_class = class MicrobeTraceNextHomeComponen } $(document).trigger("node-selected"); }); - // selects that meets current search criteria for (let i = 0; i < n; i++) { let node = nodes[i]; if (!node[field]) { @@ -6371,23 +6210,14 @@ let MicrobeTraceNextHomeComponent = (_class = class MicrobeTraceNextHomeComponen } $(document).trigger("node-selected"); } - /** - * Updates search-field widget (with variable to search in) can updates search - */ onSearchFieldChange(ev) { this.commonService.session.style.widgets["search-field"] = ev; this.onSearch(); } - /** - * Updates search-whole-word widget can updates search - */ onWholeWordChange() { this.commonService.session.style.widgets["search-whole-word"] = !this.commonService.session.style.widgets["search-whole-word"]; this.onSearch(); } - /** - * Updates search-case-sensitive widget can updates search - */ onCaseSensitiveChange() { this.commonService.session.style.widgets["search-case-sensitive"] = !this.commonService.session.style.widgets["search-case-sensitive"]; this.onSearch(); @@ -6500,22 +6330,12 @@ let MicrobeTraceNextHomeComponent = (_class = class MicrobeTraceNextHomeComponen $('.ui-tabview-nav').fadeTo("slow", 1); $('.m-portlet').fadeTo("slow", 1); } - /** - * Updates background-color widget and then updates background color on twoD network (or any element with #network) - */ onBackgroundChanged() { this.visuals.microbeTrace.commonService.session.style.widgets['background-color'] = this.visuals.microbeTrace.SelectedBackgroundColorVariable; if ($('#network') != undefined) { $('#network').css('background-color', this.SelectedBackgroundColorVariable); } } - /** - * Updates GlobalSetingModel variable and cluster-minimum-size widget. Removes and adds clusters when needed - * - * XXXXX bug: when minimum cluster size is set to 9 in test dataset, the smallest cluster disappears as expected. When set to 8 it doesn't reappear. Have to - * value to 1 to get the small cluster to appear. Then even though the small clusters has links, the nodes within it are treated as different cluster (node color by cluster) - * and network statistics table; however link color by cluster treats them as one cluster. When you set cluster size to 2, the problem resolves. XXXXX - */ onMinimumClusterSizeChanged() { this.visuals.microbeTrace.commonService.GlobalSettingsModel.SelectedClusterMinimumSizeVariable = this.visuals.microbeTrace.SelectedClusterMinimumSizeVariable; let val = parseInt(this.visuals.microbeTrace.SelectedClusterMinimumSizeVariable); @@ -6537,20 +6357,12 @@ let MicrobeTraceNextHomeComponent = (_class = class MicrobeTraceNextHomeComponen this.visuals.microbeTrace.updatedVisualization(); }); } - /** - * Updates GlobalSettingsModel variable and link-sort-variable widget. Updates link threshold histogram and then updates network - */ onLinkSortChanged() { this.visuals.microbeTrace.commonService.GlobalSettingsModel.SelectedLinkSortVariable = this.visuals.microbeTrace.SelectedLinkSortVariable; this.visuals.microbeTrace.commonService.session.style.widgets["link-sort-variable"] = this.visuals.microbeTrace.SelectedLinkSortVariable; this.visuals.microbeTrace.commonService.updateThresholdHistogram(); this.visuals.microbeTrace.commonService.updateNetwork(); } - /** - * Reads the file and applies the style to MicrobeTrace session.style - * - * XXXXX Not currently executed in the code XXXXX - */ onApplyStyle(file) { if (this.commonService.debugMode) { console.log('applying style'); @@ -6615,9 +6427,7 @@ let MicrobeTraceNextHomeComponent = (_class = class MicrobeTraceNextHomeComponen // this.homepageTabs[this.visuals.microbeTrace.activeTabNdx].componentRef.enableSettings(); // } } - /** - * Updates node-color widget and published node color to each view to update them. Only relevant when color nodes by = None - */ + onNodeColorChanged() { let variable = this.SelectedNodeColorVariable; this.commonService.session.style.widgets["node-color"] = variable; @@ -6630,9 +6440,6 @@ let MicrobeTraceNextHomeComponent = (_class = class MicrobeTraceNextHomeComponen } }); } - /** - * Updates visualization for each view that is available - */ publishUpdateVisualization() { this.homepageTabs.forEach(tab => { if (tab.componentRef && tab.componentRef.instance.updateVisualization) { @@ -7061,10 +6868,7 @@ let MicrobeTraceNextHomeComponent = (_class = class MicrobeTraceNextHomeComponen return $(row).children('td').eq(index).text(); } } - /** - * Toggles the setting menu for node-color or link-color table. This menu allow users to show/hide counts and/or frequencies - * @param tableName 'node-color' or 'link-color' - */ + // toggles the setting menu for node-color or link-color table. toggleColorTableSettings(tableName) { let settingsPane; if (tableName == 'node-color') { @@ -7080,11 +6884,7 @@ let MicrobeTraceNextHomeComponent = (_class = class MicrobeTraceNextHomeComponen settingsPane.css('display', 'none'); } } - /** - * Updates the appropriate widget value and then updates the node-color or link-color table - * @param table 'node-color' or 'link-color' - * @param column 'tableCouts' or 'tableFreq' - */ + // updates the appropriate widget value (T->F or F->T) and then updates the node-color or link-color table toggleColorTableColumns(table, column) { if (table == 'node-color' && column == 'tableCounts') { this.widgets['node-color-table-counts'] = !this.widgets['node-color-table-counts']; @@ -7099,10 +6899,7 @@ let MicrobeTraceNextHomeComponent = (_class = class MicrobeTraceNextHomeComponen } this.updateCountFreqTable(table); } - /** - * Updates the node-color-table or link-color-table based on value of widgets; it doesn't recalculate anything; just shows/hide columns - * @param tableName 'node-color' or 'link-color' - */ + // updates the node-color-table or link-color-table based on value of widgets; it doesn't recalculate just shows/hide columns updateCountFreqTable(tableName) { let tableReferenceName, showCount, showFreq; if (tableName == 'node-color') { @@ -7119,11 +6916,6 @@ let MicrobeTraceNextHomeComponent = (_class = class MicrobeTraceNextHomeComponen showCount ? countColumn.slideDown() : countColumn.slideUp(); showFreq ? freqColumn.slideDown() : freqColumn.slideUp(); } - /** - * Updated link-threshold widget and this.threshold variable. Sets mst-computed widget to false. - * Updates clusters and cluster visibility, link visibility, and node visibility. Finallys updates - * visualizations and stastistics - */ onLinkThresholdChanged() { //debugger; this.commonService.GlobalSettingsModel.SelectedLinkThresholdVariable = this.SelectedLinkThresholdVariable; @@ -7195,11 +6987,6 @@ let MicrobeTraceNextHomeComponent = (_class = class MicrobeTraceNextHomeComponen this.commonService.session.style.widgets['background-color'] = this.SelectedBackgroundColorVariable; this.commonService.GlobalSettingsModel.SelectedApplyStyleVariable = this.SelectedApplyStyleVariable; } - /** - * this.visuals.microbeTrace.publishUpdateVisualization() - * - * XXXXX may need to be updated or trimmed (switch statement has no functionality) XXXXX - */ updatedVisualization() { this.visuals.microbeTrace.publishUpdateVisualization(); // console.log('active tab ind: ', this.homepageTabs,this.homepageTabs[this.activeTabIndex]); @@ -7242,9 +7029,6 @@ let MicrobeTraceNextHomeComponent = (_class = class MicrobeTraceNextHomeComponen this.SelectedLinkSortVariable = this.commonService.GlobalSettingsModel.SelectedLinkSortVariable; this.commonService.updateThresholdHistogram(); } - /** - * XXXXX no current use or functionality XXXXX - */ getUserRoles() { // this._userService.getUserForEdit(this.appSession.userId).subscribe(userResult => { // this.user = userResult.user; @@ -7255,9 +7039,6 @@ let MicrobeTraceNextHomeComponent = (_class = class MicrobeTraceNextHomeComponen // }); // }); } - /** - * XXXXX move XXXXX - */ ngAfterViewInit() { // let factory = this.cfr.resolveComponentFactory(FilesComponent); // this.cmpRef = this.targets.first.createComponent(factory); @@ -7310,7 +7091,7 @@ let MicrobeTraceNextHomeComponent = (_class = class MicrobeTraceNextHomeComponen this.removeComponent(v); }); this._goldenLayoutHostComponent.TabChangedEvent.subscribe(v => { - if (v === "Files" || v === "Epi Curve") { + if (v === "Files") { this.GlobalSettingsLinkColorDialogSettings.setVisibility(false); this.GlobalSettingsNodeColorDialogSettings.setVisibility(false); } else { @@ -8229,984 +8010,105 @@ let MicrobeTraceNextHomeComponent = (_class = class MicrobeTraceNextHomeComponen if (tab.componentRef && tab.componentRef.onLoadNewData) { tab.componentRef.onLoadNewData(); } - }); - } - publishFilterDataChange() { - // this.goldenLayout.componentInstances[1].onFilterDataChange(); - this.homepageTabs.forEach(tab => { - if (tab.componentRef && tab.componentRef.onFilterDataChange) { - tab.componentRef.onFilterDataChange(); - } - }); - } - ngOnDestroy() { - this.NewSession(); - } -}, _class.ctorParameters = () => [{ - type: _angular_core__WEBPACK_IMPORTED_MODULE_19__.Injector -}, { - type: _contactTraceCommonServices_common_service__WEBPACK_IMPORTED_MODULE_2__.CommonService -}, { - type: _golden_layout_component_service__WEBPACK_IMPORTED_MODULE_15__.GoldenLayoutComponentService -}, { - type: _angular_platform_browser__WEBPACK_IMPORTED_MODULE_21__.DomSanitizer -}, { - type: _angular_core__WEBPACK_IMPORTED_MODULE_19__.ChangeDetectorRef -}, { - type: _angular_core__WEBPACK_IMPORTED_MODULE_19__.ElementRef -}, { - type: _angular_core__WEBPACK_IMPORTED_MODULE_19__.Renderer2 -}, { - type: _shared_utils_event_emitter_service__WEBPACK_IMPORTED_MODULE_13__.EventEmitterService -}], _class.propDecorators = { - stashes: [{ - type: _angular_core__WEBPACK_IMPORTED_MODULE_19__.ViewChild, - args: ['stashes'] - }], - _goldenLayoutHostComponent: [{ - type: _angular_core__WEBPACK_IMPORTED_MODULE_19__.ViewChild, - args: ['goldenLayoutHost'] - }], - linkThresholdSparkline: [{ - type: _angular_core__WEBPACK_IMPORTED_MODULE_19__.ViewChild, - args: ['linkThresholdSparkline'] - }], - DisplayGlobalSettingsDialogEvent: [{ - type: _angular_core__WEBPACK_IMPORTED_MODULE_19__.Output - }], - dataSet: [{ - type: _angular_core__WEBPACK_IMPORTED_MODULE_19__.ViewChild, - args: ['dataSet'] - }], - targets: [{ - type: _angular_core__WEBPACK_IMPORTED_MODULE_19__.ViewChildren, - args: ['placeholder', { - read: _angular_core__WEBPACK_IMPORTED_MODULE_19__.ViewContainerRef - }] - }], - spinnerElement: [{ - type: _angular_core__WEBPACK_IMPORTED_MODULE_19__.ViewChild, - args: ['ledgerloader'] - }], - spinnerDivElement: [{ - type: _angular_core__WEBPACK_IMPORTED_MODULE_19__.ViewChild, - args: ['ledgerloadDiv'] - }], - globalSettingsTab: [{ - type: _angular_core__WEBPACK_IMPORTED_MODULE_19__.ViewChild, - args: ['globalSettingsTab'] - }], - pinBtn: [{ - type: _angular_core__WEBPACK_IMPORTED_MODULE_19__.ViewChild, - args: ['pinbutton'] - }] -}, _class); -MicrobeTraceNextHomeComponent = (0,tslib__WEBPACK_IMPORTED_MODULE_22__.__decorate)([(0,_angular_core__WEBPACK_IMPORTED_MODULE_19__.Component)({ - changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_19__.ChangeDetectionStrategy.Default, - selector: 'contact-trace', - encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_19__.ViewEncapsulation.None, - template: _microbe_trace_next_plugin_component_html_ngResource__WEBPACK_IMPORTED_MODULE_0__, - styles: [(_microbe_trace_next_plugin_component_less_ngResource__WEBPACK_IMPORTED_MODULE_1___default())] -}), (0,tslib__WEBPACK_IMPORTED_MODULE_22__.__metadata)("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_19__.Injector, _contactTraceCommonServices_common_service__WEBPACK_IMPORTED_MODULE_2__.CommonService, _golden_layout_component_service__WEBPACK_IMPORTED_MODULE_15__.GoldenLayoutComponentService, _angular_platform_browser__WEBPACK_IMPORTED_MODULE_21__.DomSanitizer, _angular_core__WEBPACK_IMPORTED_MODULE_19__.ChangeDetectorRef, _angular_core__WEBPACK_IMPORTED_MODULE_19__.ElementRef, _angular_core__WEBPACK_IMPORTED_MODULE_19__.Renderer2, _shared_utils_event_emitter_service__WEBPACK_IMPORTED_MODULE_13__.EventEmitterService])], MicrobeTraceNextHomeComponent); - -class BpaaSPayloadWrapper { - constructor() { - this.BlockHashCode = undefined; - this.BlockName = undefined; - this.BpaaSPayload = undefined; - this.FuzzyMatchRatios = undefined; - } -} -class BpaaSPayloadWrapperData { - constructor() { - this.Type = undefined; - this.SubType = undefined; - this.JurisdictionKey = undefined; - this.JurisdictionName = undefined; - this.Jurisdiction = undefined; - this.FileName = undefined; - this.Data = []; - } -} - -/***/ }), - -/***/ 37536: -/*!***************************************************************************************************!*\ - !*** ./src/app/visualizationComponents/AlignmentViewComponent/alignment-view-plugin-component.ts ***! - \***************************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "AlignmentViewComponent": () => (/* binding */ AlignmentViewComponent) -/* harmony export */ }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! tslib */ 70655); -/* harmony import */ var _alignment_view_plugin_component_html_ngResource__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./alignment-view-plugin-component.html?ngResource */ 80059); -/* harmony import */ var _alignment_view_plugin_component_scss_ngResource__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./alignment-view-plugin-component.scss?ngResource */ 22254); -/* harmony import */ var _alignment_view_plugin_component_scss_ngResource__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_alignment_view_plugin_component_scss_ngResource__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/core */ 94650); -/* harmony import */ var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/platform-browser */ 11481); -/* harmony import */ var _app_base_component_directive__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @app/base-component.directive */ 75738); -/* harmony import */ var _app_contactTraceCommonServices_common_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @app/contactTraceCommonServices/common.service */ 37822); -/* harmony import */ var golden_layout__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! golden-layout */ 10478); -var _class; - - - - - - - - -//import * as alignmentViewer from 'alignment-viewer'; -//import MSAViewer from '@plotly/react-msa-viewer'; -let AlignmentViewComponent = (_class = class AlignmentViewComponent extends _app_base_component_directive__WEBPACK_IMPORTED_MODULE_2__.BaseComponentDirective { - constructor(injector, eventManager, commonService, container, elRef, cdref) { - super(elRef.nativeElement); - this.eventManager = eventManager; - this.commonService = commonService; - this.container = container; - this.cdref = cdref; - // General Settings - this.displaySettings = false; - this.showHideOptions = [{ - label: 'Show', - value: true - }, { - label: 'Hide', - value: false - }]; - this.longestSeqLength = 0; - this.alignmentTopDisplayOptions = [{ - label: 'Logo', - value: 'logo' - }, { - label: 'Bar Plot', - value: 'barplot' - }]; - this.charSettingOptions = [{ - label: 'Show', - value: 'show' - }, { - label: 'Minimum', - value: 'min' - }, { - label: 'Hide', - value: 'hide' - }]; - this.rulerMinorInterval = 20; - this.rulerIntervalOptions = [0, 10, 20, 25, 50]; - this.sizes = [{ - label: 'Small', - value: 's' - }, { - label: 'Medium', - value: 'm' - }, { - label: 'Large', - value: 'l' - }, { - label: 'Custom', - value: 'c' - }]; - this.useCustomColorScheme = false; - this.colorSchemeOptions = [{ - label: 'Normal', - value: 'n' - }, { - label: 'Alternative', - value: 'a' - }, { - label: 'Custom', - value: 'c' - }]; - this.visuals = commonService.visuals; - this.commonService.visuals.alignment = this; - this.widgets = this.commonService.session.style.widgets; - } - /* if new data is add via new fasta file or whatever what do we need to update -need to be added at some point: - this.nodesWithSeq; also update longestSeqLength - this.calculateProportionAtEachLocation(); - this.updateAlignment; - this.shortenNodesWithSeq(); - this.updateMiniMap(); - if resized from dashboard view: what to resize? - */ - ngOnInit() { - // set events such as node-selected - this.setEvents(); - // sets nodesWithSeq and longestSeqLength - this.nodesWithSeq = []; - this.commonService.session.data.nodes.forEach(node => { - if (node.seq != null) { - this.nodesWithSeq.push({ - 'name': node._id, - 'seq': node.seq.toUpperCase() - }); - if (node.seq.length > this.longestSeqLength) { - this.longestSeqLength = node.seq.length; - } - } - }); - // calculations countMatrix, proportionMatrix, and positionMatrix - this.calculateProportionAtEachLocation(); - // sets different variables relating to size and display - this.alignmentTopDisplay = 'logo'; - $('#alignmnetTopTitle').text('Logo'); - this.selectedSize = 'l'; - this.selectedColorSchemeName = 'n'; - this.colorScheme = { - 'A': '#ccff00', - 'C': '#ffff00', - 'G': '#ff9900', - 'T': '#ff6600', - 'ambig': '#ffffff' - }; - this.customColorScheme = { - 'A': '#ccff00', - 'C': '#ffff00', - 'G': '#ff9900', - 'T': '#ff6600', - 'ambig': '#ffffff' - }; - this.charSetting = 'hide'; - // updates spanWidth, spanHeight, rightWidth, leftWidth, fontSize, and then updates alignment - this.onSelectedSizeChanged(); - // updates the valus of nodeWidthSeqShortened based on size of rigthWitdth, longestSeqLength, and nodesWithSeq - this.shortenNodesWithSeq(); - // updates showMiniMap which triggers updateMiniMapVisibility() and updateMiniMap() - this.showMiniMap = true; - this.updateMiniMap(); - // updates heights such as rightViewHeight, alignmentViewHeight, and canvasViewHeight - this.updateViewHeights(); - } - // General - /** - * Updates the alignment by generating a new canvas, and recalcuating various heights - */ - updateAlignment() { - this.generateCanvas(this.nodesWithSeq, { - width: this.spanWidth, - height: this.spanHeight, - charSetting: this.charSetting, - fontSize: this.fontSize, - colors: this.colorScheme - }).then(function (canvas) { - $('#msa-viewer .canvasHolder').empty().append(canvas); - }); - this.updateViewHeights(); - } - // Mini Map - /** - * Creates a minimap. - * The sequences (nodesWithSeqShortened) are previously downsample by picking 1 nt / every n nucleotides; - */ - updateMiniMap() { - this.generateCanvas(this.nodesWithSeqShortened, { - width: 1, - height: 1, - charSetting: 'hide', - fontSize: 1, - colors: this.colorScheme - }).then(function (canvas) { - $('#miniMap canvas').remove(); - $('#miniMap').append(canvas); - }); - } - /** - * Adds/Removed miniMap and miniMap title - */ - updateMiniMapVisibility() { - if (this.showMiniMap) { - this.updateMiniMap(); - $('#miniMapHolder').css({ - 'display': 'block' - }); - $('#miniMapTitle').css({ - 'display': 'block' - }); - } else { - $('#miniMapHolder').css({ - 'display': 'none' - }); - $('#miniMapTitle').css({ - 'display': 'none' - }); - } - this.updateViewHeights(); - } - /** - * Add miniMapHighlight to correct position - * @param e mouse event - * @param miniMap HTMLElement - */ - showMiniMapHighlight(e, miniMap) { - let mmDimensions = miniMap.getBoundingClientRect(); - let viewHeight = $('.canvasLabels').height(); - let highlightHeight = viewHeight / this.spanHeight; - let scaleFactor = Math.ceil(this.longestSeqLength / this.rightWidth); - let highlightWidth = $('.canvasHolder').width() / (this.spanWidth * scaleFactor); - let top = e.clientY - mmDimensions.top - highlightHeight / 2; - if (top < 0) { - top = 0; - } else if (top > mmDimensions.height - highlightHeight) { - top = mmDimensions.height - highlightHeight; - } - let canvasWidth = $('#miniMap canvas').width(); - let left = e.clientX - mmDimensions.left - highlightWidth / 2; - if (left < 0) { - left = 0; - } else if (left > canvasWidth - highlightWidth) { - left = canvasWidth - highlightWidth; - } - $('#miniMapHighlight').css({ - 'display': 'block', - 'top': top + 'px', - 'left': left + 'px', - 'height': highlightHeight + 'px', - 'width': highlightWidth + 'px' - }); - } - /** - * Moves the position of miniMapHighlight - * @param e mouse event - * @param miniMap HTMLElement - */ - updateMiniMapHighlight(e, miniMap) { - let mmDimensions = miniMap.getBoundingClientRect(); - let highlightHeight = $('#miniMapHighlight').height(); - let top = e.clientY - mmDimensions.top - highlightHeight / 2; - if (top < 0) { - top = 0; - } else if (top > mmDimensions.height - highlightHeight) { - top = mmDimensions.height - highlightHeight; - } - let canvasWidth = $('#miniMap canvas').width(); - let highlightWidth = $('#miniMapHighlight').width(); - let left = e.clientX - mmDimensions.left - highlightWidth / 2; - if (left < 0) { - left = 0; - } else if (left > canvasWidth - highlightWidth) { - left = canvasWidth - highlightWidth; - } - $('#miniMapHighlight').css({ - 'top': top + 'px', - 'left': left + 'px' - }); - } - /** - * Removes highling from minimap - */ - hideMiniMapHighlight() { - $('#miniMapHighlight').css({ - 'display': 'none' - }); - } - /** - * Moves scroll position of main canvas, canvasLabels, and alignmentTop(Bar Plot, Rule) based on position of miniMapHighlight - */ - miniMapClick(e, miniMap, canvasHolder, canvasLabels, alignmentTop) { - let mmDimensions = miniMap.getBoundingClientRect(); - let highlightDimensions = document.getElementById('miniMapHighlight').getBoundingClientRect(); - let scaleFactor = Math.ceil(this.longestSeqLength / this.rightWidth); - let horizontalScroll = (highlightDimensions.left - mmDimensions.left) * this.spanWidth * scaleFactor; - alignmentTop.scrollLeft = horizontalScroll < 10 ? horizontalScroll : horizontalScroll + 7; - canvasHolder.scrollLeft = horizontalScroll < 10 ? horizontalScroll : horizontalScroll + 7; - let verticalScroll = (highlightDimensions.top - mmDimensions.top) * this.spanHeight; - canvasLabels.scrollTop = verticalScroll < 4 ? verticalScroll : verticalScroll + 4; - canvasHolder.scrollTop = verticalScroll < 4 ? verticalScroll : verticalScroll + 4; - } - // Tooltip - /** - * - * @param e $event - * @param index index of the nt for the tooltip - */ - showTooltip(e, index) { - // offsetX = mouse X position + adjustment to center of the bar -50 to center toolbar - let [x] = this.getRelativeMousePosition(e); - let adjX = this.spanWidth / 2 - e.offsetX % this.spanWidth; - let offsetX = x + adjX - 50; - // offsetY - let rect = document.querySelector('#alignmentTop').getBoundingClientRect(); - let offsetY = rect.top - 10; - let htmlString = this.tabulate(index); - $('#tooltip').html(htmlString); - $('#tooltipHolder').css({ - 'display': 'block', - 'position': 'absolute', - 'left': offsetX + 'px', - 'top': offsetY + 'px' - }); - } - /** - * Hides the tooltip - */ - hideTooltip() { - //$('#tooltip').html("") - $('#tooltipHolder').css({ - 'display': 'none' - }); - } - // Data - /** - * Updates nodesWithSeqShortened by downsampling (selecting 1 out of every n NTs) nodesWithSeq - * The factor to downsample by is selection such len of new seqs will be around 300bp * - */ - shortenNodesWithSeq() { - if (this.longestSeqLength < this.rightWidth) { - this.nodesWithSeq.forEach(obj => { - this.nodesWithSeqShortened.push({ - name: obj.name, - seq: obj.seq - }); - }); - $('#miniMap').css({ - 'width': this.longestSeqLength + 'px', - 'height': this.nodesWithSeq.length + 'px' - }); - return; - } - // want the minimap to be around this.rightWidth pixels wide; caculate how much to downscale by and then downscale - let scaleFactor = Math.ceil(this.longestSeqLength / this.rightWidth); - this.nodesWithSeqShortened = []; - this.nodesWithSeq.forEach(obj => { - let downSizedSeq = ""; - for (let i = 0; i < this.longestSeqLength; i += scaleFactor) { - downSizedSeq += obj.seq.charAt(i); - } - this.nodesWithSeqShortened.push({ - name: obj.name, - seq: downSizedSeq - }); - }); - $('#miniMap').css({ - 'width': Math.ceil(this.longestSeqLength / scaleFactor) + 'px', - 'height': this.nodesWithSeq.length + 'px' - }); - } - /** - * Calculates the count, proportion, and y position (for logo/bar plot) of each base at each position - */ - calculateProportionAtEachLocation() { - // count matrix: [ [#A, #C, #G, #T, #other/ambiguos]-for each location, ... ] - this.countMatrix = []; - this.proportionMatrix = []; - this.positionMatrix = []; - for (let i = 0; i < this.longestSeqLength; i++) { - this.countMatrix.push([0, 0, 0, 0, 0]); - } - for (let node of this.nodesWithSeq) { - for (let i = 0; i < node.seq.length; i++) { - let nt = node.seq[i]; - switch (nt) { - case 'A': - this.countMatrix[i][0] += 1; - break; - case 'C': - this.countMatrix[i][1] += 1; - break; - case 'G': - this.countMatrix[i][2] += 1; - break; - case 'T': - this.countMatrix[i][3] += 1; - break; - default: - this.countMatrix[i][4] += 1; - } - } - } - function calcProportion(value) { - let sum = value[0] + value[1] + value[2] + value[3] + value[4]; - return [value[0] / sum, value[1] / sum, value[2] / sum, value[3] / sum, value[4] / sum]; - } - function calculatePosition(value) { - // custom merge sort; i want first four items in value sorted but i want array of indexes returned not array of values - let mergeA = value[0] > value[1] ? [0, 1] : [1, 0]; - let mergeB = value[2] > value[3] ? [2, 3] : [3, 2]; - let sortedIndexes = []; - let locA = 0, - locB = 0; - for (let i = 0; i < 4; i++) { - if (locA == 2) { - sortedIndexes.push(mergeB[locB]); - locB += 1; - } else if (locB == 2) { - sortedIndexes.push(mergeA[locA]); - locA += 1; - } else if (value[mergeA[locA]] > value[mergeB[locB]]) { - sortedIndexes.push(mergeA[locA]); - locA += 1; - } else { - sortedIndexes.push(mergeB[locB]); - locB += 1; - } - } - // use sorted index to create temp/row of positionMatrix such at the ambig (value[4]) is at the very top and then largest to smallest - let temp = [0, 0, 0, 0, 0]; - let y = value[4] * 100; - for (let index of sortedIndexes) { - temp[index] = y; - y += value[index] * 100; - } - return temp; - } - this.proportionMatrix = this.countMatrix.map(calcProportion); - this.positionMatrix = this.proportionMatrix.map(calculatePosition); - } - // Layout Positioning - /** - * Set rightViewHeigh, alignmentViewHeight, and canvasViewHeigh - */ - updateViewHeights() { - // order is important as subsequent calculations rely on previous updated values; These values are used to ensure the view heights are correct and scrolling occurs as expectd - this.rightViewHeight = this.calculateRightHeight(); - this.alignmentViewHeight = this.calculateViewHeight(); - this.canvasViewHeight = this.calculateCanvasViewHeight(); - } - /** - * @returns the height needed to for all the elements on the right half of msa-viewer. If this height > available space, then scrolling will be used - */ - calculateRightHeight() { - let miniMapHeight = this.showMiniMap ? $('#miniMapHolder').height() + 16 : 0; - // 170 alignmentTop, 17 bottomScrollBar, height of canvas - return 170 + 25 + this.nodesWithSeq.length * this.spanHeight + miniMapHeight; - } - /** - * @returns the height for msa-viewer element based on the minimum of the available space for the view and the height needed for the elements - */ - calculateViewHeight() { - return Math.min($(".msa-viewer-container").parent().height() - 50, this.rightViewHeight); - } - /** - * @returns the height for the canvasHolder element and then subsequently the canvasLabels element. Not the height of the canvas itself - */ - calculateCanvasViewHeight() { - let miniMapHeight = this.showMiniMap ? this.nodesWithSeq.length + 16 : 0; - return Math.min(this.alignmentViewHeight - 170 - miniMapHeight, this.nodesWithSeq.length * this.spanHeight + 25); - } - /** - * @returns the width for the right half of the viewer - */ - calculateRightWidth() { - // 7: gap between left and right (5) + 2 - return $("#msa-viewer").width() - this.leftWidth - 7; - } - // Sizing - /** - * Updates font size as needed and then updates the alignment view based on new height - */ - onSpanHeightChange(e) { - if (e >= 16) { - this.fontSize = 16; - this.leftWidth = 250; - } else if (e >= 12) { - this.fontSize = 12; - this.leftWidth = 200; - } else if (e >= 10) { - this.fontSize = 10; - this.leftWidth = 150; - } - this.rightWidth = this.calculateRightWidth(); - this.selectedSize = 'c'; - this.updateAlignment(); - } - /** - * Updates the alignment view with the new width - */ - onSpanWidthChange(e) { - this.selectedSize = 'c'; - this.updateAlignment(); - } - /** - * Updates spanHeight, spanWidth, fontSize, and sometimes charSetting and then updates alignment view with new settings - */ - onSelectedSizeChanged() { - if (this.selectedSize == 's') { - this.spanHeight = 10; - this.spanWidth = 2; - this.fontSize = 10; - this.leftWidth = 150; - this.charSetting = 'hide'; - } else if (this.selectedSize == 'm') { - this.spanHeight = 12; - this.spanWidth = 6; - this.fontSize = 12; - this.leftWidth = 200; - //this.charSetting = 'hide'; - } else if (this.selectedSize == 'l') { - this.spanHeight = 16; - this.spanWidth = 10; - this.fontSize = 16; - this.leftWidth = 250; - //this.charSetting = 'show'; - } - - this.rightWidth = this.calculateRightWidth(); - this.updateAlignment(); - } - // Colors - /** - * Updates the color scheme for the view based on what is selected - * @param e 'n' | 'a' | 'c' - */ - onSelectedColorChanged(e) { - if (e == 'n') { - this.colorScheme = { - 'A': '#ccff00', - 'C': '#ffff00', - 'G': '#ff9900', - 'T': '#ff6600', - 'ambig': '#ffffff' - }; - this.useCustomColorScheme = false; - } else if (e == 'a') { - this.colorScheme = { - 'A': '#009E73', - 'C': '#F0E442', - 'G': '#E69F00', - 'T': '#D55E00', - 'ambig': '#ffffff' - }; - this.useCustomColorScheme = false; - } else { - this.colorScheme = { - 'A': this.customColorScheme['A'], - 'C': this.customColorScheme['C'], - 'G': this.customColorScheme['G'], - 'T': this.customColorScheme['T'], - 'ambig': this.customColorScheme['ambig'] - }; - this.useCustomColorScheme = true; - } - this.updateAlignment(); - if (this.showMiniMap) { - this.updateMiniMap(); - } - } - /** - * Updates the colorScheme for nt given with the e.target.value color - * @param nt 'A' | 'C' | 'G' | 'T' | 'ambig' - */ - updateColorScheme(nt, e) { - this.colorScheme[nt] = e.target.value; - this.customColorScheme[nt] = e.target.value; - this.updateAlignment(); - if (this.showMiniMap) { - this.updateMiniMap(); - } - } - /** - * @param index 0=A, 1=C, 2=G, 3=T, anythingElse=ambig - * @returns the value (hexvalue) from colorScheme based on the index given - */ - fillColor(index) { - if (index == 0) { - return this.colorScheme['A']; - } else if (index == 1) { - return this.colorScheme['C']; - } else if (index == 2) { - return this.colorScheme['G']; - } else if (index == 3) { - return this.colorScheme['T']; - } else { - return this.colorScheme['ambig']; - } - } - // Helper - /** - * Searches nodesWithSequences for name given; changes background color for all nodes that are found - * @param name name/id of node to search for - */ - search(name) { - $('.canvasLabels div').removeClass('searchHighlight2'); - if (name == "") { - return; - } - let indexes = this.nodesWithSeq.filter(obj => obj.name.includes(name)).map(obj => this.nodesWithSeq.indexOf(obj)); - if (indexes.length == 0) { - console.log('not found'); - return; - } - for (let index of indexes) { - let element = $('.canvasLabels div').get(index); - $(element).addClass('searchHighlight2'); - } - // need to scroll if necessary - let scroll = $('.canvasLabels').scrollTop(); - let topIndex = scroll / this.spanHeight; - topIndex = topIndex % 1 > .2 ? Math.ceil(topIndex) : Math.floor(topIndex); - let bottomIndex = Math.floor((this.canvasViewHeight - 20) / this.spanHeight + topIndex - 1); - if (indexes[0] < topIndex || indexes[0] > bottomIndex) { - let scrollPos = indexes[0] * this.spanHeight - 5; - $('.canvasLabels').scrollTop(scrollPos); - } - /* // this uncommented version return exact match of one node - let index = this.nodesWithSeq.findIndex((obj) => obj.name == name); - if (index == -1) { - return; - } - let newTop = (index*this.spanHeight) - $('#searchHighlight').css({top: newTop+'px', display: "block"}) - */ - // determines if scrolling is needed to bring index into view - /* - let scroll = $('.canvasLabels').scrollTop(); - let topIndex = scroll/this.spanHeight; - topIndex = (topIndex%1 > .2) ? Math.ceil(topIndex) : Math.floor(topIndex) - let bottomIndex = Math.floor((this.canvasViewHeight-20) / this.spanHeight + topIndex -1); - if (index < topIndex || index > bottomIndex) { - let scrollPos = (index)*this.spanHeight -5 - $('.canvasLabels').scrollTop(scrollPos) - } */ - } - /** - * Opens settings pane - */ - openSettings() { - this.displaySettings = !this.displaySettings; - } - /** - * Ultimately will be used for exporting elements of the view; for now, used to for testing - */ - openExport() {} - /** - * Updates text in - */ - onAlignmentTopChange() { - if (this.alignmentTopDisplay == 'barplot') { - $('#alignmnetTopTitle').text('Bar Plot'); - } else { - $('#alignmnetTopTitle').text('Logo'); - } - } - /** XXXX May need to remove XXXX - * @param i current index of the base/nt in proportion matrix - * @param j A=0, C=1, G=2, T=3, other/ambiguos=4 - * @returns location for the y value of rectangle in the logo - */ - calculateY(i, j) { - if (j == 4) { - return 0; - } - let nt = this.proportionMatrix[i]; - let y = nt[4] * 100; - if (j == 0) { - return y; - } - for (let k = 0; k < j; k++) { - y += nt[k] * 100; - } - return y; - } - /** - * Sychronises horizonal scrolls on canvasHolder with alignmentTop and vertical scrolls on canvasHolder with canvasLabels - * @param canvasHolder div class="canvasHolder" - * @param canvasLabels div class="canvasLabels" - * @param alignmentTop div class="alignmentTop" - */ - canvasScroll(canvasHolder, canvasLabels, alignmentTop) { - if (canvasHolder.scrollLeft != alignmentTop.scrollLeft) { - alignmentTop.scrollLeft = canvasHolder.scrollLeft; - } - if (canvasHolder.scrollTop != canvasLabels.scrollTop) { - canvasLabels.scrollTop = canvasHolder.scrollTop; - } - } - /** - * Adapted from https://github.com/CDCgov/AlignmentViewer - * XXXXX need to be moved out of alignment-view-plugin-component, so that it can be accessed from files view before launching MT XXXXX - * @param seqs list of seq objects [{seq: 'ATCA...', ...},] - * @param config object: { width: number, height: number, charSetting:['hide'|'show'|'min'], fontSize: number, colors: {'A':'#000000', 'C': , 'G':, 'T':, 'ambig':}} - * @returns promise of a HTMLCanvasElement showing the alignment - */ - generateCanvas(seqs, config) { - config = Object.assign({ - width: 1, - height: 1, - 'charSetting': 'hide' - }, config, { - colors: Object.assign({ - 'A': '#ccff00', - 'C': '#ffff00', - 'G': '#ff9900', - 'T': '#ff6600', - 'ambig': '#ffffff' - }, 'colors' in config ? config.colors : {}) - }); - return new Promise(resolve => { - let longest = 0; - let n = seqs.length; - for (let i = 0; i < n; i++) { - let s = seqs[i]; - let seq = s.seq.toUpperCase(); - if (seq.length > longest) longest = seq.length; - } - let ch = Math.ceil(config.height); - let cw = Math.ceil(config.width); - let width = longest * config.width; - let height = seqs.length * config.height; - let canvas = document.createElement('canvas'); - canvas.width = width; - canvas.height = height; - let context = canvas.getContext('2d', { - alpha: false - }); - context.fillStyle = config.colors['ambig']; - context.fillRect(0, 0, width, height); - Object.keys(config.colors).forEach(nucleotide => { - if (nucleotide == 'ambig') return; - context.fillStyle = config.colors[nucleotide]; - for (let row = 0; row < n; row++) { - let seq = seqs[row].seq; - let y = Math.floor(row * ch); - for (let col = 0; col < longest; col++) { - let c = seq[col]; - if (!c) break; - if (c != nucleotide) continue; - let x = Math.floor(col * cw); - context.fillRect(x, y, cw, ch); - } - } - }); - context.font = config.fontSize + 'px mono'; - context.textAlign = 'center'; - context.textBaseline = 'bottom'; - context.fillStyle = 'black'; - if (config.charSetting == 'show') { - for (let row = 0; row < n; row++) { - let seq = seqs[row].seq; - let y = row * ch + ch; - for (let col = 0; col < longest; col++) { - let c = seq[col]; - if (!c) break; - let x = col * cw + cw / 2; - context.fillText(c, x, y, cw); - } - } - } else if (config.charSetting == 'min') { - let refSeq = seqs[0].seq; - for (let col = 0; col < longest; col++) { - let c = refSeq[col]; - if (!c) break; - let x = col * cw + cw / 2; - context.fillText(c, x, ch, cw); - } - for (let row = 1; row < n; row++) { - let seq = seqs[row].seq; - let y = row * ch + ch; - for (let col = 0; col < longest; col++) { - let c = refSeq[col] != seq[col] || seq[col] == '-' ? seq[col] : '.'; - if (!c) break; - let x = col * cw + cw / 2; - context.fillText(c, x, y, cw); - } - } - } - resolve(canvas); - }); - } - /** - * Generate a tabular HTML string from the index of proportionMatrix - * @param data index of the position to use to make the HTML string of the table - * @returns an HTML string with a table representation of the data - */ - tabulate(index) { - let tableHtml = ` - -
Position: ${index}
- `; - let data = this.proportionMatrix[index]; - for (let i = 0; i < 5; i++) { - tableHtml += ''; - if (i == 0) { - tableHtml += ''; - } else if (i == 1) { - tableHtml += ''; - } else if (i == 2) { - tableHtml += ''; - } else if (i == 3) { - tableHtml += ''; - } else { - tableHtml += ''; - } - tableHtml += ''; - } - tableHtml += '
NT %
A' + (data[i] * 100).toFixed(1) + '%C' + (data[i] * 100).toFixed(1) + '%G' + (data[i] * 100).toFixed(1) + '%T' + (data[i] * 100).toFixed(1) + '%other' + (data[i] * 100).toFixed(1) + '%
'; - return tableHtml; - } - /** - * @returns an array [X, Y] of the position of mouse relative to alignment view. Global position (i.e. d3.event.pageX) doesn't work for a dashboard - */ - getRelativeMousePosition(e) { - let rect = document.querySelector('alignmentviewcomponent').getBoundingClientRect(); - let X = e.pageX - rect.left; - let Y = e.pageY - rect.top; - return [X, Y]; + }); } - /** - * Set events such as node-selected so that they can be triggered; such as with search - */ - setEvents() { - let that = this; - $(document).on("node-selected", function () { - if ($('#search-field').val() != '_id') { - console.log('can only search in alignment view with id'); - return; + publishFilterDataChange() { + // this.goldenLayout.componentInstances[1].onFilterDataChange(); + this.homepageTabs.forEach(tab => { + if (tab.componentRef && tab.componentRef.onFilterDataChange) { + tab.componentRef.onFilterDataChange(); } - that.search($('#search').val()); }); } + ngOnDestroy() { + this.NewSession(); + } }, _class.ctorParameters = () => [{ - type: _angular_core__WEBPACK_IMPORTED_MODULE_4__.Injector + type: _angular_core__WEBPACK_IMPORTED_MODULE_19__.Injector +}, { + type: _contactTraceCommonServices_common_service__WEBPACK_IMPORTED_MODULE_2__.CommonService }, { - type: _angular_platform_browser__WEBPACK_IMPORTED_MODULE_5__.EventManager + type: _golden_layout_component_service__WEBPACK_IMPORTED_MODULE_15__.GoldenLayoutComponentService }, { - type: _app_contactTraceCommonServices_common_service__WEBPACK_IMPORTED_MODULE_3__.CommonService + type: _angular_platform_browser__WEBPACK_IMPORTED_MODULE_21__.DomSanitizer }, { - type: golden_layout__WEBPACK_IMPORTED_MODULE_6__.ComponentContainer, - decorators: [{ - type: _angular_core__WEBPACK_IMPORTED_MODULE_4__.Inject, - args: [_app_base_component_directive__WEBPACK_IMPORTED_MODULE_2__.BaseComponentDirective.GoldenLayoutContainerInjectionToken] - }] + type: _angular_core__WEBPACK_IMPORTED_MODULE_19__.ChangeDetectorRef }, { - type: _angular_core__WEBPACK_IMPORTED_MODULE_4__.ElementRef + type: _angular_core__WEBPACK_IMPORTED_MODULE_19__.ElementRef }, { - type: _angular_core__WEBPACK_IMPORTED_MODULE_4__.ChangeDetectorRef -}], _class); -AlignmentViewComponent = (0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([(0,_angular_core__WEBPACK_IMPORTED_MODULE_4__.Component)({ - selector: 'AlignmentViewComponent', - template: _alignment_view_plugin_component_html_ngResource__WEBPACK_IMPORTED_MODULE_0__, - styles: [(_alignment_view_plugin_component_scss_ngResource__WEBPACK_IMPORTED_MODULE_1___default())] -}), (0,tslib__WEBPACK_IMPORTED_MODULE_7__.__metadata)("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_4__.Injector, _angular_platform_browser__WEBPACK_IMPORTED_MODULE_5__.EventManager, _app_contactTraceCommonServices_common_service__WEBPACK_IMPORTED_MODULE_3__.CommonService, golden_layout__WEBPACK_IMPORTED_MODULE_6__.ComponentContainer, _angular_core__WEBPACK_IMPORTED_MODULE_4__.ElementRef, _angular_core__WEBPACK_IMPORTED_MODULE_4__.ChangeDetectorRef])], AlignmentViewComponent); + type: _angular_core__WEBPACK_IMPORTED_MODULE_19__.Renderer2 +}, { + type: _shared_utils_event_emitter_service__WEBPACK_IMPORTED_MODULE_13__.EventEmitterService +}], _class.propDecorators = { + stashes: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_19__.ViewChild, + args: ['stashes'] + }], + _goldenLayoutHostComponent: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_19__.ViewChild, + args: ['goldenLayoutHost'] + }], + linkThresholdSparkline: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_19__.ViewChild, + args: ['linkThresholdSparkline'] + }], + DisplayGlobalSettingsDialogEvent: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_19__.Output + }], + dataSet: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_19__.ViewChild, + args: ['dataSet'] + }], + targets: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_19__.ViewChildren, + args: ['placeholder', { + read: _angular_core__WEBPACK_IMPORTED_MODULE_19__.ViewContainerRef + }] + }], + spinnerElement: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_19__.ViewChild, + args: ['ledgerloader'] + }], + spinnerDivElement: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_19__.ViewChild, + args: ['ledgerloadDiv'] + }], + globalSettingsTab: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_19__.ViewChild, + args: ['globalSettingsTab'] + }], + pinBtn: [{ + type: _angular_core__WEBPACK_IMPORTED_MODULE_19__.ViewChild, + args: ['pinbutton'] + }] +}, _class); +MicrobeTraceNextHomeComponent = (0,tslib__WEBPACK_IMPORTED_MODULE_22__.__decorate)([(0,_angular_core__WEBPACK_IMPORTED_MODULE_19__.Component)({ + changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_19__.ChangeDetectionStrategy.Default, + selector: 'contact-trace', + encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_19__.ViewEncapsulation.None, + template: _microbe_trace_next_plugin_component_html_ngResource__WEBPACK_IMPORTED_MODULE_0__, + styles: [(_microbe_trace_next_plugin_component_less_ngResource__WEBPACK_IMPORTED_MODULE_1___default())] +}), (0,tslib__WEBPACK_IMPORTED_MODULE_22__.__metadata)("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_19__.Injector, _contactTraceCommonServices_common_service__WEBPACK_IMPORTED_MODULE_2__.CommonService, _golden_layout_component_service__WEBPACK_IMPORTED_MODULE_15__.GoldenLayoutComponentService, _angular_platform_browser__WEBPACK_IMPORTED_MODULE_21__.DomSanitizer, _angular_core__WEBPACK_IMPORTED_MODULE_19__.ChangeDetectorRef, _angular_core__WEBPACK_IMPORTED_MODULE_19__.ElementRef, _angular_core__WEBPACK_IMPORTED_MODULE_19__.Renderer2, _shared_utils_event_emitter_service__WEBPACK_IMPORTED_MODULE_13__.EventEmitterService])], MicrobeTraceNextHomeComponent); -(function (AlignmentViewComponent) { - AlignmentViewComponent.componentTypeName = 'Alignment View'; -})(AlignmentViewComponent || (AlignmentViewComponent = {})); +class BpaaSPayloadWrapper { + constructor() { + this.BlockHashCode = undefined; + this.BlockName = undefined; + this.BpaaSPayload = undefined; + this.FuzzyMatchRatios = undefined; + } +} +class BpaaSPayloadWrapperData { + constructor() { + this.Type = undefined; + this.SubType = undefined; + this.JurisdictionKey = undefined; + this.JurisdictionName = undefined; + this.Jurisdiction = undefined; + this.FileName = undefined; + this.Data = []; + } +} /***/ }), @@ -11321,7 +10223,7 @@ let TableComponent = (_class = class TableComponent extends _app_base_component_ openPinAllNodes() {} openRefreshScreen() {} openSelectDataSetScreen(e) { - this.visuals.tableComp.createTable(e.option.value); + this.visuals.tableComp.createTable(e); } onLoadNewData() { this.createTable(this.visuals.microbeTrace.dataSetViewSelected); @@ -11385,376 +10287,6 @@ TableComponent = (0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([(0,_angular_ /***/ }), -/***/ 18011: -/*!*******************************************************************************************!*\ - !*** ./src/app/visualizationComponents/TimelineComponent/timeline-component.component.ts ***! - \*******************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TimelineComponent": () => (/* binding */ TimelineComponent) -/* harmony export */ }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! tslib */ 70655); -/* harmony import */ var _timeline_component_component_html_ngResource__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./timeline-component.component.html?ngResource */ 83083); -/* harmony import */ var _timeline_component_component_scss_ngResource__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./timeline-component.component.scss?ngResource */ 5264); -/* harmony import */ var _timeline_component_component_scss_ngResource__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_timeline_component_component_scss_ngResource__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @angular/core */ 94650); -/* harmony import */ var _contactTraceCommonServices_common_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../contactTraceCommonServices/common.service */ 37822); -/* harmony import */ var _app_base_component_directive__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @app/base-component.directive */ 75738); -/* harmony import */ var golden_layout__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! golden-layout */ 10478); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! d3 */ 92925); -/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! moment */ 15439); -/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(moment__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var ngx_bootstrap__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ngx-bootstrap */ 11109); -var _class; - - - - - - - - - - -let TimelineComponent = (_class = class TimelineComponent extends _app_base_component_directive__WEBPACK_IMPORTED_MODULE_3__.BaseComponentDirective { - constructor(commonService, container, elRef) { - super(elRef.nativeElement); - this.commonService = commonService; - this.container = container; - this.DisplayGlobalSettingsDialogEvent = new _angular_core__WEBPACK_IMPORTED_MODULE_7__.EventEmitter(); - this.FieldList = []; - this.ShowEpiSettingsPane = false; - this.cumulative = false; - this.margin = { - top: 50, - left: 20, - right: 20, - bottom: 30 - }; - this.tick = 0; - this.isPlaying = false; - this.vnodes = []; // Replace with your actual data - this.visuals = commonService.visuals; - this.commonService.visuals.epiCurve = this; - } - ngOnInit() { - // populate this.twoD.FieldList with [None, ...nodeFields] - this.visuals.epiCurve.FieldList = []; - this.visuals.epiCurve.FieldList.push({ - label: "None", - value: "None" - }); - this.visuals.epiCurve.commonService.session.data['nodeFields'].map((d, i) => { - if (d != 'seq' && d != 'sequence') { - this.visuals.epiCurve.FieldList.push({ - label: this.visuals.epiCurve.commonService.capitalize(d.replace("_", "")), - value: d - }); - } - }); - } - ngAfterViewInit() { - // this.initializeD3Chart(); - this.setupEventListeners(); - this.refresh(); - console.log(this.commonService.session.style.widgets["node-color"]); - } - refresh() { - const wrapper = $(this.timelineElement.nativeElement).empty().parent(); - const tickFormat = d3__WEBPACK_IMPORTED_MODULE_4__.timeFormat("%Y-%m-%d"); - this.width = wrapper.width() - this.margin.left - this.margin.right; - this.height = wrapper.height() - this.margin.top - this.margin.bottom; - this.middle = this.height / 2; - const field = this.SelectedDateFieldVariable; - let times = []; - this.vnodes = JSON.parse(JSON.stringify(this.commonService.session.data.nodes)); - this.vnodes.forEach(d => { - const time = moment__WEBPACK_IMPORTED_MODULE_5___default()(d[field]); // Cast 'field' as string - if (time.isValid()) { - d[field] = time.toDate(); // Cast 'field' as string - times.push(d[field]); // Cast 'field' as string - } else { - d[field] = null; // Cast 'field' as string - } - }); - - if (times.length < 2) { - times = [new Date(2000, 1, 1), new Date()]; - } - this.timeDomainStart = Math.min(...times); - this.timeDomainEnd = Math.max(...times); - this.x = d3__WEBPACK_IMPORTED_MODULE_4__.scaleTime().domain([this.timeDomainStart, this.timeDomainEnd]).rangeRound([0, this.width]); - this.y = d3__WEBPACK_IMPORTED_MODULE_4__.scaleLinear().range([this.height, 0]); - this.histogram = d3__WEBPACK_IMPORTED_MODULE_4__.histogram().value(d => d[field]).domain(this.x.domain()).thresholds(d3__WEBPACK_IMPORTED_MODULE_4__.thresholdScott); - this.svg = d3__WEBPACK_IMPORTED_MODULE_4__.select(this.timelineElement.nativeElement).append("svg").attr("width", this.width + this.margin.left + this.margin.right).attr("height", this.height + this.margin.top + this.margin.bottom); - const epiCurve = this.svg.append("g").classed("timeline-epi-curve", true).attr("transform", `translate(${this.margin.left}, 0)`); - const bins = this.histogram(this.vnodes); - if (!this.commonService.session.style.widgets["timeline-noncumulative"]) { - let sum = 0; - bins.forEach(bin => { - sum += bin.length; - bin.length = sum; - }); - } - this.y.domain([0, d3__WEBPACK_IMPORTED_MODULE_4__.max(bins, d => d.length)]); - epiCurve.selectAll("rect").data(bins).enter().append("rect").attr("transform", d => `translate(${this.x(d.x0)}, ${this.y(d.length)})`).attr("width", d => this.x(d.x1) - this.x(d.x0)).attr("height", d => this.height - this.y(d.length)).attr("fill", this.commonService.session.style.widgets["node-color"]); - this.svg.append("g").attr("class", "axis axis--x").attr("transform", `translate(${this.margin.left}, ${this.height})`).call(d3__WEBPACK_IMPORTED_MODULE_4__.axisBottom(this.x).tickSize(8).tickPadding(8).tickFormat(tickFormat)).attr("text-anchor", null).selectAll("text").attr("x", 6); - this.svg.append("g").attr("class", "axis axis--y").attr("transform", `translate(${this.margin.left}, 0)`).call(d3__WEBPACK_IMPORTED_MODULE_4__.axisLeft(this.y)).attr("text-anchor", null).selectAll("text").attr("x", 6); - this.brush = d3__WEBPACK_IMPORTED_MODULE_4__.brushX().extent([[0, 0], [this.width, this.height]]).on("start brush", () => { - this.selection = d3__WEBPACK_IMPORTED_MODULE_4__.brushSelection(this.brushG.node()); - if (!this.selection) return; - if (this.selection[0] > 0) { - this.selection[0] = 0; - this.brushG.call(this.brush.move, this.selection); - } - }).on("end", function () { - this.selection = d3__WEBPACK_IMPORTED_MODULE_4__.brushSelection(this.brushG.node()); - if (!this.selection) return; - if (this.selection[0] > 0) { - this.selection[0] = 0; - this.brushG.call(this.brush.move, this.selection); - this.propagate(); - } - }); - this.brushG = this.svg.append("g").attr("class", "brush").attr("transform", "translate(" + this.margin.left + ",0)").call(this.brush); - } - setupEventListeners() { - $('#timeline-play').click(() => { - if (this.isPlaying) { - $('#timeline-play').html(''); - this.stopTimeline(); - } else { - $('#timeline-play').html(''); - this.startTimeline(); - } - }); - $('[name="timeline-cumulation"]').on('change', () => { - console.log('cum 1'); - this.cumulative = $("#timeline-noncumulative").is(":checked"); - this.commonService.session.style.widgets["timeline-noncumulative"] = $("#timeline-noncumulative").is(":checked"); - this.refresh(); - }); - $(ngx_bootstrap__WEBPACK_IMPORTED_MODULE_6__.window).on('node-color-change', () => { - this.svg.selectAll(".timeline-epi-curve rect").attr("fill", this.commonService.session.style.widgets["node-color-variable"]); - }); - $('#timeline-speed').on('change', () => { - this.setTimer(); - }); - } - // Handle the change event of the date field - onDateFieldChange(event) { - this.commonService.session.style.widgets["epi-timeline-date-field"] = event; - this.refresh(); - } - openSettings() { - this.visuals.epiCurve.ShowEpiSettingsPane = !this.visuals.epiCurve.ShowEpiSettingsPane; - } - setCumulative(value) { - console.log('set cum2 '); - this.cumulative = value; - this.commonService.session.style.widgets["timeline-noncumulative"] = !value; - this.refresh(); - } - startTimeline() { - this.isPlaying = true; - this.setTimer(); - } - stopTimeline() { - this.isPlaying = false; - if (this.timer) { - this.timer.stop(); - } - } - setTimer() { - if (this.timer) { - this.timer.stop(); - d3__WEBPACK_IMPORTED_MODULE_4__.timerFlush(); - } - this.timer = d3__WEBPACK_IMPORTED_MODULE_4__.interval(() => { - const selection = d3__WEBPACK_IMPORTED_MODULE_4__.brushSelection(this.brushG.node()); - if (!selection) return this.timer.stop(); // Ignore empty selections - if (selection[1] >= this.width) { - this.startTimeline(); - return; - } - this.brushG.call(this.brush.move, selection.map(s => s + 1)); - if (++this.tick % 5 == 0) this.propagate(); - }, 110 - parseInt($("#timeline-speed").val())); - if (!this.isPlaying) this.timer.stop(); - } - propagate() { - this.commonService.session.state.timeStart = this.x.invert(this.selection[0]); - this.commonService.session.state.timeEnd = this.x.invert(this.selection[1]); - this.commonService.setNodeVisibility(true); - this.commonService.setLinkVisibility(true); - this.commonService.tagClusters().then(() => { - ["node", "link"].forEach(thing => { - ngx_bootstrap__WEBPACK_IMPORTED_MODULE_6__.window.trigger(thing + "-visibility"); - }); - }); - } - // private initializeD3Chart(): void { - // this.clearSvg(); - // this.setupDimensions(); - // this.setupScales(); - // this.createSvg(); - // this.populateData(); - // this.drawHistogram(); - // this.setupBrush(); - // } - // private clearSvg(): void { - // d3.select(this.timelineElement.nativeElement).selectAll("*").remove(); - // } - // private setupDimensions(): void { - // const wrapper = this.timelineElement.nativeElement; - // this.width = wrapper.clientWidth - this.margin.left - this.margin.right; - // this.height = wrapper.clientHeight - this.margin.top - this.margin.bottom; - // } - // private setupScales(): void { - // this.x = d3.scaleTime().range([0, this.width]); - // this.y = d3.scaleLinear().range([this.height, 0]); - // } - // private createSvg(): void { - // this.svg = d3.select(this.timelineElement.nativeElement) - // .append("svg") - // .attr("width", this.width + this.margin.left + this.margin.right) - // .attr("height", this.height + this.margin.top + this.margin.bottom) - // .append("g") - // .attr("transform", `translate(${this.margin.left},${this.margin.top})`); - // } - // private populateData(): void { - // // Transform your data here - // this.vnodes.forEach(d => { - // const time = moment(d.date); // Replace 'date' with your actual date field - // if (time.isValid()) { - // d.date = time.toDate(); - // } else { - // d.date = null; - // } - // }); - // this.timeDomainStart = d3.min(this.vnodes, d => d.date); - // this.timeDomainEnd = d3.max(this.vnodes, d => d.date); - // this.x.domain([this.timeDomainStart, this.timeDomainEnd]); - // } - // private drawHistogram(): void { - // // Draw your histogram here - // this.histogram = d3.histogram() - // .value(d => d.date) // Replace 'date' with your actual date field - // .domain(this.x.domain()) - // .thresholds(d3.thresholdScott); - // const bins = this.histogram(this.vnodes); - // if (this.cumulative) { - // let sum = 0; - // bins.forEach(bin => { - // sum += bin.length; - // bin.length = sum; - // }); - // } - // this.y.domain([0, d3.max(bins, d => d.length)]); - // this.svg.selectAll("rect") - // .data(bins) - // .enter() - // .append("rect") - // .attr("x", d => this.x(d.x0)) - // .attr("y", d => this.y(d.length)) - // .attr("width", d => this.x(d.x1) - this.x(d.x0)) - // .attr("height", d => this.height - this.y(d.length)) - // .attr("fill", "steelblue"); // Change fill as necessary - // } - // private setupBrush(): void { - // this.brush = d3.brushX() - // .extent([[0, 0], [this.width, this.height]]) - // .on("end", () => this.onBrushEnd()); - // this.brushG = this.svg.append("g") - // .attr("class", "brush") - // .call(this.brush); - // } - // private onBrushEnd(): void { - // this.selection = d3.brushSelection(this.brushG.node()); - // if (this.selection) { - // // Handle brush selection change - // } - // } - // playPauseTimeline(): void { - // if (this.isPlaying) { - // this.stopTimeline(); - // } else { - // this.startTimeline(); - // } - // } - // startTimeline(): void { - // this.isPlaying = true; - // this.setTimer(); - // } - // stopTimeline(): void { - // this.isPlaying = false; - // if (this.timer) { - // this.timer.stop(); - // } - // } - // setTimer(): void { - // if (this.timer) { - // this.timer.stop(); - // } - // this.timer = d3.interval(() => { - // // Timer logic for updating the timeline - // // this.updateTimeline(); - // }, 100); // Adjust interval as needed - // } - updateNodeColors() { - //Not Relevant - } - updateVisualization() { - //Not Relevant - } - updateLinkColor() { - //Not Relevant - } - onRecallSession() {} - openExport() { - // this.visuals.tableComp.ShowTableExportPane = !this.visuals.tableComp.ShowTableExportPane; - } - openRefreshScreen() {} - onLoadNewData() { - throw new Error('Method not implemented.'); - } - onFilterDataChange() { - throw new Error('Method not implemented.'); - } -}, _class.ctorParameters = () => [{ - type: _contactTraceCommonServices_common_service__WEBPACK_IMPORTED_MODULE_2__.CommonService -}, { - type: golden_layout__WEBPACK_IMPORTED_MODULE_8__.ComponentContainer, - decorators: [{ - type: _angular_core__WEBPACK_IMPORTED_MODULE_7__.Inject, - args: [_app_base_component_directive__WEBPACK_IMPORTED_MODULE_3__.BaseComponentDirective.GoldenLayoutContainerInjectionToken] - }] -}, { - type: _angular_core__WEBPACK_IMPORTED_MODULE_7__.ElementRef -}], _class.propDecorators = { - DisplayGlobalSettingsDialogEvent: [{ - type: _angular_core__WEBPACK_IMPORTED_MODULE_7__.Output - }], - timelineElement: [{ - type: _angular_core__WEBPACK_IMPORTED_MODULE_7__.ViewChild, - args: ['timeline'] - }] -}, _class); -TimelineComponent = (0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([(0,_angular_core__WEBPACK_IMPORTED_MODULE_7__.Component)({ - selector: 'app-timeline-component', - template: _timeline_component_component_html_ngResource__WEBPACK_IMPORTED_MODULE_0__, - styles: [(_timeline_component_component_scss_ngResource__WEBPACK_IMPORTED_MODULE_1___default())] -}), (0,tslib__WEBPACK_IMPORTED_MODULE_9__.__metadata)("design:paramtypes", [_contactTraceCommonServices_common_service__WEBPACK_IMPORTED_MODULE_2__.CommonService, golden_layout__WEBPACK_IMPORTED_MODULE_8__.ComponentContainer, _angular_core__WEBPACK_IMPORTED_MODULE_7__.ElementRef])], TimelineComponent); - -(function (TimelineComponent) { - TimelineComponent.componentTypeName = 'Epi Curve'; -})(TimelineComponent || (TimelineComponent = {})); - -/***/ }), - /***/ 36481: /*!********************************************************************************!*\ !*** ./src/app/visualizationComponents/TwoDComponent/twoD-plugin.component.ts ***! @@ -19793,24 +18325,6 @@ ___CSS_LOADER_EXPORT___.push([module.id, "#main-tabset {\n height: 100%;\n}\n\n module.exports = ___CSS_LOADER_EXPORT___.toString(); -/***/ }), - -/***/ 22254: -/*!****************************************************************************************************************!*\ - !*** ./src/app/visualizationComponents/AlignmentViewComponent/alignment-view-plugin-component.scss?ngResource ***! - \****************************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -// Imports -var ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ 60135); -var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ 40479); -var ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___); -// Module -___CSS_LOADER_EXPORT___.push([module.id, ":host {\n position: absolute;\n overflow: hidden;\n z-index: 1 !important;\n padding: 1px;\n}\n\n/* Button appearance on hover */\n.btn-icon:hover {\n transform: scale(1.1); /* Slight enlarge on hover */\n background-color: rgba(0, 0, 0, 0.1); /* Subtle background color on hover */\n}\n\n.btn-icon {\n margin-right: 10px;\n box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.2);\n}\n\n.flaticon-settings:before {\n font-weight: 800 !important;\n}\n\n.flaticon-pin:before {\n font-weight: 800 !important;\n}\n\n.flaticon-download:before {\n font-weight: 800 !important;\n}\n\n.msa-viewer-container {\n position: relative;\n top: 50px;\n left: 5px;\n padding-right: 5px;\n}\n\n#msa-viewer {\n overflow-y: hidden;\n overflow-x: hidden;\n display: flex;\n gap: 5px;\n}\n\n.title {\n font-size: 32px;\n text-align: right;\n padding-right: 20px;\n}\n\n.canvasLabels {\n overflow-y: auto;\n overflow-x: hidden;\n position: relative;\n}\n\n#searchHighlight {\n width: 1500px;\n position: absolute;\n height: 10px;\n top: 0px;\n left: 0px;\n border: red 2px dotted;\n}\n\n#searchHighlightHolder {\n width: 250px;\n}\n\n.searchHighlight2 {\n background-color: #E3F2FD;\n}\n\n.triangle {\n width: 10px;\n position: relative;\n left: 42px;\n border-left: 8px transparent solid;\n border-right: 8px transparent solid;\n border-bottom: 16px lightgray solid;\n}\n\n#tooltipHolder {\n display: none;\n}\n\n#tooltip {\n background-color: lightgray;\n padding: 5px;\n display: block;\n}\n\n.canvasHolder {\n overflow-x: auto;\n overflow-y: scroll;\n}\n\n#alignmentTop {\n overflow-x: auto;\n height: 160px;\n}\n\n.alignRow {\n display: flex;\n}\n\n.alignName {\n width: 200px;\n margin-right: 5px;\n flex: none;\n}\n\n#miniMapHolder {\n padding: 5px 10px;\n border: 3px black solid;\n background-color: white;\n margin-bottom: 10px;\n}\n\n#miniMap {\n position: relative;\n}\n\n#miniMapTitle {\n margin-bottom: 10px;\n}\n\n#miniMapHighlight {\n display: none;\n background-color: rgba(128, 128, 128, 0.4);\n position: absolute;\n}\n\n.customColorSchemeSelection div {\n justify-content: space-around;\n}\n\n.customColorSchemeSelection label {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.customColorSchemeSelection input {\n width: 46.63px;\n}", ""]); -// Exports -module.exports = ___CSS_LOADER_EXPORT___.toString(); - - /***/ }), /***/ 15996: @@ -19829,24 +18343,6 @@ ___CSS_LOADER_EXPORT___.push([module.id, "/*\n * phylogenetic-plugin.component.c module.exports = ___CSS_LOADER_EXPORT___.toString(); -/***/ }), - -/***/ 5264: -/*!********************************************************************************************************!*\ - !*** ./src/app/visualizationComponents/TimelineComponent/timeline-component.component.scss?ngResource ***! - \********************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -// Imports -var ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ 60135); -var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ 40479); -var ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___); -// Module -___CSS_LOADER_EXPORT___.push([module.id, ":host {\n position: absolute;\n overflow: hidden;\n z-index: 1 !important;\n}\n\n#timeline {\n padding-top: 50px;\n}\n\n#timeline .axis--grid .domain {\n fill: #ddd;\n stroke: none;\n}\n\n#timeline .axis--x .domain,\n#timeline .axis--grid .tick line {\n stroke: #fff;\n}\n\n#timeline .axis--grid .tick--minor line {\n stroke-opacity: 0.5;\n}\n\n#timeline-date-field {\n width: auto;\n}\n\n#epi-timeline-date-field {\n width: auto;\n}\n\n/* Button appearance on hover */\n.btn-icon:hover {\n transform: scale(1.1); /* Slight enlarge on hover */\n background-color: rgba(0, 0, 0, 0.1); /* Subtle background color on hover */\n}\n\n.btn-icon {\n margin-right: 10px;\n box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.2);\n background: white;\n}\n\n.flaticon-settings:before {\n font-weight: 800 !important;\n}\n\n.flaticon-download:before {\n font-weight: 800 !important;\n}\n\n#tool-btn-container {\n display: flex !important;\n}\n\n.tool-btn {\n height: 30px;\n width: 30px !important;\n display: block !important;\n}", ""]); -// Exports -module.exports = ___CSS_LOADER_EXPORT___.toString(); - - /***/ }), /***/ 80122: @@ -20240,7 +18736,7 @@ module.exports = "\r\n\r\n"; /***/ ((module) => { "use strict"; -module.exports = "
\r\n\r\n
\r\n
\r\n
\r\n
\r\n

Please add data files to load...

\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

The following settings are experimental! Use at your own risk!

\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n

\r\n {{\"Micro-Tracing \" | localize}}\r\n {{\"Next\" | localize}}\r\n ®\r\n is not intended to be an alignment program (although it can be used in that way).\r\n For best results, please align your sequences using\r\n an external tool\r\n before loading them into MicrobeTrace.\r\n Click here for additional information.\r\n

\r\n \r\n
\r\n
\r\n
\r\n
\r\n
Align
\r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n\r\n
\r\n
Reference Source
\r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n
\r\n
Reference
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n\r\n\r\n
\r\n \r\n
\r\n
\r\n \r\n\r\n \"logo\"\r\n\r\n
\r\n
\r\n\r\n \r\n {{ message }}\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n \r\n\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n"; +module.exports = "
\r\n\r\n
\r\n
\r\n
\r\n
\r\n

Please add data files to load...

\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

The following settings are experimental! Use at your own risk!

\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n

\r\n {{\"Micro-Tracing \" | localize}}\r\n {{\"Next\" | localize}}\r\n ®\r\n is not intended to be an alignment program (although it can be used in that way).\r\n For best results, please align your sequences using\r\n an external tool\r\n before loading them into MicrobeTrace.\r\n Click here for additional information.\r\n

\r\n \r\n
\r\n
\r\n
\r\n
\r\n
Align
\r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n\r\n
\r\n
Reference Source
\r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n
\r\n
Reference
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n\r\n\r\n
\r\n \r\n
\r\n
\r\n \r\n\r\n \"logo\"\r\n\r\n
\r\n
\r\n\r\n \r\n {{ message }}\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n \r\n\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n"; /***/ }), @@ -20251,18 +18747,7 @@ module.exports = "
\r\n\r\n
{ "use strict"; -module.exports = "
\r\n
\r\n\r\n \r\n
\r\n Microbe\r\n Trace\r\n \"microbetrace\"\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Help\r\n Report Bug\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n\r\n \r\n \r\n
    \r\n Link Color Table\r\n \r\n \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n\r\n\r\n \r\n \r\n
    \r\n Node Color Table\r\n \r\n \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n Welcome to \r\n Microbe\r\n Trace™\r\n \r\n \r\n \"microbetrace\"\r\n
    \r\n
    The Visualization Multitool for Molecular Epidemiology and Bioinformatics
    \r\n
    \r\n
    \r\n
    \r\n Click \r\n here\r\n or Drag & Drop files to load data\r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n\r\n\r\n \r\n\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n\r\n
    \r\n 0\" scrollHeight=\"flex\">\r\n
    \r\n\r\n
    \r\n \r\n \r\n
    \r\n\r\n
    \r\n \r\n\r\n\r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n\r\n
    \r\n
    \r\n
    Distance Metric
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    Prune With
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    Statistics
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n\r\n\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n\r\n \r\n\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    Apply Style
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n\r\n \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n \r\n
    \r\n
    \r\n
    \r\n Welcome to the newest version of MicrobeTrace! If you'd like to open your auspice JSON file in the previous version of MicrobeTrace, please click this link:
    \r\n https://microbetrace.cdc.gov/MicrobeTrace/?url={{auspiceUrlVal}}\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n\r\n \r\n
    \r\n
    \r\n
    \r\n

    \r\n {{\"MicrobeTrace\" | localize}} \r\n v{{version}}\r\n

    \r\n

    \r\n MicrobeTrace is an interactive web application that renders existing data from high-risk contact networks\r\n in an easy-to-use Graphical User Interface (GUI). The network visualization can be customized according to\r\n supplemental data sources and mathematical inferences like the most probable transmission pathways.\r\n MicrobeTrace is a highly responsive, visual sequence analytics tool which can reduce the gap between data\r\n production and analytics and help you to discover, understand, and display relationships (links) between\r\n patients (nodes). MicrobeTrace can be deployed on laptops to locations without any Internet access, thereby\r\n reducing both the startup cost and analysis time and effort.\r\n

    \r\n

    \r\n \r\n Click Here to Learn More\r\n \r\n

    \r\n

    \r\n MicrobeTrace was built by the Molecular Epidemiology and Bionformatics Team at the CDC in Atlanta.

    \r\n \r\n Click Here to See MEBT's Other Tools\r\n \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n\r\n \r\n \r\n\r\n
    \r\n \r\n
    \r\n\r\n\r\n
    \r\n
    \r\n"; - -/***/ }), - -/***/ 80059: -/*!****************************************************************************************************************!*\ - !*** ./src/app/visualizationComponents/AlignmentViewComponent/alignment-view-plugin-component.html?ngResource ***! - \****************************************************************************************************************/ -/***/ ((module) => { - -"use strict"; -module.exports = "
    \n
    \n
    \n
    \n
    Mini Map
    \n
    \n
    Ruler
    \n
    \n
    \n
    \n
    {{ seq.name }}
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n \n \n \n 0\" [attr.y]=\"positionMatrix[i][j]\" [attr.x]=\"spanWidth*i\" [attr.height]=\"100*prop\" [attr.width]=\"spanWidth\" [attr.fill]=\"fillColor(j)\"/>\n \n \n = 100 ? spanWidth*i-10 : spanWidth*i\">{{ i }}\n |\n \n \n = 100 ? spanWidth*i-10 : spanWidth*i-5\">{{ i }}\n :\n \n \n \n \n \n \n 0\" [attr.transform]=\"'translate(' + spanWidth*i + ', ' + positionMatrix[i][0] + ') scale(' + spanWidth/100 + ', ' + nt[0] + ')'\" \n [attr.fill]=\"fillColor(0)\">\n \n \n \n 0\" [attr.transform]=\"'translate(' + spanWidth*i + ', ' + positionMatrix[i][1] + ') scale(' + spanWidth/100 + ', ' + nt[1] + ')'\" \n [attr.fill]=\"fillColor(1)\"\n d=\"M 100 28 C 100 -13 0 -13 0 50 C 0 113 100 113 100 72 L 75 72 C 75 90 30 90 30 50 C 30 10 75 10 75 28 L 100 28\"/>\n 0\" [attr.transform]=\"'translate(' + spanWidth*i + ', ' + positionMatrix[i][2] + ') scale(' + spanWidth/100 + ', ' + nt[2] + ')'\" \n [attr.fill]=\"fillColor(2)\"\n d=\"M 100 28 C 100 -13 0 -13 0 50 C 0 113 100 113 100 72 L 100 48 L 55 48 L 55 72 L 75 72 C 75 90 30 90 30 50 C 30 10 75 5 75 28 L 100 28\"/>\n 0\" [attr.transform]=\"'translate(' + spanWidth*i + ', ' + positionMatrix[i][3] + ') scale(' + spanWidth/100 + ', ' + nt[3] + ')'\" \n [attr.fill]=\"fillColor(3)\"\n d=\"M 0 0 L 0 20 L 35 20 L 35 100 L 65 100 L 65 20 L 100 20 L 100 0 L 0 0\"/>\n\n \n = 100 ? spanWidth*i-10 : spanWidth*i\">{{ i }}\n |\n \n \n = 100 ? spanWidth*i-10 : spanWidth*i-5\">{{ i }}\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
    \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
    \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
    "; +module.exports = "
    \r\n
    \r\n\r\n \r\n
    \r\n Microbe\r\n Trace\r\n \"microbetrace\"\r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Help\r\n Report Bug\r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
      \r\n
      \r\n \r\n \r\n \r\n \r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n \r\n \r\n
      \r\n
      \r\n
      \r\n\r\n \r\n \r\n
      \r\n Link Color Table\r\n \r\n \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n\r\n\r\n \r\n \r\n
      \r\n Node Color Table\r\n \r\n \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n \r\n
      \r\n
      \r\n Welcome to \r\n Microbe\r\n Trace™\r\n \r\n \r\n \"microbetrace\"\r\n
      \r\n
      The Visualization Multitool for Molecular Epidemiology and Bioinformatics
      \r\n
      \r\n
      \r\n
      \r\n Click \r\n here\r\n or Drag & Drop files to load data\r\n
      \r\n
      \r\n \r\n \r\n \r\n
      \r\n
      \r\n \r\n
      \r\n\r\n\r\n \r\n\r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n\r\n
      \r\n 0\" scrollHeight=\"flex\">\r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n\r\n
      \r\n \r\n\r\n\r\n \r\n
      \r\n
      \r\n
      \r\n \r\n \r\n\r\n
      \r\n
      \r\n
      Distance Metric
      \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n
      Prune With
      \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n \r\n
      \r\n \r\n
      \r\n
      \r\n
      Statistics
      \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n\r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n\r\n\r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n \r\n\r\n \r\n\r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n
      Apply Style
      \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n\r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n\r\n \r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n \r\n \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n\r\n \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n\r\n \r\n
      \r\n
      \r\n
      \r\n Welcome to the newest version of MicrobeTrace! If you'd like to open your auspice JSON file in the previous version of MicrobeTrace, please click this link:
      \r\n https://microbetrace.cdc.gov/MicrobeTrace/?url={{auspiceUrlVal}}\r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n\r\n \r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n\r\n\r\n \r\n
      \r\n
      \r\n
      \r\n

      \r\n {{\"MicrobeTrace\" | localize}} \r\n v{{version}}\r\n

      \r\n

      \r\n MicrobeTrace is an interactive web application that renders existing data from high-risk contact networks\r\n in an easy-to-use Graphical User Interface (GUI). The network visualization can be customized according to\r\n supplemental data sources and mathematical inferences like the most probable transmission pathways.\r\n MicrobeTrace is a highly responsive, visual sequence analytics tool which can reduce the gap between data\r\n production and analytics and help you to discover, understand, and display relationships (links) between\r\n patients (nodes). MicrobeTrace can be deployed on laptops to locations without any Internet access, thereby\r\n reducing both the startup cost and analysis time and effort.\r\n

      \r\n

      \r\n \r\n Click Here to Learn More\r\n \r\n

      \r\n

      \r\n MicrobeTrace was built by the Molecular Epidemiology and Bionformatics Team at the CDC in Atlanta.

      \r\n \r\n Click Here to See MEBT's Other Tools\r\n \r\n \r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n\r\n \r\n \r\n\r\n
      \r\n \r\n
      \r\n\r\n\r\n
      \r\n
      \r\n"; /***/ }), @@ -20299,17 +18784,6 @@ module.exports = "
      \r\n
      { - -"use strict"; -module.exports = "
      \r\n\r\n
      \r\n \r\n \r\n \r\n
      \r\n\r\n\r\n \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n
      Epi Curve
      \r\n
      \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n"; - -/***/ }), - /***/ 75066: /*!*********************************************************************************************!*\ !*** ./src/app/visualizationComponents/TwoDComponent/twoD-plugin.component.html?ngResource ***! diff --git a/vendor.js b/vendor.js index cf66c021..cd10f5af 100644 --- a/vendor.js +++ b/vendor.js @@ -3131,9 +3131,9 @@ __webpack_require__.r(__webpack_exports__); /***/ }), /***/ 93032: -/*!****************!*\ - !*** ./number ***! - \****************/ +/*!*****************!*\ + !*** ../number ***! + \*****************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict";