diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 317b1b6..ff3c9a4 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -16,11 +16,10 @@ import { HttpClientModule } from '@angular/common/http'; import { NgModule } from '@angular/core'; -import { FormsModule } from '@angular/forms'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { MatBadgeModule } from '@angular/material/badge'; import { MatButtonModule } from '@angular/material/button'; import { MatButtonToggleModule } from '@angular/material/button-toggle'; -import { MatSlideToggleModule } from '@angular/material/slide-toggle'; import { MatCardModule } from '@angular/material/card'; import { MatCheckboxModule } from '@angular/material/checkbox'; import { MatChipsModule } from '@angular/material/chips'; @@ -37,6 +36,7 @@ import { MatProgressBarModule } from '@angular/material/progress-bar'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatRadioModule } from '@angular/material/radio'; import { MatSelectModule } from '@angular/material/select'; +import { MatSlideToggleModule } from '@angular/material/slide-toggle'; import { MatTabsModule } from '@angular/material/tabs'; import { MatToolbarModule } from '@angular/material/toolbar'; import { MatTooltipModule } from '@angular/material/tooltip'; @@ -48,16 +48,20 @@ import { IframePreviewComponent } from './components-small/iframe-preview/iframe import { ImagePreviewComponent } from './components-small/image-preview/image-preview.component'; import { ImportExperimentComponent } from './components-small/import-experiment/import-experiment.component'; import { MarkdownPreviewComponent } from './components-small/markdown-preview/markdown-preview.component'; +import { PluginFilterEditorComponent } from './components-small/plugin-filter-editor/plugin-filter-editor.component'; +import { PluginFilterNodeComponent } from './components-small/plugin-filter-node/plugin-filter-node.component'; import { PluginLastUsedComponent } from './components-small/plugin-last-used/plugin-last-used.component'; import { PluginListItemComponent } from './components-small/plugin-list-item/plugin-list-item.component'; import { PluginPreviewComponent } from './components-small/plugin-preview/plugin-preview.component'; import { QueryParamPreviewComponent } from './components-small/query-param-preview/query-param-preview.component'; import { RawTextPreviewComponent } from './components-small/raw-text-preview/raw-text-preview.component'; import { StepStatusComponent } from './components-small/step-status/step-status.component'; +import { TemplateDetailsComponent } from './components-small/template-details/template-details.component'; import { DataDetailComponent } from './components/data-detail/data-detail.component'; import { DataPreviewComponent } from './components/data-preview/data-preview.component'; import { ExperimentDataComponent } from './components/experiment-data/experiment-data.component'; import { ExperimentTimelineComponent } from './components/experiment-timeline/experiment-timeline.component'; +import { ExperimentWorkspaceDetailComponent } from './components/experiment-workspace-detail/experiment-workspace-detail.component'; import { ExperimentWorkspaceComponent } from './components/experiment-workspace/experiment-workspace.component'; import { ExperimentComponent } from './components/experiment/experiment.component'; import { ExperimentsPageComponent } from './components/experiments-page/experiments-page.component'; @@ -70,23 +74,18 @@ import { PluginUiframeComponent } from './components/plugin-uiframe/plugin-uifra import { PreviewListComponent } from './components/preview-list/preview-list.component'; import { SettingsPageComponent } from './components/settings-page/settings-page.component'; import { SubstepsDetailsComponent } from './components/substeps-details/substeps-details.component'; +import { TabGroupListComponent } from './components/tab-group-list/tab-group-list.component'; import { TimelineStepNavComponent } from './components/timeline-step-nav/timeline-step-nav.component'; import { TimelineStepComponent } from './components/timeline-step/timeline-step.component'; import { TimelineSubstepsComponent } from './components/timeline-substeps/timeline-substeps.component'; +import { ChangeUiTemplateDialog } from './dialogs/change-ui-template/change-ui-template.dialog'; import { ChooseDataDialog } from './dialogs/choose-data/choose-data.dialog'; import { ChoosePluginDialog } from './dialogs/choose-plugin/choose-plugin.dialog'; +import { ChooseTemplateDialog } from './dialogs/choose-template/choose-template.dialog'; import { CreateExperimentDialog } from './dialogs/create-experiment/create-experiment.dialog'; import { DeleteDialog } from './dialogs/delete-dialog/delete-dialog.dialog'; import { ExportExperimentDialog } from './dialogs/export-experiment/export-experiment.dialog'; import { MarkdownHelpDialog } from './dialogs/markdown-help/markdown-help.dialog'; -import { ChangeUiTemplateDialog } from './dialogs/change-ui-template/change-ui-template.dialog'; -import { ReactiveFormsModule } from '@angular/forms'; -import { TemplateDetailsComponent } from './components-small/template-details/template-details.component'; -import { ExperimentWorkspaceDetailComponent } from './components/experiment-workspace-detail/experiment-workspace-detail.component'; -import { PluginFilterNodeComponent } from './components-small/plugin-filter-node/plugin-filter-node.component'; -import { PluginFilterEditorComponent } from './components-small/plugin-filter-editor/plugin-filter-editor.component'; -import { TabGroupListComponent } from './components/tab-group-list/tab-group-list.component'; -import { ChooseTemplateDialog } from './dialogs/choose-template/choose-template.dialog'; @NgModule({ declarations: [ @@ -165,6 +164,7 @@ import { ChooseTemplateDialog } from './dialogs/choose-template/choose-template. MatRadioModule, MatMenuModule, MatBadgeModule, + MatRadioModule, ], providers: [ { provide: MAT_FORM_FIELD_DEFAULT_OPTIONS, useValue: { appearance: "outline" } } diff --git a/src/app/components-small/plugin-filter-node/plugin-filter-node.component.html b/src/app/components-small/plugin-filter-node/plugin-filter-node.component.html index 52fd66e..8d91a9e 100644 --- a/src/app/components-small/plugin-filter-node/plugin-filter-node.component.html +++ b/src/app/components-small/plugin-filter-node/plugin-filter-node.component.html @@ -13,7 +13,8 @@ Filter - +
@@ -22,11 +23,13 @@ OR
- - @@ -45,7 +48,8 @@ Not: + [depth]="depth + 1" (filterOut)="updateChild($event, i)" + (delete)="deleteChild(i)">
Not: @@ -69,12 +73,20 @@ + + Examples: ">= 0.1.0", "== 1.0.2", "< 2.0.0", ">= 1.0.0, < 2.0.0" , "!= 1.0.14" + + + Examples: "processing", "conversion", "dataloader", "visualization", "interaction" +
- Invert - Negate this filter + + Invert - Negate this filter + -
\ No newline at end of file +
diff --git a/src/app/components-small/template-details/template-details.component.html b/src/app/components-small/template-details/template-details.component.html index 5b2777b..77e7b12 100644 --- a/src/app/components-small/template-details/template-details.component.html +++ b/src/app/components-small/template-details/template-details.component.html @@ -1,13 +1,14 @@

Template Tab

- - Location - - +
+

Show tab in:

+ + {{location.value}} - - - + + +
Name: @@ -21,7 +22,8 @@

Template Tab

Sort Key:
- +
- \ No newline at end of file + diff --git a/src/app/components-small/template-details/template-details.component.sass b/src/app/components-small/template-details/template-details.component.sass index 17e9dab..5310484 100644 --- a/src/app/components-small/template-details/template-details.component.sass +++ b/src/app/components-small/template-details/template-details.component.sass @@ -5,6 +5,9 @@ resize: none overflow: hidden +.location-chooser + margin-block-end: 1rem + details margin-left: 2rem @@ -19,4 +22,4 @@ dd font-size: 0.9rem dd - margin-bottom: 1em \ No newline at end of file + margin-bottom: 1em diff --git a/src/app/components-small/template-details/template-details.component.ts b/src/app/components-small/template-details/template-details.component.ts index 35c6251..ea531fa 100644 --- a/src/app/components-small/template-details/template-details.component.ts +++ b/src/app/components-small/template-details/template-details.component.ts @@ -2,8 +2,7 @@ import { Component, Input, OnInit } from '@angular/core'; import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms'; import { ApiLink, ApiResponse } from 'src/app/services/api-data-types'; import { PluginRegistryBaseService } from 'src/app/services/registry.service'; -import { TemplateApiObject, TemplateTabApiObject } from 'src/app/services/templates.service'; -import { TAB_GROUP_NAME_OVERRIDES } from 'src/app/services/templates.service'; +import { TAB_GROUP_NAME_OVERRIDES, TemplateApiObject, TemplateTabApiObject } from 'src/app/services/templates.service'; export function isInSetValidator(validValues: any[]): Validators { return (control: FormControl): { [key: string]: any } | null => { @@ -25,7 +24,18 @@ export class TemplateDetailsComponent implements OnInit { filterString: string = "{}"; - tabGroupNameOverrides = { ...TAB_GROUP_NAME_OVERRIDES }; + tabGroupNameOverrides = Object.entries(TAB_GROUP_NAME_OVERRIDES) + .map(entry => { return { key: entry[0], value: entry[1] }; }) + .sort((a, b) => { + if (a.key === "workspace") { + return -1; + } + else if (b.key === "workspace") { + return 1; + } + return a.value.localeCompare(b.value) + }); + private initialValues = { name: "", diff --git a/src/app/components/experiment-workspace/experiment-workspace.component.html b/src/app/components/experiment-workspace/experiment-workspace.component.html index c428f3a..defcb66 100644 --- a/src/app/components/experiment-workspace/experiment-workspace.component.html +++ b/src/app/components/experiment-workspace/experiment-workspace.component.html @@ -25,6 +25,8 @@

Experiment Workspace

[hidden]="!expandedPluginDescription">expand_more {{activePlugin.title}} (@{{activePlugin.version}}) + {{activePlugin.identifier}} +
diff --git a/src/app/components/experiment-workspace/experiment-workspace.component.sass b/src/app/components/experiment-workspace/experiment-workspace.component.sass index bbd60cc..17e9d7a 100644 --- a/src/app/components/experiment-workspace/experiment-workspace.component.sass +++ b/src/app/components/experiment-workspace/experiment-workspace.component.sass @@ -21,6 +21,12 @@ justify-content: space-between align-items: center +.plugin-identifier + font-weight: 200 + +.spacer + flex-grow: 1 + .card-list margin-inline: -16px diff --git a/src/app/components/navbar/navbar.component.html b/src/app/components/navbar/navbar.component.html index 62dfe1e..361a165 100644 --- a/src/app/components/navbar/navbar.component.html +++ b/src/app/components/navbar/navbar.component.html @@ -5,7 +5,8 @@ - + Info + queryParamsHandling="merge" routerLinkActive="active"> Data + queryParamsHandling="merge" routerLinkActive="active"> Timeline + queryParamsHandling="merge" routerLinkActive="active" *ngFor="let tab of experimentExtraTabs"> {{tab.name}} @@ -36,7 +36,7 @@
-
+
{{currentExperiment|async}} diff --git a/src/app/components/navbar/navbar.component.sass b/src/app/components/navbar/navbar.component.sass index a8baae2..4f6b280 100644 --- a/src/app/components/navbar/navbar.component.sass +++ b/src/app/components/navbar/navbar.component.sass @@ -35,6 +35,10 @@ .toolbar-spacer flex-grow: 1 +.experiment-switcher + display: flex + align-items: center + .settings-link display: inline-flex align-items: center diff --git a/src/app/components/plugin-sidebar/plugin-sidebar.component.ts b/src/app/components/plugin-sidebar/plugin-sidebar.component.ts index 6b3059e..abd637f 100644 --- a/src/app/components/plugin-sidebar/plugin-sidebar.component.ts +++ b/src/app/components/plugin-sidebar/plugin-sidebar.component.ts @@ -120,7 +120,13 @@ export class PluginSidebarComponent implements OnInit, OnDestroy { }); this.registry.resolveRecursiveRels([["plugin", "collection"]]).then((apiLink) => { - const pluginTypes = new Map([["dataloader", "Dataloader Plugins"], ["processing", "Processing Plugins"], ["conversion", "Conversion Plugins"], ["visualization", "Visualization Plugins"]]); + const pluginTypes = new Map([ + ["dataloader", "Dataloader Plugins"], + ["processing", "Processing Plugins"], + ["conversion", "Conversion Plugins"], + ["visualization", "Visualization Plugins"], + ["interaction", "Interaction Plugins"] + ]); pluginTypes.forEach((name, pluginType) => { const query = new URLSearchParams(); query.set("type", pluginType) diff --git a/src/app/components/plugin-tab/plugin-tab.component.html b/src/app/components/plugin-tab/plugin-tab.component.html index 29f17da..c89bdb7 100644 --- a/src/app/components/plugin-tab/plugin-tab.component.html +++ b/src/app/components/plugin-tab/plugin-tab.component.html @@ -1,7 +1,8 @@ diff --git a/src/app/components/plugin-uiframe/plugin-uiframe.component.html b/src/app/components/plugin-uiframe/plugin-uiframe.component.html index d1263a7..63dd84e 100644 --- a/src/app/components/plugin-uiframe/plugin-uiframe.component.html +++ b/src/app/components/plugin-uiframe/plugin-uiframe.component.html @@ -5,7 +5,7 @@ -