better click handler

This commit is contained in:
Henry Jameson 2025-08-19 17:28:19 +03:00
commit bebb3fcfa6
4 changed files with 30 additions and 1 deletions

View file

@ -42,6 +42,7 @@ library.add(
const Notification = { const Notification = {
data () { data () {
return { return {
selecting: false,
statusExpanded: false, statusExpanded: false,
unmuted: false, unmuted: false,
showingApproveConfirmDialog: false, showingApproveConfirmDialog: false,
@ -62,11 +63,35 @@ const Notification = {
UserLink, UserLink,
ConfirmModal ConfirmModal
}, },
mounted () {
document.addEventListener('selectionchange', this.onContentSelect)
},
unmounted () {
document.removeEventListener('selectionchange', this.onContentSelect)
},
methods: { methods: {
toggleStatusExpanded () { toggleStatusExpanded () {
if (!this.expandable) return if (!this.expandable) return
this.statusExpanded = !this.statusExpanded this.statusExpanded = !this.statusExpanded
}, },
onContentSelect () {
const { isCollapsed, anchorNode, offsetNode } = document.getSelection()
if (isCollapsed) {
this.selecting = false
return
}
const within = this.$refs.root.contains(anchorNode) || this.$refs.root.contains(offsetNode)
if (within) {
this.selecting = true
} else {
this.selecting = false
}
},
onContentClick (e) {
if (!this.selecting && !e.target.closest('a') && !e.target.closest('button')) {
this.toggleStatusExpanded()
}
},
generateUserProfileLink (user) { generateUserProfileLink (user) {
return generateProfileLink(user.id, user.screen_name, this.$store.state.instance.restrictedNicknames) return generateProfileLink(user.id, user.screen_name, this.$store.state.instance.restrictedNicknames)
}, },

View file

@ -1,6 +1,7 @@
<template> <template>
<article <article
v-if="notification.type === 'mention' || notification.type === 'status'" v-if="notification.type === 'mention' || notification.type === 'status'"
ref="root"
> >
<Status <Status
class="Notification" class="Notification"
@ -12,6 +13,7 @@
<article <article
class="NotificationParent" class="NotificationParent"
:class="{ '-expandable': expandable }" :class="{ '-expandable': expandable }"
ref="root"
v-else v-else
> >
<div <div
@ -256,7 +258,7 @@
:compact="!statusExpanded" :compact="!statusExpanded"
:status="notification.status" :status="notification.status"
:collapse="!statusExpanded" :collapse="!statusExpanded"
@click="toggleStatusExpanded()" @click="onContentClick"
/> />
</template> </template>
</div> </div>

View file

@ -41,6 +41,7 @@ const StatusContent = {
parseReadyDone: false parseReadyDone: false
} }
}, },
emits: ['parseReady'],
computed: { computed: {
localCollapseSubjectDefault () { localCollapseSubjectDefault () {
return this.mergedConfig.collapseMessageWithSubject return this.mergedConfig.collapseMessageWithSubject

View file

@ -65,6 +65,7 @@ const StatusContent = {
'controlledShowingLongSubject', 'controlledShowingLongSubject',
'controlledToggleShowingLongSubject' 'controlledToggleShowingLongSubject'
], ],
emits: ['parseReady', 'mediaplay', 'mediapause'],
data () { data () {
return { return {
uncontrolledShowingTall: this.fullContent || (this.inConversation && this.focused), uncontrolledShowingTall: this.fullContent || (this.inConversation && this.focused),