From 417f3fab67b4a6f880daf83aa37897352c9f133f Mon Sep 17 00:00:00 2001 From: Giovane Cardoso Date: Wed, 4 May 2022 12:51:46 -0300 Subject: [PATCH] chore(editor): emitter options rewrite --- .../default/EditorEntityDefaultInput.vue | 896 ------------------ .../EditorEntityDefaultInputSelect.vue | 8 - .../blocks/EditorEntityDefaultCheckbox.vue | 2 +- .../blocks/EditorEntityDefaultHeading.vue | 5 +- .../blocks/EditorEntityDefaultList.vue | 2 +- .../blocks/EditorEntityDefaultParagraph.vue | 2 +- .../blocks/EditorEntityDefaultText.vue | 83 +- .../options/EditorEntityDefaultOptions.vue | 16 +- .../EditorEntityDefaultOptionsItem.vue | 4 - packages/better-write-app/src/main.ts | 6 +- .../better-write-app/src/store/context.ts | 2 +- packages/better-write-app/src/use/editor.ts | 8 +- packages/better-write-app/src/use/emitter.ts | 5 +- packages/better-write-app/src/use/entity.ts | 152 +-- packages/better-write-app/src/use/page.ts | 6 - packages/better-write-app/src/use/raw.ts | 39 +- .../src/use/storage/storage.ts | 2 - .../better-write-types/src/types/emitter.ts | 42 +- 18 files changed, 142 insertions(+), 1138 deletions(-) delete mode 100644 packages/better-write-app/src/components/page/editor/entity/default/EditorEntityDefaultInput.vue delete mode 100644 packages/better-write-app/src/components/page/editor/entity/default/EditorEntityDefaultInputSelect.vue diff --git a/packages/better-write-app/src/components/page/editor/entity/default/EditorEntityDefaultInput.vue b/packages/better-write-app/src/components/page/editor/entity/default/EditorEntityDefaultInput.vue deleted file mode 100644 index ef1d2c787..000000000 --- a/packages/better-write-app/src/components/page/editor/entity/default/EditorEntityDefaultInput.vue +++ /dev/null @@ -1,896 +0,0 @@ - - - diff --git a/packages/better-write-app/src/components/page/editor/entity/default/EditorEntityDefaultInputSelect.vue b/packages/better-write-app/src/components/page/editor/entity/default/EditorEntityDefaultInputSelect.vue deleted file mode 100644 index b15220028..000000000 --- a/packages/better-write-app/src/components/page/editor/entity/default/EditorEntityDefaultInputSelect.vue +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/packages/better-write-app/src/components/page/editor/entity/default/blocks/EditorEntityDefaultCheckbox.vue b/packages/better-write-app/src/components/page/editor/entity/default/blocks/EditorEntityDefaultCheckbox.vue index 1e30972ab..ffc86fd0a 100644 --- a/packages/better-write-app/src/components/page/editor/entity/default/blocks/EditorEntityDefaultCheckbox.vue +++ b/packages/better-write-app/src/components/page/editor/entity/default/blocks/EditorEntityDefaultCheckbox.vue @@ -6,7 +6,7 @@ >
- + diff --git a/packages/better-write-app/src/components/page/editor/entity/default/blocks/EditorEntityDefaultHeading.vue b/packages/better-write-app/src/components/page/editor/entity/default/blocks/EditorEntityDefaultHeading.vue index 823106615..76a9ab0aa 100644 --- a/packages/better-write-app/src/components/page/editor/entity/default/blocks/EditorEntityDefaultHeading.vue +++ b/packages/better-write-app/src/components/page/editor/entity/default/blocks/EditorEntityDefaultHeading.vue @@ -50,6 +50,9 @@ await nextTick - emitter.emit('entity-text-focus', _index.value + 1) + emitter.emit('entity-text-focus', { + target: _index.value + 1, + position: 'auto', + }) } diff --git a/packages/better-write-app/src/components/page/editor/entity/default/blocks/EditorEntityDefaultList.vue b/packages/better-write-app/src/components/page/editor/entity/default/blocks/EditorEntityDefaultList.vue index 889605943..86911a189 100644 --- a/packages/better-write-app/src/components/page/editor/entity/default/blocks/EditorEntityDefaultList.vue +++ b/packages/better-write-app/src/components/page/editor/entity/default/blocks/EditorEntityDefaultList.vue @@ -10,7 +10,7 @@ class="h-1 w-1 p-1 bg-theme-background-3 rounded-full" :class="[last ? 'mt-2.5' : '']" >
- + diff --git a/packages/better-write-app/src/components/page/editor/entity/default/blocks/EditorEntityDefaultParagraph.vue b/packages/better-write-app/src/components/page/editor/entity/default/blocks/EditorEntityDefaultParagraph.vue index f24839aa7..a1432a6ba 100644 --- a/packages/better-write-app/src/components/page/editor/entity/default/blocks/EditorEntityDefaultParagraph.vue +++ b/packages/better-write-app/src/components/page/editor/entity/default/blocks/EditorEntityDefaultParagraph.vue @@ -1,6 +1,6 @@ diff --git a/packages/better-write-app/src/components/page/editor/entity/default/blocks/EditorEntityDefaultText.vue b/packages/better-write-app/src/components/page/editor/entity/default/blocks/EditorEntityDefaultText.vue index 07edf00d2..84e632ce3 100644 --- a/packages/better-write-app/src/components/page/editor/entity/default/blocks/EditorEntityDefaultText.vue +++ b/packages/better-write-app/src/components/page/editor/entity/default/blocks/EditorEntityDefaultText.vue @@ -5,7 +5,8 @@

