-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- n8n.io
-
+ = {
mode: '',
activeId: null,
},
- [CREDENTIAL_LIST_MODAL_KEY]: {
- open: false,
- },
[CREDENTIAL_SELECT_MODAL_KEY]: {
open: false,
},
@@ -214,6 +209,8 @@ const module: Module = {
},
draggableStickyPos: (state: IUiState) => state.draggable.stickyPosition,
mappingTelemetry: (state: IUiState) => state.ndv.mappingTelemetry,
+ getCurrentView: (state: IUiState) => state.currentView,
+ isNodeView: (state: IUiState) => [VIEWS.NEW_WORKFLOW.toString(), VIEWS.WORKFLOW.toString(), VIEWS.EXECUTION.toString()].includes(state.currentView),
},
mutations: {
setMainPanelDimensions: (state: IUiState, params: { panelType:string, dimensions: { relativeLeft?: number, relativeRight?: number, relativeWidth?: number }}) => {
@@ -255,6 +252,12 @@ const module: Module = {
toggleSidebarMenuCollapse: (state: IUiState) => {
state.sidebarMenuCollapsed = !state.sidebarMenuCollapsed;
},
+ collapseSidebarMenu: (state: IUiState) => {
+ state.sidebarMenuCollapsed = true;
+ },
+ expandSidebarMenu: (state: IUiState) => {
+ state.sidebarMenuCollapsed = false;
+ },
setCurrentView: (state: IUiState, currentView: string) => {
state.currentView = currentView;
},
diff --git a/packages/editor-ui/src/n8n-theme.scss b/packages/editor-ui/src/n8n-theme.scss
index 4b191e4e1a..1cf97aa44a 100644
--- a/packages/editor-ui/src/n8n-theme.scss
+++ b/packages/editor-ui/src/n8n-theme.scss
@@ -1,5 +1,5 @@
.clickable {
- cursor: pointer;
+ cursor: pointer !important;
}
.primary-color {
color: $color-primary;
diff --git a/packages/editor-ui/src/plugins/i18n/locales/en.json b/packages/editor-ui/src/plugins/i18n/locales/en.json
index f096dce931..868898b45a 100644
--- a/packages/editor-ui/src/plugins/i18n/locales/en.json
+++ b/packages/editor-ui/src/plugins/i18n/locales/en.json
@@ -20,6 +20,11 @@
"generic.beta": "beta",
"generic.yes": "Yes",
"generic.no": "No",
+ "generic.settings": "Settings",
+ "generic.unsavedWork.confirmMessage.headline": "Save changes before leaving?",
+ "generic.unsavedWork.confirmMessage.message": "If you don't save, you will lose your changes.",
+ "generic.unsavedWork.confirmMessage.confirmButtonText": "Save",
+ "generic.unsavedWork.confirmMessage.cancelButtonText": "Leave without saving",
"about.aboutN8n": "About n8n",
"about.close": "Close",
"about.license": "License",
@@ -344,22 +349,13 @@
"mainSidebar.confirmMessage.workflowDelete.confirmButtonText": "Yes, delete",
"mainSidebar.confirmMessage.workflowDelete.headline": "Delete Workflow?",
"mainSidebar.confirmMessage.workflowDelete.message": "Are you sure that you want to delete '{workflowName}'?",
- "mainSidebar.confirmMessage.workflowNew.cancelButtonText": "Leave without saving",
- "mainSidebar.confirmMessage.workflowNew.confirmButtonText": "Save",
- "mainSidebar.confirmMessage.workflowNew.headline": "Save changes before leaving?",
- "mainSidebar.confirmMessage.workflowNew.message": "If you don't save, you will lose your changes.",
"mainSidebar.credentials": "Credentials",
- "mainSidebar.delete": "Delete",
- "mainSidebar.download": "Download",
- "mainSidebar.duplicate": "Duplicate",
"mainSidebar.executions": "Executions",
"mainSidebar.help": "Help",
"mainSidebar.helpMenuItems.course": "Course",
"mainSidebar.helpMenuItems.documentation": "Documentation",
"mainSidebar.helpMenuItems.forum": "Forum",
"mainSidebar.helpMenuItems.quickstart": "Quickstart",
- "mainSidebar.importFromFile": "Import from File",
- "mainSidebar.importFromUrl": "Import from URL",
"mainSidebar.new": "New",
"mainSidebar.newTemplate": "New from template",
"mainSidebar.open": "Open",
@@ -369,7 +365,6 @@
"mainSidebar.prompt.invalidUrl": "Invalid URL",
"mainSidebar.prompt.workflowUrl": "Workflow URL",
"mainSidebar.save": "@:_reusableBaseText.save",
- "mainSidebar.settings": "Settings",
"mainSidebar.showError.stopExecution.title": "Problem stopping execution",
"mainSidebar.showMessage.handleFileImport.message": "The file does not contain valid JSON data",
"mainSidebar.showMessage.handleFileImport.title": "Could not import file",
@@ -379,6 +374,11 @@
"mainSidebar.showMessage.stopExecution.title": "Execution stopped",
"mainSidebar.templates": "Templates",
"mainSidebar.workflows": "Workflows",
+ "menuActions.duplicate": "Duplicate",
+ "menuActions.download": "Download",
+ "menuActions.importFromUrl": "Import from URL...",
+ "menuActions.importFromFile": "Import from File...",
+ "menuActions.delete": "Delete",
"multipleParameter.addItem": "Add item",
"multipleParameter.currentlyNoItemsExist": "Currently no items exist",
"multipleParameter.deleteItem": "Delete item",
@@ -560,14 +560,6 @@
"nodeSettings.waitBetweenTries.displayName": "Wait Between Tries (ms)",
"nodeView.addNode": "Add node",
"nodeView.addSticky": "Click to add sticky note",
- "nodeView.confirmMessage.beforeRouteLeave.cancelButtonText": "Leave without saving",
- "nodeView.confirmMessage.beforeRouteLeave.confirmButtonText": "Save",
- "nodeView.confirmMessage.beforeRouteLeave.headline": "Save changes before leaving?",
- "nodeView.confirmMessage.beforeRouteLeave.message": "If you don't save, you will lose your changes.",
- "nodeView.confirmMessage.initView.cancelButtonText": "Leave without saving",
- "nodeView.confirmMessage.initView.confirmButtonText": "Save",
- "nodeView.confirmMessage.initView.headline": "Save changes before leaving?",
- "nodeView.confirmMessage.initView.message": "If you don't save, you will lose your changes.",
"nodeView.confirmMessage.receivedCopyPasteData.cancelButtonText": "",
"nodeView.confirmMessage.receivedCopyPasteData.confirmButtonText": "Yes, import",
"nodeView.confirmMessage.receivedCopyPasteData.headline": "Import Workflow?",
@@ -1058,10 +1050,6 @@
"workflowDetails.showMessage.title": "Name missing",
"workflowHelpers.showMessage.title": "Problem saving workflow",
"workflowOpen.active": "Active",
- "workflowOpen.confirmMessage.cancelButtonText": "Leave without saving",
- "workflowOpen.confirmMessage.confirmButtonText": "Save",
- "workflowOpen.confirmMessage.headline": "Save changes before leaving?",
- "workflowOpen.confirmMessage.message": "If you don't save, you will lose your changes.",
"workflowOpen.couldNotLoadActiveWorkflows": "Could not load active workflows",
"workflowOpen.created": "Created",
"workflowOpen.filterWorkflows": "Filter by tags",
@@ -1072,6 +1060,8 @@
"workflowOpen.showMessage.message": "This is the current workflow",
"workflowOpen.showMessage.title": "Workflow already open",
"workflowOpen.updated": "Updated",
+ "workflowOpen.newWFButton.label": "Add workflow",
+ "workflowOpen.newWFButton.title": "Create a new workflow",
"workflowPreview.showError.arrayEmpty": "Must have an array of nodes",
"workflowPreview.showError.missingWorkflow": "Missing workflow",
"workflowPreview.showError.previewError.message": "Unable to preview workflow",
@@ -1113,7 +1103,7 @@
"workflowSettings.saveManualOptions.yes": "Yes",
"workflowSettings.seconds": "seconds",
"workflowSettings.selectOption": "Select Option",
- "workflowSettings.settingsFor": "Settings for {workflowName} (#{workflowId})",
+ "workflowSettings.settingsFor": "Workflow settings for {workflowName} (#{workflowId})",
"workflowSettings.showError.saveSettings1.errorMessage": "Timeout is activated but set to 0",
"workflowSettings.showError.saveSettings1.message": "There was a problem saving the settings",
"workflowSettings.showError.saveSettings1.title": "Problem saving settings",
diff --git a/packages/editor-ui/src/plugins/icons.ts b/packages/editor-ui/src/plugins/icons.ts
index 7e9487dd4d..a6a2cb1b98 100644
--- a/packages/editor-ui/src/plugins/icons.ts
+++ b/packages/editor-ui/src/plugins/icons.ts
@@ -4,6 +4,7 @@ import { IconDefinition, library } from '@fortawesome/fontawesome-svg-core';
import {
faAngleDoubleLeft,
faAngleDown,
+ faAngleLeft,
faAngleRight,
faAngleUp,
faArrowLeft,
@@ -120,6 +121,7 @@ function addIcon(icon: any) { // tslint:disable-line:no-any
addIcon(faAngleDoubleLeft);
addIcon(faAngleDown);
+addIcon(faAngleLeft);
addIcon(faAngleRight);
addIcon(faAngleUp);
addIcon(faArrowLeft);
diff --git a/packages/editor-ui/src/router.ts b/packages/editor-ui/src/router.ts
index 28769c31ae..5babd669d1 100644
--- a/packages/editor-ui/src/router.ts
+++ b/packages/editor-ui/src/router.ts
@@ -21,11 +21,12 @@ import TemplatesWorkflowView from '@/views/TemplatesWorkflowView.vue';
import TemplatesSearchView from '@/views/TemplatesSearchView.vue';
import CredentialsView from '@/views/CredentialsView.vue';
import { Store } from 'vuex';
-import { IPermissions, IRootState } from './Interface';
+import { IPermissions, IRootState, IWorkflowsState } from './Interface';
import { LOGIN_STATUS, ROLE } from './modules/userHelpers';
import { RouteConfigSingleView } from 'vue-router/types/router';
import { VIEWS } from './constants';
import { store } from './store';
+import e from 'express';
Vue.use(Router);
@@ -39,6 +40,7 @@ interface IRouteConfig extends RouteConfigSingleView {
disabled?: true;
getProperties: (route: Route, store: Store) => object;
};
+ scrollOffset?: number;
};
}
@@ -55,6 +57,13 @@ const router = new Router({
mode: 'history',
// @ts-ignore
base: window.BASE_PATH === '/%BASE_PATH%/' ? '/' : window.BASE_PATH,
+ scrollBehavior(to, from, savedPosition) {
+ // saved position == null means the page is NOT visited from history (back button)
+ if (savedPosition === null && to.name === VIEWS.TEMPLATES && to.meta) {
+ // for templates view, reset scroll position in this case
+ to.meta.setScrollPosition(0);
+ }
+ },
routes: [
{
path: '/',
@@ -147,6 +156,8 @@ const router = new Router({
meta: {
templatesEnabled: true,
getRedirect: getTemplatesRedirect,
+ // Templates view remembers it's scroll position on back
+ scrollOffset: 0,
telemetry: {
getProperties(route: Route, store: Store) {
return {
@@ -154,6 +165,9 @@ const router = new Router({
};
},
},
+ setScrollPosition(pos: number) {
+ this.scrollOffset = pos;
+ },
permissions: {
allow: {
loginStatus: [LOGIN_STATUS.LoggedIn],
diff --git a/packages/editor-ui/src/views/NodeView.vue b/packages/editor-ui/src/views/NodeView.vue
index 67c35c99bd..34d85399ba 100644
--- a/packages/editor-ui/src/views/NodeView.vue
+++ b/packages/editor-ui/src/views/NodeView.vue
@@ -307,11 +307,11 @@ export default mixins(
const result = this.$store.getters.getStateIsDirty;
if(result) {
const confirmModal = await this.confirmModal(
- this.$locale.baseText('nodeView.confirmMessage.beforeRouteLeave.message'),
- this.$locale.baseText('nodeView.confirmMessage.beforeRouteLeave.headline'),
+ this.$locale.baseText('generic.unsavedWork.confirmMessage.message'),
+ this.$locale.baseText('generic.unsavedWork.confirmMessage.headline'),
'warning',
- this.$locale.baseText('nodeView.confirmMessage.beforeRouteLeave.confirmButtonText'),
- this.$locale.baseText('nodeView.confirmMessage.beforeRouteLeave.cancelButtonText'),
+ this.$locale.baseText('generic.unsavedWork.confirmMessage.confirmButtonText'),
+ this.$locale.baseText('generic.unsavedWork.confirmMessage.cancelButtonText'),
true,
);
@@ -1470,9 +1470,13 @@ export default mixins(
const nodeTypeName = event.dataTransfer.getData('nodeTypeName');
if (nodeTypeName) {
const mousePosition = this.getMousePositionWithinNodeView(event);
+ const sidebarOffset = this.sidebarMenuCollapsed ? CanvasHelpers.SIDEBAR_WIDTH : CanvasHelpers.SIDEBAR_WIDTH_EXPANDED;
this.addNodeButton(nodeTypeName, {
- position: [mousePosition[0] - CanvasHelpers.NODE_SIZE / 2, mousePosition[1] - CanvasHelpers.NODE_SIZE / 2],
+ position: [
+ mousePosition[0] - CanvasHelpers.NODE_SIZE / 2,
+ mousePosition[1] - CanvasHelpers.NODE_SIZE / 2,
+ ],
dragAndDrop: true,
});
this.createNodeActive = false;
@@ -3210,7 +3214,7 @@ export default mixins(
-
-
-
+
@@ -68,12 +78,14 @@ import WorkflowActivator from '@/components/WorkflowActivator.vue';
import { convertToDisplayDate } from './helpers';
import { mapGetters } from 'vuex';
import { MODAL_CANCEL, MODAL_CLOSE, MODAL_CONFIRMED, VIEWS, WORKFLOW_OPEN_MODAL_KEY } from '../constants';
+import { titleChange } from './mixins/titleChange';
export default mixins(
genericHelpers,
restApi,
showMessage,
workflowHelpers,
+ titleChange,
).extend({
name: 'WorkflowOpen',
components: {
@@ -166,10 +178,10 @@ export default mixins(
const result = this.$store.getters.getStateIsDirty;
if(result) {
const confirmModal = await this.confirmModal(
- this.$locale.baseText('workflowOpen.confirmMessage.message'),
- this.$locale.baseText('workflowOpen.confirmMessage.headline'),
+ this.$locale.baseText('generic.unsavedWork.confirmMessage.message'),
+ this.$locale.baseText('generic.unsavedWork.confirmMessage.headline'),
'warning',
- this.$locale.baseText('workflowOpen.confirmMessage.confirmButtonText'),
+ this.$locale.baseText('generic.unsavedWork.confirmMessage.confirmButtonText'),
this.$locale.baseText('workflowOpen.confirmMessage.cancelButtonText'),
true,
);
@@ -226,6 +238,55 @@ export default mixins(
);
}
},
+ async onNewWFClick () {
+ const result = this.$store.getters.getStateIsDirty;
+ if(result) {
+ const confirmModal = await this.confirmModal(
+ this.$locale.baseText('generic.unsavedWork.confirmMessage.message'),
+ this.$locale.baseText('generic.unsavedWork.confirmMessage.headline'),
+ 'warning',
+ this.$locale.baseText('generic.unsavedWork.confirmMessage.confirmButtonText'),
+ this.$locale.baseText('generic.unsavedWork.confirmMessage.cancelButtonText'),
+ true,
+ );
+ if (confirmModal === MODAL_CONFIRMED) {
+ const saved = await this.saveCurrentWorkflow({}, false);
+ if (saved) this.$store.dispatch('settings/fetchPromptsData');
+ if (this.$router.currentRoute.name === VIEWS.NEW_WORKFLOW) {
+ this.$root.$emit('newWorkflow');
+ } else {
+ this.$router.push({ name: VIEWS.NEW_WORKFLOW });
+ }
+ this.$showMessage({
+ title: this.$locale.baseText('mainSidebar.showMessage.handleSelect2.title'),
+ type: 'success',
+ });
+ } else if (confirmModal === MODAL_CANCEL) {
+ this.$store.commit('setStateDirty', false);
+ if (this.$router.currentRoute.name === VIEWS.NEW_WORKFLOW) {
+ this.$root.$emit('newWorkflow');
+ } else {
+ this.$router.push({ name: VIEWS.NEW_WORKFLOW });
+ }
+ this.$showMessage({
+ title: this.$locale.baseText('mainSidebar.showMessage.handleSelect2.title'),
+ type: 'success',
+ });
+ } else if (confirmModal === MODAL_CLOSE) {
+ return;
+ }
+ } else {
+ if (this.$router.currentRoute.name !== VIEWS.NEW_WORKFLOW) {
+ this.$router.push({ name: VIEWS.NEW_WORKFLOW });
+ }
+ this.$showMessage({
+ title: this.$locale.baseText('mainSidebar.showMessage.handleSelect3.title'),
+ type: 'success',
+ });
+ }
+ this.$titleReset();
+ this.$store.commit('ui/closeModal', WORKFLOW_OPEN_MODAL_KEY);
+ },
workflowActiveChanged (data: { id: string, active: boolean }) {
for (const workflow of this.workflows) {
if (workflow.id === data.id) {
@@ -253,7 +314,8 @@ export default mixins(
}
.search-filter {
- margin-left: 10px;
+ margin-left: 12px;
+ margin-right: 24px;
min-width: 160px;
}
diff --git a/packages/editor-ui/src/components/layouts/PageViewLayout.vue b/packages/editor-ui/src/components/layouts/PageViewLayout.vue
index 8373534301..c4a13755ee 100644
--- a/packages/editor-ui/src/components/layouts/PageViewLayout.vue
+++ b/packages/editor-ui/src/components/layouts/PageViewLayout.vue
@@ -33,7 +33,6 @@ export default Vue.extend({
.wrapper {
display: flex;
height: 100%;
- margin-left: 65px;
justify-content: center;
box-sizing: border-box;
background: var(--color-gray-light);
@@ -43,10 +42,6 @@ export default Vue.extend({
}
}
-.expandedSidebar {
- margin-left: 200px;
-}
-
.container {
max-width: 1280px;
display: flex;
@@ -76,4 +71,14 @@ export default Vue.extend({
flex: 1 1 100%;
height: 100%;
}
+
+@media (max-width: 500px) {
+ .container {
+ flex-direction: column;
+ }
+ .aside {
+ height: auto;
+ margin: 0;
+ }
+}
diff --git a/packages/editor-ui/src/components/mixins/mouseSelect.ts b/packages/editor-ui/src/components/mixins/mouseSelect.ts
index dbe6890a48..dcee43e117 100644
--- a/packages/editor-ui/src/components/mixins/mouseSelect.ts
+++ b/packages/editor-ui/src/components/mixins/mouseSelect.ts
@@ -3,7 +3,8 @@ import { INodeUi, XYPosition } from '@/Interface';
import mixins from 'vue-typed-mixins';
import { deviceSupportHelpers } from '@/components/mixins/deviceSupportHelpers';
-import { getMousePosition, getRelativePosition } from '@/views/canvasHelpers';
+import { getMousePosition, getRelativePosition, HEADER_HEIGHT, SIDEBAR_WIDTH, SIDEBAR_WIDTH_EXPANDED } from '@/views/canvasHelpers';
+import { VIEWS } from '@/constants';
export const mouseSelect = mixins(
deviceSupportHelpers,
@@ -17,6 +18,11 @@ export const mouseSelect = mixins(
mounted () {
this.createSelectBox();
},
+ computed: {
+ isDemo (): boolean {
+ return this.$route.name === VIEWS.DEMO;
+ },
+ },
methods: {
createSelectBox () {
this.selectBox.id = 'select-box';
@@ -43,8 +49,10 @@ export const mouseSelect = mixins(
},
getMousePositionWithinNodeView (event: MouseEvent | TouchEvent): XYPosition {
const [x, y] = getMousePosition(event);
+ const sidebarOffset = this.isDemo ? 0 : this.$store.getters['ui/sidebarMenuCollapsed'] ? SIDEBAR_WIDTH : SIDEBAR_WIDTH_EXPANDED;
+ const headerOffset = this.isDemo ? 0 : HEADER_HEIGHT;
// @ts-ignore
- return getRelativePosition(x, y, this.nodeViewScale, this.$store.getters.getNodeViewOffsetPosition);
+ return getRelativePosition(x - sidebarOffset, y - headerOffset, this.nodeViewScale, this.$store.getters.getNodeViewOffsetPosition);
},
showSelectBox (event: MouseEvent) {
const [x, y] = this.getMousePositionWithinNodeView(event);
diff --git a/packages/editor-ui/src/constants.ts b/packages/editor-ui/src/constants.ts
index e36e02fe28..a6ea3f21c1 100644
--- a/packages/editor-ui/src/constants.ts
+++ b/packages/editor-ui/src/constants.ts
@@ -33,7 +33,6 @@ export const TAGS_MANAGER_MODAL_KEY = 'tagsManager';
export const WORKFLOW_OPEN_MODAL_KEY = 'workflowOpen';
export const VERSIONS_MODAL_KEY = 'versions';
export const WORKFLOW_SETTINGS_MODAL_KEY = 'settings';
-export const CREDENTIAL_LIST_MODAL_KEY = 'credentialsList';
export const PERSONALIZATION_MODAL_KEY = 'personalization';
export const CONTACT_PROMPT_MODAL_KEY = 'contactPrompt';
export const VALUE_SURVEY_MODAL_KEY = 'valueSurvey';
@@ -285,6 +284,7 @@ export enum VIEWS {
NOT_FOUND = "NotFoundView",
FAKE_DOOR = "ComingSoon",
COMMUNITY_NODES = "CommunityNodes",
+ WORKFLOWS = "WorkflowsView",
}
export enum FAKE_DOOR_FEATURES {
@@ -311,10 +311,18 @@ export const MAPPING_PARAMS = [`$evaluateExpression`, `$item`, `$jmespath`, `$no
export const DEFAULT_STICKY_HEIGHT = 160;
export const DEFAULT_STICKY_WIDTH = 240;
+export enum WORKFLOW_MENU_ACTIONS {
+ DUPLICATE = 'duplicate',
+ DOWNLOAD = 'download',
+ IMPORT_FROM_URL = 'import-from-url',
+ IMPORT_FROM_FILE = 'import-from-file',
+ SETTINGS = 'settings',
+ DELETE = 'delete',
+}
+
/**
* Enterprise edition
*/
-
export enum EnterpriseEditionFeature {
Sharing = 'sharing',
}
diff --git a/packages/editor-ui/src/modules/ui.ts b/packages/editor-ui/src/modules/ui.ts
index 7e333f21f3..166d1d7377 100644
--- a/packages/editor-ui/src/modules/ui.ts
+++ b/packages/editor-ui/src/modules/ui.ts
@@ -7,7 +7,6 @@ import {
CREDENTIAL_SELECT_MODAL_KEY,
CHANGE_PASSWORD_MODAL_KEY,
CONTACT_PROMPT_MODAL_KEY,
- CREDENTIAL_LIST_MODAL_KEY,
DELETE_USER_MODAL_KEY,
DUPLICATE_MODAL_KEY,
EXECUTIONS_MODAL_KEY,
@@ -23,7 +22,6 @@ import {
ONBOARDING_CALL_SIGNUP_MODAL_KEY,
FAKE_DOOR_FEATURES,
COMMUNITY_PACKAGE_MANAGE_ACTIONS,
- MAIN_NODE_PANEL_WIDTH,
} from '@/constants';
import Vue from 'vue';
import { ActionContext, Module } from 'vuex';
@@ -54,9 +52,6 @@ const module: Module
+
+
+
+
+
@@ -13,13 +13,13 @@
{{ $locale.baseText('settings.personal') }}
-
+
{{ $locale.baseText('settings.users') }}
-
+
@@ -54,14 +54,18 @@
diff --git a/packages/editor-ui/src/components/TagsDropdown.vue b/packages/editor-ui/src/components/TagsDropdown.vue
index 7d6d5e86f9..9a2004f1ec 100644
--- a/packages/editor-ui/src/components/TagsDropdown.vue
+++ b/packages/editor-ui/src/components/TagsDropdown.vue
@@ -180,24 +180,12 @@ export default mixins(showMessage).extend({
else if (tags && tags[0] && tags[0].hoverItem) {
// @ts-ignore
tags[0].hoverItem();
-
- // @ts-ignore
- if (tags[0] && tags[0].$el && tags[0].$el.scrollIntoView) {
- // @ts-ignore
- tags[0].$el.scrollIntoView();
- }
}
},
focusOnTag(tagId: string) {
const tagOptions = (this.$refs.tag as Vue[]) || [];
if (tagOptions && tagOptions.length) {
const added = tagOptions.find((ref: any) => ref.value === tagId); // tslint:disable-line:no-any
- // @ts-ignore // focus on newly created item
- if (added && added.$el && added.$el.scrollIntoView && added.hoverItem) {
- // @ts-ignore
- added.hoverItem();
- added.$el.scrollIntoView();
- }
}
},
focusOnInput() {
diff --git a/packages/editor-ui/src/components/TemplateList.vue b/packages/editor-ui/src/components/TemplateList.vue
index 7f9fcc685b..a6183a6e79 100644
--- a/packages/editor-ui/src/components/TemplateList.vue
+++ b/packages/editor-ui/src/components/TemplateList.vue
@@ -59,11 +59,17 @@ export default mixins(genericHelpers).extend({
},
mounted() {
if (this.infiniteScrollEnabled) {
- window.addEventListener('scroll', this.onScroll);
+ const content = document.getElementById('content');
+ if (content) {
+ content.addEventListener('scroll', this.onScroll);
+ }
}
},
destroyed() {
- window.removeEventListener('scroll', this.onScroll);
+ const content = document.getElementById('content');
+ if (content) {
+ content.removeEventListener('scroll', this.onScroll);
+ }
},
components: {
TemplateCard,
diff --git a/packages/editor-ui/src/components/WorkflowOpen.vue b/packages/editor-ui/src/components/WorkflowOpen.vue
index 0b80bf8665..37f56757e5 100644
--- a/packages/editor-ui/src/components/WorkflowOpen.vue
+++ b/packages/editor-ui/src/components/WorkflowOpen.vue
@@ -25,6 +25,16 @@
+
+
-
-
-
-
- {{ $locale.baseText('settings') }}
+ {{ $locale.baseText('settings') }}
-
+
-
-
-
- {{ $locale.baseText('mainSidebar.workflows') }}
-
+
+
+
+ {{ $locale.baseText('mainSidebar.workflows') }}
+
-
-
-
- {{ $locale.baseText('mainSidebar.new') }}
-
-
-
-
+
+
+
+ {{ $locale.baseText('mainSidebar.new') }}
+
+
+
+
+
+ {{ $locale.baseText('mainSidebar.open') }}
+
+
+
+
+
- {{ $locale.baseText('mainSidebar.newTemplate') }}
-
-
-
-
-
- {{ $locale.baseText('mainSidebar.open') }}
-
-
-
-
-
- {{ $locale.baseText('mainSidebar.save') }}
-
-
-
-
-
- {{ $locale.baseText('mainSidebar.duplicate') }}
-
-
-
-
-
- {{ $locale.baseText('mainSidebar.delete') }}
-
-
-
-
-
- {{ $locale.baseText('mainSidebar.download') }}
-
-
-
-
-
- {{ $locale.baseText('mainSidebar.importFromUrl') }}
-
-
-
-
-
- {{ $locale.baseText('mainSidebar.importFromFile') }}
-
-
-
-
-
- {{ $locale.baseText('mainSidebar.settings') }}
-
-
-
+ {{ $locale.baseText('mainSidebar.templates') }}
+
-
-
- {{ $locale.baseText('mainSidebar.templates') }}
-
+
+
+ {{ $locale.baseText('mainSidebar.credentials') }}
+
-
-
- {{ $locale.baseText('mainSidebar.credentials') }}
-
+
+
+ {{ $locale.baseText('mainSidebar.executions') }}
+
+
+
+
+
+ {{ $locale.baseText('settings') }}
+
-
-
- {{ $locale.baseText('mainSidebar.executions') }}
-
+
+
+
+ {{ $locale.baseText('mainSidebar.help') }}
+
-
-
- {{ $locale.baseText('settings') }}
-
+
-
-
-
- {{ $locale.baseText('mainSidebar.help') }}
-
+
+
+
+ {{ $locale.baseText('mainSidebar.aboutN8n') }}
+
+
+
-
+
-
-
-
- {{ $locale.baseText('mainSidebar.aboutN8n') }}
-
-
-
-
-
-
-
-.about-icon {
- margin-left: 5px;
-}
+
diff --git a/packages/editor-ui/src/components/Modals.vue b/packages/editor-ui/src/components/Modals.vue
index 733fd03986..feefb8f80f 100644
--- a/packages/editor-ui/src/components/Modals.vue
+++ b/packages/editor-ui/src/components/Modals.vue
@@ -25,10 +25,6 @@
-
-
-
-
-
-
- {{nextVersions.length > 99 ? '99+' : nextVersions.length}} update{{nextVersions.length > 1 ? 's' : ''}} available
-
-
-
-
-
+
-
- {{ $locale.baseText('settings') }}
-
-
- {{ $locale.baseText('auth.signout') }}
-
-
-
+
+
+
+
+
+
+
+
-
+
-
- {{currentUser.fullName}}
+
+ {{nextVersions.length > 99 ? '99+' : nextVersions.length}} update{{nextVersions.length > 1 ? 's' : ''}}
+
+
+ {{ $locale.baseText('settings') }}
+ {{ $locale.baseText('auth.signout') }}
+
+
+
+ {{currentUser.fullName}}
+
+
+
+
+
+
+