From 0ef926e5b473213e3436170fc18ae5eaf52dd333 Mon Sep 17 00:00:00 2001 From: Varun Patil Date: Tue, 11 Oct 2022 12:49:05 -0700 Subject: [PATCH] Add face merging (fix #65) --- src/components/FaceMergeModal.vue | 162 ++++++++++++++++++++++++++++++ src/components/FaceTopMatter.vue | 14 ++- src/components/Modal.vue | 5 +- src/components/Tag.vue | 8 +- 4 files changed, 184 insertions(+), 5 deletions(-) create mode 100644 src/components/FaceMergeModal.vue diff --git a/src/components/FaceMergeModal.vue b/src/components/FaceMergeModal.vue new file mode 100644 index 00000000..0f945b06 --- /dev/null +++ b/src/components/FaceMergeModal.vue @@ -0,0 +1,162 @@ + + + + + \ No newline at end of file diff --git a/src/components/FaceTopMatter.vue b/src/components/FaceTopMatter.vue index a548041c..ded8f6e9 100644 --- a/src/components/FaceTopMatter.vue +++ b/src/components/FaceTopMatter.vue @@ -11,11 +11,15 @@
- + {{ t('memories', 'Rename person') }} - + + {{ t('memories', 'Merge with different person') }} + + + {{ t('memories', 'Remove person') }} @@ -24,6 +28,7 @@ +
@@ -34,9 +39,11 @@ import GlobalMixin from '../mixins/GlobalMixin'; import { NcActions, NcActionButton } from '@nextcloud/vue'; import FaceEditModal from './FaceEditModal.vue'; import FaceDeleteModal from './FaceDeleteModal.vue'; +import FaceMergeModal from './FaceMergeModal.vue'; import BackIcon from 'vue-material-design-icons/ArrowLeft.vue'; import EditIcon from 'vue-material-design-icons/Pencil.vue'; import DeleteIcon from 'vue-material-design-icons/Close.vue'; +import MergeIcon from 'vue-material-design-icons/Merge.vue'; @Component({ components: { @@ -44,15 +51,18 @@ import DeleteIcon from 'vue-material-design-icons/Close.vue'; NcActionButton, FaceEditModal, FaceDeleteModal, + FaceMergeModal, BackIcon, EditIcon, DeleteIcon, + MergeIcon, }, }) export default class FaceTopMatter extends Mixins(GlobalMixin) { private name: string = ''; private showEditModal: boolean = false; private showDeleteModal: boolean = false; + private showMergeModal: boolean = false; @Watch('$route') async routeChange(from: any, to: any) { diff --git a/src/components/Modal.vue b/src/components/Modal.vue index a972e7e4..85dc181f 100644 --- a/src/components/Modal.vue +++ b/src/components/Modal.vue @@ -1,6 +1,6 @@ diff --git a/src/components/Tag.vue b/src/components/Tag.vue index 24007408..925dc098 100644 --- a/src/components/Tag.vue +++ b/src/components/Tag.vue @@ -57,6 +57,7 @@ interface IFaceDetection extends IPhoto { export default class Tag extends Mixins(GlobalMixin) { @Prop() data: ITag; @Prop() rowHeight: number; + @Prop() noNavigate: boolean; // Separate property because the one on data isn't reactive private previews: IPhoto[] = []; @@ -112,6 +113,11 @@ export default class Tag extends Mixins(GlobalMixin) { /** Open tag */ openTag() { + this.$emit('open', this.data); + if (this.noNavigate) { + return; + } + if (this.isFace) { const name = this.data.name || this.data.fileid.toString(); const user = this.data.user_id; @@ -178,7 +184,7 @@ export default class Tag extends Mixins(GlobalMixin) { top: 50%; width: 100%; transform: translateY(-50%); color: white; - width: 100%; + width: 90%; padding: 0 5%; text-align: center; font-size: 1.2em;