@@ -30,7 +32,7 @@ import { useFocus } from '@vueuse/core' import { useI18n } from 'vue-i18n' import { useContextStore } from '@/store/context' - import { Entity, ID } from 'better-write-types' + import { Entity } from 'better-write-types' import { useRaw } from '@/use/raw' import { useAbsoluteStore } from '@/store/absolute' import { useProject } from '@/use/project' @@ -39,6 +41,7 @@ const props = defineProps<{ entity: Entity + isAttached: boolean }>() const EDITOR = useEditorStore() @@ -71,6 +74,7 @@ } } + /* save block */ if (!_focused) { block.save(_index.value, __INPUT__.value.innerHTML) @@ -79,11 +83,30 @@ }) onMounted(() => { - emitter.on('entity-text-focus', (index: ID) => { - if (CONTEXT.entities[index] === props.entity) { - __INPUT__.value?.focus() + emitter.on( + 'entity-text-focus', + async ({ target, position, positionOffset }) => { + if (CONTEXT.entities[target] === props.entity) { + switch (position) { + case 'start': + raw.v2().caret().set(__INPUT__.value, 0) + break + case 'end': + raw.v2().caret().setEnd(__INPUT__.value) + break + case 'offset': + raw + .v2() + .caret() + .set(__INPUT__.value, positionOffset as number) + break + case 'auto': + __INPUT__.value?.focus() + break + } + } } - }) + ) emitter.on('entity-text-force-save', () => { if (isSalvageable.value && __INPUT__.value && __INPUT__.value.innerHTML) { @@ -154,10 +177,6 @@ e.stopPropagation() entity.base().onDelete(props.entity, _index.value) - - await nextTick - - emitter.emit('entity-reset') } // italic entity @@ -205,12 +224,12 @@ e.preventDefault() e.stopPropagation() - entity.base().onUpCursor(props.entity) + // entity.base().onUpCursor(props.entity) } else if (e.key === 'ArrowDown') { e.preventDefault() e.stopPropagation() - entity.base().onDownCursor(props.entity) + // entity.base().onDownCursor(props.entity) } return @@ -231,19 +250,6 @@ if (entity.utils().isFixed(_index.value - 1)) return entity.base().onDelete(props.entity, _index.value) - - await nextTick - - emitter.emit('entity-reset') - - await nextTick - - emitter.emit('entity-open', { - entity: props.entity, - up: true, - cursor: true, - keyboard: true, - }) } else if (e.key === 'ArrowUp') { // to top if (start) { @@ -252,32 +258,19 @@ entity.utils().isFixed(_index.value - 1) ) return - - emitter.emit('entity-edit-save') - - await nextTick - - emitter.emit('entity-open', { - entity: props.entity, - up: true, - keyboard: true, - }) } } else if (e.key === 'ArrowDown') { // to bottom if (end) { if (entity.utils().isFixed(_index.value + 1)) return - - emitter.emit('entity-edit-save') - - await nextTick - - emitter.emit('entity-open', { - entity: props.entity, - up: false, - keyboard: true, - }) } } } + + const onEnter = (e: KeyboardEvent) => { + if (props.isAttached) { + e.preventDefault() + e.stopPropagation() + } + } diff --git a/packages/better-write-app/src/components/page/editor/entity/default/options/EditorEntityDefaultOptions.vue b/packages/better-write-app/src/components/page/editor/entity/default/options/EditorEntityDefaultOptions.vue index bba745741..19cdc704a 100644 --- a/packages/better-write-app/src/components/page/editor/entity/default/options/EditorEntityDefaultOptions.vue +++ b/packages/better-write-app/src/components/page/editor/entity/default/options/EditorEntityDefaultOptions.vue @@ -209,6 +209,7 @@ import useEmitter from '@/use/emitter' import { useFactory } from '@/use/factory' import { usePlugin } from 'better-write-plugin-core' + import { useEntity } from '@/use/entity' const EDITOR = useEditorStore() const ABSOLUTE = useAbsoluteStore() @@ -217,6 +218,7 @@ const entity = computed( () => CONTEXT.entities[EDITOR.actives.entity.index] ) + const _index = computed(() => CONTEXT.entities.indexOf(entity.value)) const options = ref(null) const visible = ref(false) const block = ref(false) @@ -225,6 +227,7 @@ const emitter = useEmitter() const plugin = usePlugin() const factory = useFactory() + const ent = useEntity() onClickOutside(options as any, () => onClose()) @@ -272,8 +275,8 @@ ABSOLUTE.entity.menu = false } - const onDeleteEntity = () => { - CONTEXT.removeInPage(entity.value) + const onDeleteEntity = async () => { + ent.base().onDelete(entity.value, _index.value) } const onUpEntity = () => { @@ -295,10 +298,6 @@ } const onNewEntity = async (type: EntityType) => { - emitter.emit('entity-not-mutate', entity.value) - - await nextTick - CONTEXT.newInPageByOption({ entity: entity.value, type, @@ -306,6 +305,11 @@ await nextTick + emitter.emit('entity-text-focus', { + position: 'end', + target: _index.value + 1, + }) + plugin.emit('plugin-entity-create', { data: entity.value.raw, index: CONTEXT.entities.indexOf(entity.value), diff --git a/packages/better-write-app/src/components/page/editor/entity/default/options/EditorEntityDefaultOptionsItem.vue b/packages/better-write-app/src/components/page/editor/entity/default/options/EditorEntityDefaultOptionsItem.vue index b6cba3663..4c883279d 100644 --- a/packages/better-write-app/src/components/page/editor/entity/default/options/EditorEntityDefaultOptionsItem.vue +++ b/packages/better-write-app/src/components/page/editor/entity/default/options/EditorEntityDefaultOptionsItem.vue @@ -27,7 +27,6 @@