From 7c12ad17dc1aaeec1d1fe292241c18f945e1199c Mon Sep 17 00:00:00 2001 From: Steven Guiheux Date: Tue, 5 Jul 2022 17:53:25 +0200 Subject: [PATCH 01/10] refactor(ui): remove semantic from run summary and workflow tags --- .../shared/ascode/events/ascode.event.html | 7 +- .../shared/ascode/events/ascode.event.scss | 4 +- ui/src/app/shared/shared.module.ts | 8 +- .../workflow.sidebar.run.component.html | 8 +- .../workflow.sidebar.run.component.scss | 3 + .../workflow.sidebar.run.component.ts | 11 - .../run/summary/workflow.run.summary.html | 178 +++++++-------- .../run/summary/workflow.run.summary.scss | 207 ++++++++++-------- ui/src/app/views/workflow/show/workflow.scss | 2 +- .../app/views/workflow/workflow.component.ts | 15 +- ui/src/app/views/workflow/workflow.html | 87 +++----- ui/src/app/views/workflow/workflow.scss | 76 +++---- 12 files changed, 291 insertions(+), 315 deletions(-) diff --git a/ui/src/app/shared/ascode/events/ascode.event.html b/ui/src/app/shared/ascode/events/ascode.event.html index a79bb30c5f..73d978eddd 100644 --- a/ui/src/app/shared/ascode/events/ascode.event.html +++ b/ui/src/app/shared/ascode/events/ascode.event.html @@ -20,6 +20,9 @@ - + + diff --git a/ui/src/app/shared/ascode/events/ascode.event.scss b/ui/src/app/shared/ascode/events/ascode.event.scss index 1b2c64bc14..6b80fdc236 100644 --- a/ui/src/app/shared/ascode/events/ascode.event.scss +++ b/ui/src/app/shared/ascode/events/ascode.event.scss @@ -1,5 +1,4 @@ .asCodeEvents { - ul { li { ul { @@ -7,6 +6,9 @@ } } } + .footer { + text-align: right; + } } diff --git a/ui/src/app/shared/shared.module.ts b/ui/src/app/shared/shared.module.ts index 8f8c7950ae..00a28b8a4a 100644 --- a/ui/src/app/shared/shared.module.ts +++ b/ui/src/app/shared/shared.module.ts @@ -124,7 +124,9 @@ import { NzPopconfirmModule } from 'ng-zorro-antd/popconfirm'; import { en_US, NZ_I18N } from 'ng-zorro-antd/i18n'; import { NzIconModule } from 'ng-zorro-antd/icon'; import { IconDefinition } from '@ant-design/icons-angular'; -import { BellFill, BookOutline, CalendarOutline, CaretDownFill, CaretRightFill, CaretUpFill, CheckOutline, CopyOutline, DeleteOutline, DragOutline, EyeInvisibleOutline, EyeOutline, KeyOutline, HistoryOutline, InfoCircleOutline, PhoneFill, PlusOutline, PlusSquareOutline, QuestionOutline, QuestionCircleOutline, RestOutline, SaveOutline, SettingFill, ShareAltOutline, StarOutline, TableOutline, TagsOutline, ToolFill, UnlockFill, UnorderedListOutline, UploadOutline, WarningOutline } from '@ant-design/icons-angular/icons' +import { ArrowDownOutline, ArrowRightOutline, BellFill, BookOutline, CalendarOutline, CaretDownFill, CaretRightFill, CaretUpFill, CheckOutline, CopyOutline, DeleteOutline, DragOutline, EyeInvisibleOutline, EyeOutline, KeyOutline, + HistoryOutline, InfoCircleOutline, PhoneFill, PlusOutline, PlusSquareOutline, QuestionOutline, QuestionCircleOutline, RestOutline, SaveOutline, SettingFill, ShareAltOutline, StarOutline, StarFill, SyncOutline, + TableOutline, TagsOutline, ToolFill, UnlockFill, UnorderedListOutline, UploadOutline, UserOutline, WarningOutline } from '@ant-design/icons-angular/icons' import { NzDropDownModule } from 'ng-zorro-antd/dropdown'; import { NzTagModule } from 'ng-zorro-antd/tag'; import { NzPopoverModule } from 'ng-zorro-antd/popover'; @@ -154,7 +156,9 @@ const ngZorroConfig: NzConfig = { icon: {nzTheme: "outline"} }; -const icons: IconDefinition[] = [ BellFill, BookOutline, CalendarOutline, CaretDownFill, CaretRightFill, CaretUpFill, CheckOutline, CopyOutline, DeleteOutline, DragOutline, EyeInvisibleOutline, EyeOutline, KeyOutline, HistoryOutline, InfoCircleOutline, PhoneFill, PlusOutline, PlusSquareOutline, QuestionOutline, QuestionCircleOutline, RestOutline, SaveOutline, SettingFill, ShareAltOutline, StarOutline, TableOutline, TagsOutline, ToolFill, UnlockFill, UnorderedListOutline, UploadOutline, WarningOutline ]; +const icons: IconDefinition[] = [ ArrowDownOutline, ArrowRightOutline, BellFill, BookOutline, CalendarOutline, CaretDownFill, CaretRightFill, CaretUpFill, CheckOutline, CopyOutline, DeleteOutline, DragOutline, + EyeInvisibleOutline, EyeOutline, KeyOutline, HistoryOutline, InfoCircleOutline, PhoneFill, PlusOutline, PlusSquareOutline, QuestionOutline, QuestionCircleOutline, + RestOutline, SaveOutline, SettingFill, ShareAltOutline, StarOutline, StarFill, SyncOutline, TableOutline, TagsOutline, ToolFill, UnlockFill, UnorderedListOutline, UploadOutline, UserOutline, WarningOutline ]; @NgModule({ imports: [ diff --git a/ui/src/app/shared/workflow/sidebar/run-list/workflow.sidebar.run.component.html b/ui/src/app/shared/workflow/sidebar/run-list/workflow.sidebar.run.component.html index f82890650f..4dd38f346f 100644 --- a/ui/src/app/shared/workflow/sidebar/run-list/workflow.sidebar.run.component.html +++ b/ui/src/app/shared/workflow/sidebar/run-list/workflow.sidebar.run.component.html @@ -1,9 +1,7 @@ - - - - + + +
diff --git a/ui/src/app/shared/workflow/sidebar/run-list/workflow.sidebar.run.component.scss b/ui/src/app/shared/workflow/sidebar/run-list/workflow.sidebar.run.component.scss index 6c152b6758..7039a11eaf 100644 --- a/ui/src/app/shared/workflow/sidebar/run-list/workflow.sidebar.run.component.scss +++ b/ui/src/app/shared/workflow/sidebar/run-list/workflow.sidebar.run.component.scss @@ -213,4 +213,7 @@ } } } + nz-select { + padding: 5px 10px 5px 5px; + } } diff --git a/ui/src/app/shared/workflow/sidebar/run-list/workflow.sidebar.run.component.ts b/ui/src/app/shared/workflow/sidebar/run-list/workflow.sidebar.run.component.ts index efff845f57..a6963cb021 100644 --- a/ui/src/app/shared/workflow/sidebar/run-list/workflow.sidebar.run.component.ts +++ b/ui/src/app/shared/workflow/sidebar/run-list/workflow.sidebar.run.component.ts @@ -252,17 +252,6 @@ export class WorkflowSidebarRunListComponent implements OnDestroy { } } - filterTags(options: Array, query: string): Array | false { - if (!options) { - return false; - } - if (!query || query.length < 3) { - return options.slice(0, 100); - } - let queryLowerCase = query.toLowerCase(); - return options.filter(o => o.toLowerCase().indexOf(queryLowerCase) !== -1); - } - confirmCopy() { this._toast.success('', 'Workflow run version copied!'); } diff --git a/ui/src/app/views/workflow/run/summary/workflow.run.summary.html b/ui/src/app/views/workflow/run/summary/workflow.run.summary.html index 80af90552f..613d4992f4 100644 --- a/ui/src/app/views/workflow/run/summary/workflow.run.summary.html +++ b/ui/src/app/views/workflow/run/summary/workflow.run.summary.html @@ -1,104 +1,86 @@
-
-
-
-
-
-
-
-
-
- - {{workflowRun.start | amLocal | amDateFormat: 'DD/MM/YYYY HH:mm' }} -
-
- - {{workflowRun.num}}.{{workflowRun.last_subnumber}} -
-
-
- - {{workflowRun.last_execution | amLocal | amDateFormat: 'DD/MM/YYYY HH:mm' }} -
-
+ + + + + + + {{workflowRun.start | amLocal | amDateFormat: 'DD/MM/YYYY HH:mm' }} + + + #{{workflowRun.num}}.{{workflowRun.last_subnumber}} + + + + + {{workflowRun.last_execution | amLocal | amDateFormat: 'DD/MM/YYYY HH:mm' }} + + + + + + + + + + +
+
-
-
-
-
-
-
- - -
-
- -
- -
- {{author}} -
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
- -
-
- -
-
-
- -
+ {{author}} + + + + + + + + + + + + + + + + +

                         
-
-
- - -
-
+ + + +
+ +
-
-
-
+ +
diff --git a/ui/src/app/views/workflow/run/summary/workflow.run.summary.scss b/ui/src/app/views/workflow/run/summary/workflow.run.summary.scss index a42208f96e..f7967f9db3 100644 --- a/ui/src/app/views/workflow/run/summary/workflow.run.summary.scss +++ b/ui/src/app/views/workflow/run/summary/workflow.run.summary.scss @@ -1,111 +1,138 @@ @import '../../../../../common'; - .workflowRunStatus { - :host-context(.night) & { - .success { - background-color: $darkTheme_night_green; - border: 2px solid $darkTheme_green; - border-top: none; - } - - .fail { - background-color: $darkTheme_night_red; - border: 2px solid $darkTheme_red; - border-top: none; - } - - .building { - background-color: $darkTheme_night_blue; - border: 2px solid $darkTheme_blue; - border-top: none; - } - - .inactive { - background-color: $darkTheme_night_grey; - border: 2px solid grey; - border-top: none; - } - } - - .winfo { - z-index: 1; + :host-context(.night) & { + button { + border-color: rgba(255, 255, 255, 0.85); } - .cardinfo { - border-radius: 0 0 0.28571429rem 0.28571429rem; + .success { + background-color: $darkTheme_night_green; + border: 2px solid $darkTheme_green; + border-top: none; } - .running { - border: none; + .fail { + background-color: $darkTheme_night_red; + border: 2px solid $darkTheme_red; + border-top: none; } - .success { - background-color: $cds_color_light_green; - border: 2px solid $cds_color_green; - border-top: none; + .building { + background-color: $darkTheme_night_blue; + border: 2px solid $darkTheme_blue; + border-top: none; } - .fail { - background-color: $cds_color_light_red; - border: 2px solid $cds_color_red; - border-top: none; + .inactive { + background-color: $darkTheme_night_grey; + border: 2px solid grey; + border-top: none; } + } - .inactive { - background-color: $cds_color_light_grey; - border: 2px solid grey; - border-top: none; + .center { + text-align: center; + } + + .alignRight { + text-align: right; + } + + nz-card { + z-index: 2; + } + + nz-row:not(:last-child) { + margin-bottom: 15px; + } + + nz-row.bordered { + padding-top: 15px; + border-top: 1px solid rgba(34,36,38,.1); + } + + button { + i { + margin-right: inherit; + } + } + + i { + margin-right: 5px; + } + + .success { + background-color: $cds_color_light_green; + border: 2px solid $cds_color_green; + border-top: none; + } + + .fail { + background-color: $cds_color_light_red; + border: 2px solid $cds_color_red; + border-top: none; + } + + .inactive { + background-color: $cds_color_light_grey; + border: 2px solid grey; + border-top: none; + } + + .building { + background-color: $cds_color_light_teal; + border: 2px solid $cds_color_teal; + border-top: none; + } + + .semicircle { + width: 3em; + position: absolute; + height: 3em; + border: 2px solid black; + border-radius: 50% !important; + margin: 0 auto 0em auto; + bottom: -1.5em; + left: calc(50% - 1.5em); + z-index: 1; + cursor: pointer; + + i { + font-size: 1em; + position: absolute; + bottom: 3px; + left: 30%; } - .building { - background-color: $cds_color_light_teal; - border: 2px solid $cds_color_teal; - border-top: none; + &.success { + border-color: $cds_color_green; } - .semicircle { - width: 3em; - position: absolute; - height: 3em; - border: 2px solid black; - border-radius: 50% !important; - margin: 0 auto 0em auto; - bottom: -1.5em; - left: calc(50% - 1.5em); - z-index: -1; - - .icon { - position: absolute; - bottom: 0; - left: 17%; - } - - &.success { - border-color: $cds_color_green; - } - - &.fail { - border-color: $cds_color_red; - } - - &.inactive { - border-color: grey; - } - - &.building { - border-color: $cds_color_teal; - } + &.fail { + border-color: $cds_color_red; } - .spawninfo { - .scrollable { - max-height: 300px; - overflow-y: auto; - } + &.inactive { + border-color: grey; + } - pre { - white-space: pre-line; - font-size: 0.85em; - } + &.building { + border-color: $cds_color_teal; } + } + + .black { + background-color: #141414; + } + .scrollable { + max-height: 300px; + overflow-y: auto; + padding: 1em 1.5em; + color: white; + } + + pre { + white-space: pre-line; + font-size: 0.9em; + } } diff --git a/ui/src/app/views/workflow/show/workflow.scss b/ui/src/app/views/workflow/show/workflow.scss index 00b79dc965..bfc6dcd71d 100644 --- a/ui/src/app/views/workflow/show/workflow.scss +++ b/ui/src/app/views/workflow/show/workflow.scss @@ -39,6 +39,6 @@ .ascodeButton { position: absolute; right: 15px; - top: 121px; + margin-top: 7px; } } diff --git a/ui/src/app/views/workflow/workflow.component.ts b/ui/src/app/views/workflow/workflow.component.ts index bf9b47cd3c..33a992b4c5 100644 --- a/ui/src/app/views/workflow/workflow.component.ts +++ b/ui/src/app/views/workflow/workflow.component.ts @@ -73,6 +73,9 @@ export class WorkflowComponent implements OnInit, OnDestroy { selectecHookRef: string; workflowV3Enabled: boolean; + asCodeTagColor: string = ''; + templateTagColor: string = ''; + previewV3TagColor: string = ''; constructor( private _activatedRoute: ActivatedRoute, @@ -162,6 +165,13 @@ export class WorkflowComponent implements OnInit, OnDestroy { this._store.dispatch(new SelectHook({ hook: h, node: this.workflow.workflow_data.node })); } } + if (this.workflow && this.workflow.from_repository && (!this.workflow.as_code_events || this.workflow.as_code_events.length === 0)) { + this.asCodeTagColor = 'green'; + } else if (this.workflow && this.workflow.as_code_events && this.workflow.as_code_events.length > 0) { + this.asCodeTagColor = 'orange'; + } else if (this.workflow && !this.workflow.from_repository && (!this.workflow.as_code_events || this.workflow.as_code_events.length === 0)) { + this.asCodeTagColor = ''; + } this._cd.markForCheck(); }); @@ -199,7 +209,10 @@ export class WorkflowComponent implements OnInit, OnDestroy { this._store.dispatch(new UpdateFavoriteWorkflow({ projectKey: this.project.key, workflowName: this.workflow.name - })).pipe(finalize(() => this.loadingFav = false)) + })).pipe(finalize(() => { + this.loadingFav = false; + this._cd.markForCheck() + })) .subscribe(() => this._toast.success('', this._translate.instant('common_favorites_updated'))); } diff --git a/ui/src/app/views/workflow/workflow.html b/ui/src/app/views/workflow/workflow.html index 65eee23267..614b823e2d 100644 --- a/ui/src/app/views/workflow/workflow.html +++ b/ui/src/app/views/workflow/workflow.html @@ -1,21 +1,16 @@
-
-
- +
+ + + + +
-
- - as code - - +
+ as code +
@@ -24,33 +19,23 @@ -

{{'workflow_repository_help_line_1' | translate}}

-

{{'workflow_repository_help_line_2' | translate}}

+

Your workflow was not imported from your code.

+

Manage your workflow as code from your repository to automatically update it with changes on your branches.

-
- - template - - +
+ template +
@@ -61,36 +46,30 @@ class="ui orange label mini">{{'common_not_up_to_date' | translate }}

- -
diff --git a/ui/src/app/views/workflow/workflow.scss b/ui/src/app/views/workflow/workflow.scss index 4bb82787fe..4334972054 100644 --- a/ui/src/app/views/workflow/workflow.scss +++ b/ui/src/app/views/workflow/workflow.scss @@ -1,5 +1,9 @@ @import "../../../common"; +.floatRight { + float: right; +} + .workflow-page { height: 100%; display: flex; @@ -23,24 +27,6 @@ $sidebarWidth: 255px; .sidebar { width: $sidebarWidth; height: 100%; - - .closeButton { - position: absolute; - display: block; - top: 0; - right: 0; - padding: 5px; - font-size: 30px; - line-height: 30px; - height: 40px; - width: 40px; - margin: 0; - cursor: pointer; - - &:hover { - opacity: 0.6; - } - } } .content-wrap { @@ -62,50 +48,40 @@ $sidebarWidth: 255px; } } -i.star { - color: black; - margin-left: 15px; - font-size: 1.3em; - - &.favorite { - color: $cds_favorite_color; - - &:hover { - opacity: 0.4; - } - } - - &.unfavorite { - opacity: 0.3; - - &:hover { - color: $cds_favorite_color; - opacity: 1; - } - } -} - .labelFeature { position: relative; top: -3px; margin-left: 10px; + margin-top: 5px; - &.preview { - top: -2px; - margin: 0 10px; + nz-tag { + cursor: pointer; } } +i.favorite { + color: $cds_favorite_color; + &:hover { + opacity: 0.4; + } +} +.star { + cursor: pointer; + margin-left: 15px; + font-size: 1.3em; +} + .infoPopup { width: 450px; word-break: break-word; - + app-ascode-event { + min-height: 100px; + } .footer { display: flex; - - div { - flex-grow: 1; - flex-basis: 0; - } + align-items: center; + button { + margin-left: auto; + } } } From 2abcba05941ae80143978a9a690f84a2fb0f140d Mon Sep 17 00:00:00 2001 From: Steven Guiheux Date: Wed, 6 Jul 2022 10:27:00 +0200 Subject: [PATCH 02/10] refactor(ui): remove semantic from workflow summary --- ui/src/app/shared/shared.module.ts | 4 +- .../run/summary/workflow.run.summary.html | 2 + .../run/summary/workflow.run.summary.scss | 1 + ui/src/app/views/workflow/show/workflow.html | 98 ++++++++----------- ui/src/app/views/workflow/show/workflow.scss | 30 +++--- ui/src/app/views/workflow/workflow.html | 9 +- ui/src/app/views/workflow/workflow.scss | 4 + 7 files changed, 68 insertions(+), 80 deletions(-) diff --git a/ui/src/app/shared/shared.module.ts b/ui/src/app/shared/shared.module.ts index 00a28b8a4a..e2e128bc91 100644 --- a/ui/src/app/shared/shared.module.ts +++ b/ui/src/app/shared/shared.module.ts @@ -124,7 +124,7 @@ import { NzPopconfirmModule } from 'ng-zorro-antd/popconfirm'; import { en_US, NZ_I18N } from 'ng-zorro-antd/i18n'; import { NzIconModule } from 'ng-zorro-antd/icon'; import { IconDefinition } from '@ant-design/icons-angular'; -import { ArrowDownOutline, ArrowRightOutline, BellFill, BookOutline, CalendarOutline, CaretDownFill, CaretRightFill, CaretUpFill, CheckOutline, CopyOutline, DeleteOutline, DragOutline, EyeInvisibleOutline, EyeOutline, KeyOutline, +import { ArrowDownOutline, ArrowRightOutline, BellFill, BookOutline, CalendarOutline, CaretDownFill, CaretRightFill, CaretUpFill, CheckOutline, CodeOutline, CopyOutline, DeleteOutline, DragOutline, EyeInvisibleOutline, EyeOutline, KeyOutline, HistoryOutline, InfoCircleOutline, PhoneFill, PlusOutline, PlusSquareOutline, QuestionOutline, QuestionCircleOutline, RestOutline, SaveOutline, SettingFill, ShareAltOutline, StarOutline, StarFill, SyncOutline, TableOutline, TagsOutline, ToolFill, UnlockFill, UnorderedListOutline, UploadOutline, UserOutline, WarningOutline } from '@ant-design/icons-angular/icons' import { NzDropDownModule } from 'ng-zorro-antd/dropdown'; @@ -156,7 +156,7 @@ const ngZorroConfig: NzConfig = { icon: {nzTheme: "outline"} }; -const icons: IconDefinition[] = [ ArrowDownOutline, ArrowRightOutline, BellFill, BookOutline, CalendarOutline, CaretDownFill, CaretRightFill, CaretUpFill, CheckOutline, CopyOutline, DeleteOutline, DragOutline, +const icons: IconDefinition[] = [ ArrowDownOutline, ArrowRightOutline, BellFill, BookOutline, CalendarOutline, CaretDownFill, CaretRightFill, CaretUpFill, CheckOutline, CodeOutline, CopyOutline, DeleteOutline, DragOutline, EyeInvisibleOutline, EyeOutline, KeyOutline, HistoryOutline, InfoCircleOutline, PhoneFill, PlusOutline, PlusSquareOutline, QuestionOutline, QuestionCircleOutline, RestOutline, SaveOutline, SettingFill, ShareAltOutline, StarOutline, StarFill, SyncOutline, TableOutline, TagsOutline, ToolFill, UnlockFill, UnorderedListOutline, UploadOutline, UserOutline, WarningOutline ]; diff --git a/ui/src/app/views/workflow/run/summary/workflow.run.summary.html b/ui/src/app/views/workflow/run/summary/workflow.run.summary.html index 613d4992f4..2fc7a0d392 100644 --- a/ui/src/app/views/workflow/run/summary/workflow.run.summary.html +++ b/ui/src/app/views/workflow/run/summary/workflow.run.summary.html @@ -26,10 +26,12 @@ diff --git a/ui/src/app/views/workflow/run/summary/workflow.run.summary.scss b/ui/src/app/views/workflow/run/summary/workflow.run.summary.scss index f7967f9db3..9ac2c42e72 100644 --- a/ui/src/app/views/workflow/run/summary/workflow.run.summary.scss +++ b/ui/src/app/views/workflow/run/summary/workflow.run.summary.scss @@ -129,6 +129,7 @@ overflow-y: auto; padding: 1em 1.5em; color: white; + border-radius: 3px; } pre { diff --git a/ui/src/app/views/workflow/show/workflow.html b/ui/src/app/views/workflow/show/workflow.html index 59797ecd17..ba63a87a48 100644 --- a/ui/src/app/views/workflow/show/workflow.html +++ b/ui/src/app/views/workflow/show/workflow.html @@ -11,62 +11,48 @@
-
-
-
-
-
-
-
-
-
- - -
-
-
-
- - {{'workflow_edit_as_code' | translate}} - - -
-
- {{'btn_save' | - translate}} -
-
-
-
-
-
- {{'btn_run_workflow' | translate }} -
-
-
-
-
-
-
-
-
-
-
+ + + + + + + + + + + + + + + + + + +
diff --git a/ui/src/app/views/workflow/show/workflow.scss b/ui/src/app/views/workflow/show/workflow.scss index bfc6dcd71d..f1aff679c4 100644 --- a/ui/src/app/views/workflow/show/workflow.scss +++ b/ui/src/app/views/workflow/show/workflow.scss @@ -3,36 +3,32 @@ height: 100%; display: flex; flex-direction: column; - .ml5 { - margin-left: 5px; - } + .workflowShowGraph { width: 100%; flex: 1; overflow: hidden; display: flex; flex-direction: column; - .cardinfo { - margin-top: 1px; - border-radius: 0 0 0.28571429rem 0.28571429rem; - } + .center { text-align: center; } + .alignRight { + text-align: right; + } + app-workflow-graph { margin-top: 10px; flex: 1; } - } - .scrollingContent { - overflow-x: auto; - .paddingContent { - padding: 0; - .viewContent { - .padded { - padding: 0 100px 0 100px; - } - } + + .savePreview { + margin-left: 10px; + } + + .orange { + color: orange; } } diff --git a/ui/src/app/views/workflow/workflow.html b/ui/src/app/views/workflow/workflow.html index 614b823e2d..4d5f10a9ea 100644 --- a/ui/src/app/views/workflow/workflow.html +++ b/ui/src/app/views/workflow/workflow.html @@ -9,7 +9,7 @@
as code + nzPopoverPlacement="rightBottom">as code
template + nzPopoverPlacement="rightBottom">template
@@ -42,9 +42,8 @@

{{ 'workflow_from_template' | translate}} {{workflow.from_template}} - {{'common_not_up_to_date' - | translate }} + {{'common_not_up_to_date' + | translate }}