@tmagic/editor 1.8.0-beta.1 → 1.8.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/es/Editor.vue_vue_type_script_setup_true_lang.js +31 -5
- package/dist/es/components/CodeBlockEditor.vue_vue_type_script_setup_true_lang.js +21 -113
- package/dist/es/components/CodeParams.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/es/components/CompareForm.js +5 -0
- package/dist/es/components/CompareForm.vue_vue_type_script_setup_true_lang.js +196 -0
- package/dist/es/components/ContentMenu.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/FloatingBox.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/es/components/Icon.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/Resizer.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/ScrollBar.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/ScrollViewer.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/SearchInput.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/SplitView.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/ToolButton.vue_vue_type_script_setup_true_lang.js +7 -7
- package/dist/es/components/Tree.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/TreeNode.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/editorProps.js +2 -0
- package/dist/es/fields/Code.vue_vue_type_script_setup_true_lang.js +20 -4
- package/dist/es/fields/CodeLink.vue_vue_type_script_setup_true_lang.js +3 -6
- package/dist/es/fields/CodeSelect.vue_vue_type_script_setup_true_lang.js +19 -3
- package/dist/es/fields/CodeSelectCol.vue_vue_type_script_setup_true_lang.js +42 -8
- package/dist/es/fields/CondOpSelect.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/fields/DataSourceFieldSelect/FieldSelect.vue_vue_type_script_setup_true_lang.js +14 -6
- package/dist/es/fields/DataSourceFieldSelect/Index.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/es/fields/DataSourceFields.vue_vue_type_script_setup_true_lang.js +41 -16
- package/dist/es/fields/DataSourceInput.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/es/fields/DataSourceMethodSelect.vue_vue_type_script_setup_true_name_true_lang.js +9 -5
- package/dist/es/fields/DataSourceMethods.vue_vue_type_script_setup_true_lang.js +40 -19
- package/dist/es/fields/DataSourceMocks.vue_vue_type_script_setup_true_lang.js +17 -9
- package/dist/es/fields/DataSourceSelect.vue_vue_type_script_setup_true_lang.js +4 -2
- package/dist/es/fields/DisplayConds.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/fields/EventSelect.vue_vue_type_script_setup_true_lang.js +59 -12
- package/dist/es/fields/KeyValue.vue_vue_type_script_setup_true_lang.js +12 -7
- package/dist/es/fields/PageFragmentSelect.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/fields/StyleSetter/Index.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/fields/StyleSetter/components/BackgroundPosition.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/fields/StyleSetter/components/Border.vue_vue_type_script_setup_true_lang.js +28 -6
- package/dist/es/fields/StyleSetter/components/Box.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/fields/StyleSetter/icons/background-repeat/NoRepeat.js +1 -1
- package/dist/es/fields/StyleSetter/icons/background-repeat/Repeat.js +1 -1
- package/dist/es/fields/StyleSetter/icons/background-repeat/RepeatX.js +1 -1
- package/dist/es/fields/StyleSetter/icons/background-repeat/RepeatY.js +1 -1
- package/dist/es/fields/StyleSetter/icons/display/Block.js +1 -1
- package/dist/es/fields/StyleSetter/icons/display/Flex.js +1 -1
- package/dist/es/fields/StyleSetter/icons/display/Inline.js +1 -1
- package/dist/es/fields/StyleSetter/icons/display/InlineBlock.js +1 -1
- package/dist/es/fields/StyleSetter/icons/display/None.js +1 -1
- package/dist/es/fields/StyleSetter/icons/flex-direction/Column.js +1 -1
- package/dist/es/fields/StyleSetter/icons/flex-direction/ColumnReverse.js +1 -1
- package/dist/es/fields/StyleSetter/icons/flex-direction/Row.js +1 -1
- package/dist/es/fields/StyleSetter/icons/flex-direction/RowReverse.js +1 -1
- package/dist/es/fields/StyleSetter/icons/justify-content/Center.js +1 -1
- package/dist/es/fields/StyleSetter/icons/justify-content/FlexEnd.js +1 -1
- package/dist/es/fields/StyleSetter/icons/justify-content/FlexStart.js +1 -1
- package/dist/es/fields/StyleSetter/icons/justify-content/SpaceAround.js +1 -1
- package/dist/es/fields/StyleSetter/icons/justify-content/SpaceBetween.js +1 -1
- package/dist/es/fields/StyleSetter/icons/text-align/Center.js +1 -1
- package/dist/es/fields/StyleSetter/icons/text-align/Left.js +1 -1
- package/dist/es/fields/StyleSetter/icons/text-align/Right.js +1 -1
- package/dist/es/fields/StyleSetter/pro/Background.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/fields/StyleSetter/pro/Border.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/fields/StyleSetter/pro/Font.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/fields/StyleSetter/pro/Layout.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/fields/StyleSetter/pro/Position.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/fields/StyleSetter/pro/Transform.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/fields/UISelect.vue_vue_type_script_setup_true_lang.js +9 -6
- package/dist/es/hooks/use-code-block-edit.js +7 -4
- package/dist/es/hooks/use-data-source-edit.js +5 -2
- package/dist/es/hooks/use-stage.js +22 -10
- package/dist/es/icons/CenterIcon.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/icons/CodeIcon.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/icons/FolderMinusIcon.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/index.js +14 -3
- package/dist/es/initService.js +7 -7
- package/dist/es/layouts/AddPageBox.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/CodeEditor.vue_vue_type_script_setup_true_lang.js +7 -6
- package/dist/es/layouts/Framework.vue_vue_type_script_setup_true_lang.js +14 -9
- package/dist/es/layouts/NavMenu.vue_vue_type_script_setup_true_lang.js +12 -4
- package/dist/es/layouts/NavMenuColumn.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/history-list/Bucket.js +5 -0
- package/dist/es/layouts/history-list/Bucket.vue_vue_type_script_setup_true_lang.js +71 -0
- package/dist/es/layouts/history-list/BucketTab.js +5 -0
- package/dist/es/layouts/history-list/BucketTab.vue_vue_type_script_setup_true_lang.js +62 -0
- package/dist/es/layouts/history-list/GroupRow.js +5 -0
- package/dist/es/layouts/history-list/GroupRow.vue_vue_type_script_setup_true_lang.js +269 -0
- package/dist/es/layouts/history-list/HistoryDiffDialog.js +5 -0
- package/dist/es/layouts/history-list/HistoryDiffDialog.vue_vue_type_script_setup_true_lang.js +287 -0
- package/dist/es/layouts/history-list/HistoryListPanel.js +5 -0
- package/dist/es/layouts/history-list/HistoryListPanel.vue_vue_type_script_setup_true_lang.js +327 -0
- package/dist/es/layouts/history-list/InitialRow.js +5 -0
- package/dist/es/layouts/history-list/InitialRow.vue_vue_type_script_setup_true_lang.js +83 -0
- package/dist/es/layouts/history-list/PageTab.js +5 -0
- package/dist/es/layouts/history-list/PageTab.vue_vue_type_script_setup_true_lang.js +95 -0
- package/dist/es/layouts/history-list/composables.js +184 -0
- package/dist/es/layouts/history-list/useHistoryList.js +56 -0
- package/dist/es/layouts/history-list/useHistoryRevert.js +306 -0
- package/dist/es/layouts/page-bar/AddButton.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/page-bar/PageBar.vue_vue_type_script_setup_true_lang.js +5 -3
- package/dist/es/layouts/page-bar/PageBarScrollContainer.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/page-bar/PageList.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/page-bar/Search.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/es/layouts/props-panel/FormPanel.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/props-panel/PropsPanel.vue_vue_type_script_setup_true_lang.js +6 -2
- package/dist/es/layouts/sidebar/ComponentListPanel.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/es/layouts/sidebar/Sidebar.vue_vue_type_script_setup_true_lang.js +8 -4
- package/dist/es/layouts/sidebar/code-block/CodeBlockList.vue_vue_type_script_setup_true_lang.js +4 -4
- package/dist/es/layouts/sidebar/code-block/CodeBlockListPanel.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/es/layouts/sidebar/code-block/useContentMenu.js +1 -1
- package/dist/es/layouts/sidebar/data-source/DataSourceAddButton.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/sidebar/data-source/DataSourceConfigPanel.vue_vue_type_script_setup_true_lang.js +19 -6
- package/dist/es/layouts/sidebar/data-source/DataSourceList.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/sidebar/data-source/DataSourceListPanel.vue_vue_type_script_setup_true_lang.js +25 -3
- package/dist/es/layouts/sidebar/data-source/useContentMenu.js +1 -1
- package/dist/es/layouts/sidebar/layer/LayerMenu.vue_vue_type_script_setup_true_lang.js +6 -6
- package/dist/es/layouts/sidebar/layer/LayerNodeTool.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/es/layouts/sidebar/layer/LayerPanel.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/sidebar/layer/use-node-status.js +1 -1
- package/dist/es/layouts/workspace/Breadcrumb.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/workspace/Workspace.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/workspace/viewer/NodeListMenu.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/workspace/viewer/Stage.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/es/layouts/workspace/viewer/StageOverlay.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/workspace/viewer/ViewerMenu.vue_vue_type_script_setup_true_lang.js +9 -9
- package/dist/es/services/BaseService.js +31 -68
- package/dist/es/services/codeBlock.js +286 -8
- package/dist/es/services/componentList.js +2 -2
- package/dist/es/services/dataSource.js +287 -8
- package/dist/es/services/dep.js +21 -9
- package/dist/es/services/editor.js +655 -194
- package/dist/es/services/events.js +2 -2
- package/dist/es/services/history.js +390 -47
- package/dist/es/services/keybinding.js +5 -5
- package/dist/es/services/props.js +8 -8
- package/dist/es/services/stageOverlay.js +2 -2
- package/dist/es/services/storage.js +2 -2
- package/dist/es/services/ui.js +5 -2
- package/dist/es/style.css +456 -8
- package/dist/es/utils/code-block.js +122 -0
- package/dist/es/utils/content-menu.js +19 -12
- package/dist/es/utils/data-source/index.js +2 -0
- package/dist/es/utils/dep/worker.js +1 -1
- package/dist/es/utils/editor.js +105 -51
- package/dist/es/utils/history.js +220 -0
- package/dist/es/utils/indexed-db.js +86 -0
- package/dist/es/utils/undo-redo.js +80 -1
- package/dist/style.css +456 -8
- package/dist/tmagic-editor.umd.cjs +10135 -5646
- package/package.json +8 -8
- package/src/Editor.vue +25 -1
- package/src/components/CodeBlockEditor.vue +20 -109
- package/src/components/CodeParams.vue +6 -0
- package/src/components/CompareForm.vue +277 -0
- package/src/components/ToolButton.vue +2 -2
- package/src/editorProps.ts +9 -0
- package/src/fields/Code.vue +19 -3
- package/src/fields/CodeLink.vue +2 -5
- package/src/fields/CodeSelect.vue +17 -1
- package/src/fields/CodeSelectCol.vue +37 -3
- package/src/fields/DataSourceFieldSelect/FieldSelect.vue +23 -3
- package/src/fields/DataSourceFieldSelect/Index.vue +2 -2
- package/src/fields/DataSourceFields.vue +48 -10
- package/src/fields/DataSourceInput.vue +3 -3
- package/src/fields/DataSourceMethodSelect.vue +12 -4
- package/src/fields/DataSourceMethods.vue +55 -24
- package/src/fields/DataSourceMocks.vue +13 -3
- package/src/fields/DataSourceSelect.vue +4 -1
- package/src/fields/EventSelect.vue +57 -8
- package/src/fields/KeyValue.vue +17 -4
- package/src/fields/StyleSetter/components/Border.vue +15 -6
- package/src/fields/UISelect.vue +5 -2
- package/src/hooks/use-code-block-edit.ts +9 -5
- package/src/hooks/use-data-source-edit.ts +2 -2
- package/src/hooks/use-stage.ts +26 -9
- package/src/index.ts +8 -0
- package/src/initService.ts +1 -1
- package/src/layouts/CodeEditor.vue +17 -5
- package/src/layouts/Framework.vue +11 -6
- package/src/layouts/NavMenu.vue +12 -3
- package/src/layouts/history-list/Bucket.vue +91 -0
- package/src/layouts/history-list/BucketTab.vue +72 -0
- package/src/layouts/history-list/GroupRow.vue +304 -0
- package/src/layouts/history-list/HistoryDiffDialog.vue +273 -0
- package/src/layouts/history-list/HistoryListPanel.vue +367 -0
- package/src/layouts/history-list/InitialRow.vue +71 -0
- package/src/layouts/history-list/PageTab.vue +118 -0
- package/src/layouts/history-list/composables.ts +309 -0
- package/src/layouts/history-list/useHistoryList.ts +60 -0
- package/src/layouts/history-list/useHistoryRevert.ts +405 -0
- package/src/layouts/page-bar/PageBar.vue +4 -2
- package/src/layouts/props-panel/PropsPanel.vue +5 -1
- package/src/layouts/sidebar/ComponentListPanel.vue +9 -5
- package/src/layouts/sidebar/Sidebar.vue +8 -3
- package/src/layouts/sidebar/code-block/CodeBlockList.vue +5 -5
- package/src/layouts/sidebar/code-block/CodeBlockListPanel.vue +1 -1
- package/src/layouts/sidebar/code-block/useContentMenu.ts +1 -1
- package/src/layouts/sidebar/data-source/DataSourceConfigPanel.vue +31 -2
- package/src/layouts/sidebar/data-source/DataSourceListPanel.vue +27 -2
- package/src/layouts/sidebar/data-source/useContentMenu.ts +1 -1
- package/src/layouts/sidebar/layer/LayerMenu.vue +19 -11
- package/src/layouts/sidebar/layer/LayerNodeTool.vue +7 -4
- package/src/layouts/sidebar/layer/use-node-status.ts +9 -6
- package/src/layouts/workspace/viewer/Stage.vue +1 -1
- package/src/layouts/workspace/viewer/ViewerMenu.vue +8 -8
- package/src/services/BaseService.ts +35 -86
- package/src/services/codeBlock.ts +361 -5
- package/src/services/dataSource.ts +336 -6
- package/src/services/dep.ts +32 -9
- package/src/services/editor.ts +834 -194
- package/src/services/history.ts +509 -49
- package/src/services/keybinding.ts +3 -3
- package/src/services/props.ts +2 -2
- package/src/services/ui.ts +7 -0
- package/src/theme/history-list-panel.scss +557 -0
- package/src/theme/page-bar.scss +0 -4
- package/src/theme/props-panel.scss +3 -3
- package/src/theme/style-setter/border.scss +4 -1
- package/src/theme/theme.scss +1 -0
- package/src/type.ts +594 -31
- package/src/utils/code-block.ts +150 -0
- package/src/utils/content-menu.ts +25 -13
- package/src/utils/data-source/index.ts +2 -0
- package/src/utils/dep/worker.ts +5 -3
- package/src/utils/editor.ts +166 -60
- package/src/utils/history.ts +286 -0
- package/src/utils/index.ts +3 -0
- package/src/utils/indexed-db.ts +122 -0
- package/src/utils/undo-redo.ts +111 -0
- package/types/index.d.ts +3171 -889
- package/dist/es/utils/compose.js +0 -44
- package/dist/es/utils/editor-history.js +0 -100
- package/src/utils/compose.ts +0 -52
- package/src/utils/editor-history.ts +0 -138
|
@@ -29,6 +29,8 @@
|
|
|
29
29
|
:disabled="!editable"
|
|
30
30
|
:values="dataSourceValues"
|
|
31
31
|
:title="dialogTitle"
|
|
32
|
+
:edit-method-name="editMethodName"
|
|
33
|
+
:edit-field-path="editFieldPath"
|
|
32
34
|
@submit="submitDataSourceHandler"
|
|
33
35
|
@close="editDialogCloseHandler"
|
|
34
36
|
></DataSourceConfigPanel>
|
|
@@ -45,7 +47,7 @@
|
|
|
45
47
|
</template>
|
|
46
48
|
|
|
47
49
|
<script setup lang="ts">
|
|
48
|
-
import { computed, inject, useTemplateRef, watch } from 'vue';
|
|
50
|
+
import { computed, inject, ref, useTemplateRef, watch } from 'vue';
|
|
49
51
|
import { mergeWith } from 'lodash-es';
|
|
50
52
|
|
|
51
53
|
import { tMagicMessageBox, TMagicScrollbar } from '@tmagic/design';
|
|
@@ -79,7 +81,16 @@ const { dataSourceService } = useServices();
|
|
|
79
81
|
const { editDialog, dataSourceValues, dialogTitle, editable, editHandler, submitDataSourceHandler } =
|
|
80
82
|
useDataSourceEdit(dataSourceService);
|
|
81
83
|
|
|
84
|
+
/** 打开数据源详情时需要直接定位并打开的方法名,为空则正常展示「数据定义」tab */
|
|
85
|
+
const editMethodName = ref('');
|
|
86
|
+
|
|
87
|
+
/** 打开数据源详情时需要直接定位并打开的字段路径,为空则不自动打开字段配置 */
|
|
88
|
+
const editFieldPath = ref<string[]>([]);
|
|
89
|
+
|
|
82
90
|
const editDialogCloseHandler = () => {
|
|
91
|
+
editMethodName.value = '';
|
|
92
|
+
editFieldPath.value = [];
|
|
93
|
+
|
|
83
94
|
if (dataSourceListRef.value) {
|
|
84
95
|
for (const [, status] of dataSourceListRef.value.nodeStatusMap.entries()) {
|
|
85
96
|
status.selected = false;
|
|
@@ -129,7 +140,7 @@ const removeHandler = async (id: string) => {
|
|
|
129
140
|
type: 'warning',
|
|
130
141
|
});
|
|
131
142
|
|
|
132
|
-
dataSourceService.remove(id);
|
|
143
|
+
dataSourceService.remove(id, { historySource: 'tree-contextmenu' });
|
|
133
144
|
};
|
|
134
145
|
|
|
135
146
|
const dataSourceListRef = useTemplateRef<InstanceType<typeof DataSourceList>>('dataSourceList');
|
|
@@ -139,6 +150,20 @@ const filterTextChangeHandler = (val: string) => {
|
|
|
139
150
|
};
|
|
140
151
|
|
|
141
152
|
eventBus?.on('edit-data-source', (id: string) => {
|
|
153
|
+
editMethodName.value = '';
|
|
154
|
+
editFieldPath.value = [];
|
|
155
|
+
editHandler(id);
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
eventBus?.on('edit-data-source-method', (id: string, methodName: string) => {
|
|
159
|
+
editMethodName.value = methodName;
|
|
160
|
+
editFieldPath.value = [];
|
|
161
|
+
editHandler(id);
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
eventBus?.on('edit-data-source-field', (id: string, fieldPath: string[]) => {
|
|
165
|
+
editMethodName.value = '';
|
|
166
|
+
editFieldPath.value = fieldPath;
|
|
142
167
|
editHandler(id);
|
|
143
168
|
});
|
|
144
169
|
|
|
@@ -41,11 +41,15 @@ const createMenuItems = (group: ComponentGroup): MenuButton[] =>
|
|
|
41
41
|
type: 'button',
|
|
42
42
|
icon: component.icon,
|
|
43
43
|
handler: () => {
|
|
44
|
-
editorService.add(
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
44
|
+
editorService.add(
|
|
45
|
+
{
|
|
46
|
+
name: component.text,
|
|
47
|
+
type: component.type,
|
|
48
|
+
...(component.data || {}),
|
|
49
|
+
},
|
|
50
|
+
undefined,
|
|
51
|
+
{ historySource: 'tree-contextmenu' },
|
|
52
|
+
);
|
|
49
53
|
},
|
|
50
54
|
}));
|
|
51
55
|
|
|
@@ -57,9 +61,13 @@ const getSubMenuData = computed<MenuButton[]>(() => {
|
|
|
57
61
|
type: 'button',
|
|
58
62
|
icon: Files,
|
|
59
63
|
handler: () => {
|
|
60
|
-
editorService.add(
|
|
61
|
-
|
|
62
|
-
|
|
64
|
+
editorService.add(
|
|
65
|
+
{
|
|
66
|
+
type: 'tab-pane',
|
|
67
|
+
},
|
|
68
|
+
undefined,
|
|
69
|
+
{ historySource: 'tree-contextmenu' },
|
|
70
|
+
);
|
|
63
71
|
},
|
|
64
72
|
},
|
|
65
73
|
];
|
|
@@ -106,9 +114,9 @@ const menuData = computed<(MenuButton | MenuComponent)[]>(() =>
|
|
|
106
114
|
items: getSubMenuData.value,
|
|
107
115
|
},
|
|
108
116
|
useCopyMenu(),
|
|
109
|
-
usePasteMenu(),
|
|
110
|
-
useDeleteMenu(),
|
|
111
|
-
useMoveToMenu(services),
|
|
117
|
+
usePasteMenu('tree-contextmenu'),
|
|
118
|
+
useDeleteMenu('tree-contextmenu'),
|
|
119
|
+
useMoveToMenu(services, 'tree-contextmenu'),
|
|
112
120
|
...props.layerContentMenu,
|
|
113
121
|
],
|
|
114
122
|
'layer',
|
|
@@ -25,9 +25,12 @@ const props = defineProps<{
|
|
|
25
25
|
const { editorService } = useServices();
|
|
26
26
|
|
|
27
27
|
const setNodeVisible = (visible: boolean) => {
|
|
28
|
-
editorService.update(
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
editorService.update(
|
|
29
|
+
{
|
|
30
|
+
id: props.data.id,
|
|
31
|
+
visible,
|
|
32
|
+
},
|
|
33
|
+
{ historySource: 'tree' },
|
|
34
|
+
);
|
|
32
35
|
};
|
|
33
36
|
</script>
|
|
@@ -9,12 +9,15 @@ import { updateStatus } from '@editor/utils/tree';
|
|
|
9
9
|
const createPageNodeStatus = (page: MPage | MPageFragment, initialLayerNodeStatus?: Map<Id, LayerNodeStatus>) => {
|
|
10
10
|
const map = new Map<Id, LayerNodeStatus>();
|
|
11
11
|
|
|
12
|
-
map.set(
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
map.set(
|
|
13
|
+
page.id,
|
|
14
|
+
initialLayerNodeStatus?.get(page.id) || {
|
|
15
|
+
visible: true,
|
|
16
|
+
expand: true,
|
|
17
|
+
selected: true,
|
|
18
|
+
draggable: false,
|
|
19
|
+
},
|
|
20
|
+
);
|
|
18
21
|
|
|
19
22
|
page.items.forEach((node: MNode) =>
|
|
20
23
|
traverseNode<MNode>(node, (node) => {
|
|
@@ -49,11 +49,11 @@ const menuData = computed<(MenuButton | MenuComponent)[]>(() =>
|
|
|
49
49
|
display: () => canCenter.value,
|
|
50
50
|
handler: () => {
|
|
51
51
|
if (!nodes.value) return;
|
|
52
|
-
editorService.alignCenter(nodes.value);
|
|
52
|
+
editorService.alignCenter(nodes.value, { historySource: 'stage-contextmenu' });
|
|
53
53
|
},
|
|
54
54
|
},
|
|
55
55
|
useCopyMenu(),
|
|
56
|
-
usePasteMenu(menuRef),
|
|
56
|
+
usePasteMenu('stage-contextmenu', menuRef),
|
|
57
57
|
{
|
|
58
58
|
type: 'divider',
|
|
59
59
|
direction: 'horizontal',
|
|
@@ -68,7 +68,7 @@ const menuData = computed<(MenuButton | MenuComponent)[]>(() =>
|
|
|
68
68
|
icon: markRaw(Top),
|
|
69
69
|
display: () => !isPage(node.value) && !isPageFragment(node.value) && !props.isMultiSelect,
|
|
70
70
|
handler: () => {
|
|
71
|
-
editorService.moveLayer(1);
|
|
71
|
+
editorService.moveLayer(1, { historySource: 'stage-contextmenu' });
|
|
72
72
|
},
|
|
73
73
|
},
|
|
74
74
|
{
|
|
@@ -77,7 +77,7 @@ const menuData = computed<(MenuButton | MenuComponent)[]>(() =>
|
|
|
77
77
|
icon: markRaw(Bottom),
|
|
78
78
|
display: () => !isPage(node.value) && !isPageFragment(node.value) && !props.isMultiSelect,
|
|
79
79
|
handler: () => {
|
|
80
|
-
editorService.moveLayer(-1);
|
|
80
|
+
editorService.moveLayer(-1, { historySource: 'stage-contextmenu' });
|
|
81
81
|
},
|
|
82
82
|
},
|
|
83
83
|
{
|
|
@@ -86,7 +86,7 @@ const menuData = computed<(MenuButton | MenuComponent)[]>(() =>
|
|
|
86
86
|
icon: markRaw(Top),
|
|
87
87
|
display: () => !isPage(node.value) && !isPageFragment(node.value) && !props.isMultiSelect,
|
|
88
88
|
handler: () => {
|
|
89
|
-
editorService.moveLayer(LayerOffset.TOP);
|
|
89
|
+
editorService.moveLayer(LayerOffset.TOP, { historySource: 'stage-contextmenu' });
|
|
90
90
|
},
|
|
91
91
|
},
|
|
92
92
|
{
|
|
@@ -95,16 +95,16 @@ const menuData = computed<(MenuButton | MenuComponent)[]>(() =>
|
|
|
95
95
|
icon: markRaw(Bottom),
|
|
96
96
|
display: () => !isPage(node.value) && !isPageFragment(node.value) && !props.isMultiSelect,
|
|
97
97
|
handler: () => {
|
|
98
|
-
editorService.moveLayer(LayerOffset.BOTTOM);
|
|
98
|
+
editorService.moveLayer(LayerOffset.BOTTOM, { historySource: 'stage-contextmenu' });
|
|
99
99
|
},
|
|
100
100
|
},
|
|
101
|
-
useMoveToMenu(services),
|
|
101
|
+
useMoveToMenu(services, 'stage-contextmenu'),
|
|
102
102
|
{
|
|
103
103
|
type: 'divider',
|
|
104
104
|
direction: 'horizontal',
|
|
105
105
|
display: () => !isPage(node.value) && !isPageFragment(node.value) && !props.isMultiSelect,
|
|
106
106
|
},
|
|
107
|
-
useDeleteMenu(),
|
|
107
|
+
useDeleteMenu('stage-contextmenu'),
|
|
108
108
|
{
|
|
109
109
|
type: 'divider',
|
|
110
110
|
direction: 'horizontal',
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-misused-promises */
|
|
2
1
|
/*
|
|
3
2
|
* Tencent is pleased to support the open source community by making TMagicEditor available.
|
|
4
3
|
*
|
|
@@ -19,45 +18,32 @@
|
|
|
19
18
|
|
|
20
19
|
import { EventEmitter } from 'events';
|
|
21
20
|
|
|
22
|
-
import { compose } from '@editor/utils/compose';
|
|
23
|
-
|
|
24
21
|
const methodName = (prefix: string, name: string) => `${prefix}${name[0].toUpperCase()}${name.substring(1)}`;
|
|
25
22
|
|
|
26
23
|
const isError = (error: any): boolean => Object.prototype.toString.call(error) === '[object Error]';
|
|
27
24
|
|
|
28
|
-
const doAction = (
|
|
29
|
-
args
|
|
30
|
-
scope: any,
|
|
31
|
-
sourceMethod: any,
|
|
32
|
-
beforeMethodName: string,
|
|
33
|
-
afterMethodName: string,
|
|
34
|
-
fn: (args: any[], next?: Function | undefined) => void,
|
|
35
|
-
) => {
|
|
36
|
-
try {
|
|
37
|
-
let beforeArgs = args;
|
|
25
|
+
const doAction = (args: any[], scope: any, sourceMethod: any, beforeMethodName: string, afterMethodName: string) => {
|
|
26
|
+
let beforeArgs = args;
|
|
38
27
|
|
|
39
|
-
|
|
40
|
-
|
|
28
|
+
for (const beforeMethod of scope.pluginOptionsList[beforeMethodName]) {
|
|
29
|
+
beforeArgs = beforeMethod(...beforeArgs) || [];
|
|
41
30
|
|
|
42
|
-
|
|
31
|
+
if (isError(beforeArgs)) throw beforeArgs;
|
|
43
32
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
33
|
+
if (!Array.isArray(beforeArgs)) {
|
|
34
|
+
beforeArgs = [beforeArgs];
|
|
47
35
|
}
|
|
36
|
+
}
|
|
48
37
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
for (const afterMethod of scope.pluginOptionsList[afterMethodName]) {
|
|
52
|
-
returnValue = afterMethod(returnValue, ...beforeArgs);
|
|
38
|
+
let returnValue: any = sourceMethod.apply(scope, beforeArgs);
|
|
53
39
|
|
|
54
|
-
|
|
55
|
-
|
|
40
|
+
for (const afterMethod of scope.pluginOptionsList[afterMethodName]) {
|
|
41
|
+
returnValue = afterMethod(returnValue, ...beforeArgs);
|
|
56
42
|
|
|
57
|
-
|
|
58
|
-
} catch (error) {
|
|
59
|
-
throw error;
|
|
43
|
+
if (isError(returnValue)) throw returnValue;
|
|
60
44
|
}
|
|
45
|
+
|
|
46
|
+
return returnValue;
|
|
61
47
|
};
|
|
62
48
|
|
|
63
49
|
const doAsyncAction = async (
|
|
@@ -66,40 +52,34 @@ const doAsyncAction = async (
|
|
|
66
52
|
sourceMethod: any,
|
|
67
53
|
beforeMethodName: string,
|
|
68
54
|
afterMethodName: string,
|
|
69
|
-
fn: (args: any[], next?: Function | undefined) => Promise<void> | void,
|
|
70
55
|
) => {
|
|
71
|
-
|
|
72
|
-
let beforeArgs = args;
|
|
56
|
+
let beforeArgs = args;
|
|
73
57
|
|
|
74
|
-
|
|
75
|
-
|
|
58
|
+
for (const beforeMethod of scope.pluginOptionsList[beforeMethodName]) {
|
|
59
|
+
beforeArgs = (await beforeMethod(...beforeArgs)) || [];
|
|
76
60
|
|
|
77
|
-
|
|
61
|
+
if (isError(beforeArgs)) throw beforeArgs;
|
|
78
62
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
}
|
|
63
|
+
if (!Array.isArray(beforeArgs)) {
|
|
64
|
+
beforeArgs = [beforeArgs];
|
|
82
65
|
}
|
|
66
|
+
}
|
|
83
67
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
for (const afterMethod of scope.pluginOptionsList[afterMethodName]) {
|
|
87
|
-
returnValue = await afterMethod(returnValue, ...beforeArgs);
|
|
68
|
+
let returnValue: any = await sourceMethod.apply(scope, beforeArgs);
|
|
88
69
|
|
|
89
|
-
|
|
90
|
-
|
|
70
|
+
for (const afterMethod of scope.pluginOptionsList[afterMethodName]) {
|
|
71
|
+
returnValue = await afterMethod(returnValue, ...beforeArgs);
|
|
91
72
|
|
|
92
|
-
|
|
93
|
-
} catch (error) {
|
|
94
|
-
throw error;
|
|
73
|
+
if (isError(returnValue)) throw returnValue;
|
|
95
74
|
}
|
|
75
|
+
|
|
76
|
+
return returnValue;
|
|
96
77
|
};
|
|
97
78
|
|
|
98
79
|
/**
|
|
99
|
-
*
|
|
100
|
-
* 方法1:
|
|
80
|
+
* 对Class进行扩展
|
|
101
81
|
* 给Class中的每个方法都添加before after两个钩子
|
|
102
|
-
* 给Class添加一个usePlugin方法,
|
|
82
|
+
* 给Class添加一个usePlugin方法,usePlugin方法可以传入一个包含before或者after方法的对象
|
|
103
83
|
*
|
|
104
84
|
* 例如:
|
|
105
85
|
* Class EditorService extends BaseService {
|
|
@@ -124,27 +104,9 @@ const doAsyncAction = async (
|
|
|
124
104
|
*
|
|
125
105
|
* 调用时的参数会透传到before方法的参数中, 然后before的return 会作为原方法的参数和after的参数,after第一个参数则是原方法的return值;
|
|
126
106
|
* 如需终止后续方法调用可以return new Error();
|
|
127
|
-
*
|
|
128
|
-
* 方法2:
|
|
129
|
-
* 给Class中的每个方法都添加中间件
|
|
130
|
-
* 给Class添加一个use方法,use方法可以传入一个包含源对象方法名作为key值的对象
|
|
131
|
-
*
|
|
132
|
-
* 例如:
|
|
133
|
-
* Class EditorService extends BaseService {
|
|
134
|
-
* constructor() {
|
|
135
|
-
* super([ { name: 'add', isAsync: true },]);
|
|
136
|
-
* }
|
|
137
|
-
* add(value) { return result; }
|
|
138
|
-
* };
|
|
139
|
-
*
|
|
140
|
-
* const editorService = new EditorService();
|
|
141
|
-
* editorService.use({
|
|
142
|
-
* add(value, next) { console.log(value); next() },
|
|
143
|
-
* });
|
|
144
107
|
*/
|
|
145
|
-
|
|
108
|
+
class BaseService extends EventEmitter {
|
|
146
109
|
private pluginOptionsList: Record<string, Function[]> = {};
|
|
147
|
-
private middleware: Record<string, Function[]> = {};
|
|
148
110
|
private taskList: (() => Promise<void>)[] = [];
|
|
149
111
|
private doingTask = false;
|
|
150
112
|
|
|
@@ -161,14 +123,12 @@ export default class extends EventEmitter {
|
|
|
161
123
|
|
|
162
124
|
this.pluginOptionsList[beforeMethodName] = [];
|
|
163
125
|
this.pluginOptionsList[afterMethodName] = [];
|
|
164
|
-
this.middleware[propertyName] = [];
|
|
165
126
|
|
|
166
|
-
const fn = compose(this.middleware[propertyName], isAsync);
|
|
167
127
|
Object.defineProperty(scope, propertyName, {
|
|
168
128
|
value: isAsync
|
|
169
129
|
? async (...args: any[]) => {
|
|
170
130
|
if (!serialMethods.includes(propertyName)) {
|
|
171
|
-
return doAsyncAction(args, scope, sourceMethod, beforeMethodName, afterMethodName
|
|
131
|
+
return doAsyncAction(args, scope, sourceMethod, beforeMethodName, afterMethodName);
|
|
172
132
|
}
|
|
173
133
|
|
|
174
134
|
// 由于async await,所以会出现函数执行到await时让出线程,导致执行顺序出错,例如调用了select(1) -> update -> select(2),这个时候就有可能出现update了2;
|
|
@@ -176,7 +136,7 @@ export default class extends EventEmitter {
|
|
|
176
136
|
const promise = new Promise<any>((resolve, reject) => {
|
|
177
137
|
this.taskList.push(async () => {
|
|
178
138
|
try {
|
|
179
|
-
const value = await doAsyncAction(args, scope, sourceMethod, beforeMethodName, afterMethodName
|
|
139
|
+
const value = await doAsyncAction(args, scope, sourceMethod, beforeMethodName, afterMethodName);
|
|
180
140
|
resolve(value);
|
|
181
141
|
} catch (e) {
|
|
182
142
|
reject(e);
|
|
@@ -190,20 +150,11 @@ export default class extends EventEmitter {
|
|
|
190
150
|
|
|
191
151
|
return promise;
|
|
192
152
|
}
|
|
193
|
-
: (...args: any[]) => doAction(args, scope, sourceMethod, beforeMethodName, afterMethodName
|
|
153
|
+
: (...args: any[]) => doAction(args, scope, sourceMethod, beforeMethodName, afterMethodName),
|
|
194
154
|
});
|
|
195
155
|
});
|
|
196
156
|
}
|
|
197
157
|
|
|
198
|
-
/**
|
|
199
|
-
* @deprecated 请使用usePlugin代替
|
|
200
|
-
*/
|
|
201
|
-
public use(options: Record<string, Function>) {
|
|
202
|
-
for (const [methodName, method] of Object.entries(options)) {
|
|
203
|
-
if (typeof method === 'function') this.middleware[methodName].push(method);
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
|
|
207
158
|
public usePlugin(options: Record<string, Function>) {
|
|
208
159
|
for (const [methodName, method] of Object.entries(options)) {
|
|
209
160
|
if (typeof method === 'function' && !this.pluginOptionsList[methodName].includes(method)) {
|
|
@@ -224,10 +175,6 @@ export default class extends EventEmitter {
|
|
|
224
175
|
for (const key of Object.keys(this.pluginOptionsList)) {
|
|
225
176
|
this.pluginOptionsList[key] = [];
|
|
226
177
|
}
|
|
227
|
-
|
|
228
|
-
for (const key of Object.keys(this.middleware)) {
|
|
229
|
-
this.middleware[key] = [];
|
|
230
|
-
}
|
|
231
178
|
}
|
|
232
179
|
|
|
233
180
|
private async doTask() {
|
|
@@ -240,3 +187,5 @@ export default class extends EventEmitter {
|
|
|
240
187
|
this.doingTask = false;
|
|
241
188
|
}
|
|
242
189
|
}
|
|
190
|
+
|
|
191
|
+
export default BaseService;
|