aboutsummaryrefslogtreecommitdiff
path: root/src/components/popover/popover.js
diff options
context:
space:
mode:
authorHenry Jameson <me@hjkos.com>2022-07-31 00:05:26 +0300
committerHenry Jameson <me@hjkos.com>2022-07-31 00:05:26 +0300
commitd5bc825616858f8eccb4fb9786f0178bce44e979 (patch)
treed2c876ddbd49550c4c82497275d20eada9fdd480 /src/components/popover/popover.js
parent03e6c6b993133673f9491aa313e63d65cdf176ff (diff)
add stay-on-click prop to solve case of clicking user avatar in status popover
Diffstat (limited to 'src/components/popover/popover.js')
-rw-r--r--src/components/popover/popover.js18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/components/popover/popover.js b/src/components/popover/popover.js
index c19e6904..843b22f3 100644
--- a/src/components/popover/popover.js
+++ b/src/components/popover/popover.js
@@ -40,7 +40,10 @@ const Popover = {
overlayCenters: Boolean,
// What selector (witin popover!) to use for determining center of popover
- overlayCentersSelector: String
+ overlayCentersSelector: String,
+
+ // Lets hover popover stay when clicking inside of it
+ stayOnClick: Boolean
},
inject: ['popoversZLayer'], // override popover z layer
data () {
@@ -50,6 +53,7 @@ const Popover = {
// with popovers refusing to be hidden when user wants to interact with something in below popover
lockReEntry: false,
hidden: true,
+ pinned: false,
styles: {},
oldSize: { width: 0, height: 0 },
scrollable: null,
@@ -196,9 +200,10 @@ const Popover = {
},
showPopover () {
if (this.disabled) return
+ this.pinned = false
const wasHidden = this.hidden
this.hidden = false
- if (this.trigger === 'click') {
+ if (this.trigger === 'click' || this.stayOnClick) {
document.addEventListener('click', this.onClickOutside)
}
this.scrollable.addEventListener('scroll', this.onScroll)
@@ -227,7 +232,7 @@ const Popover = {
}
},
onMouseleave (e) {
- if (this.trigger === 'hover') {
+ if (this.trigger === 'hover' && !this.pinned) {
this.graceTimeout = setTimeout(() => this.hidePopover(), 1)
}
},
@@ -240,7 +245,7 @@ const Popover = {
}
},
onMouseleaveContent (e) {
- if (this.trigger === 'hover') {
+ if (this.trigger === 'hover' && !this.pinned) {
this.graceTimeout = setTimeout(() => this.hidePopover(), 1)
}
},
@@ -259,6 +264,11 @@ const Popover = {
if (this.$el.contains(e.target)) return
this.hidePopover()
},
+ onClickContent (e) {
+ if (this.trigger === 'hover' && this.stayOnClick) {
+ this.pinned = true
+ }
+ },
onScroll (e) {
this.updateStyles()
},