Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F162697
body_scroll_lock.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Size
2 KB
Referenced Files
None
Subscribers
None
body_scroll_lock.js
View Options
import
*
as
bodyScrollLock
from
'body-scroll-lock'
let
previousNavPaddingRight
let
previousAppBgWrapperRight
const
lockerEls
=
new
Set
([])
const
disableBodyScroll
=
(
el
)
=>
{
const
scrollBarGap
=
window
.
innerWidth
-
document
.
documentElement
.
clientWidth
bodyScrollLock
.
disableBodyScroll
(
el
,
{
reserveScrollBarGap
:
true
})
lockerEls
.
add
(
el
)
setTimeout
(()
=>
{
if
(
lockerEls
.
size
<=
1
)
{
// If previousNavPaddingRight is already set, don't set it again.
if
(
previousNavPaddingRight
===
undefined
)
{
const
navEl
=
document
.
getElementById
(
'nav'
)
previousNavPaddingRight
=
window
.
getComputedStyle
(
navEl
).
getPropertyValue
(
'padding-right'
)
navEl
.
style
.
paddingRight
=
previousNavPaddingRight
?
`calc(
${
previousNavPaddingRight
}
+
${
scrollBarGap
}
px)`
:
`
${
scrollBarGap
}
px`
}
// If previousAppBgWrapeprRight is already set, don't set it again.
if
(
previousAppBgWrapperRight
===
undefined
)
{
const
appBgWrapperEl
=
document
.
getElementById
(
'app_bg_wrapper'
)
previousAppBgWrapperRight
=
window
.
getComputedStyle
(
appBgWrapperEl
).
getPropertyValue
(
'right'
)
appBgWrapperEl
.
style
.
right
=
previousAppBgWrapperRight
?
`calc(
${
previousAppBgWrapperRight
}
+
${
scrollBarGap
}
px)`
:
`
${
scrollBarGap
}
px`
}
document
.
body
.
classList
.
add
(
'scroll-locked'
)
}
})
}
const
enableBodyScroll
=
(
el
)
=>
{
lockerEls
.
delete
(
el
)
setTimeout
(()
=>
{
if
(
lockerEls
.
size
===
0
)
{
if
(
previousNavPaddingRight
!==
undefined
)
{
document
.
getElementById
(
'nav'
).
style
.
paddingRight
=
previousNavPaddingRight
// Restore previousNavPaddingRight to undefined so disableBodyScroll knows it can be set again.
previousNavPaddingRight
=
undefined
}
if
(
previousAppBgWrapperRight
!==
undefined
)
{
document
.
getElementById
(
'app_bg_wrapper'
).
style
.
right
=
previousAppBgWrapperRight
// Restore previousAppBgWrapperRight to undefined so disableBodyScroll knows it can be set again.
previousAppBgWrapperRight
=
undefined
}
document
.
body
.
classList
.
remove
(
'scroll-locked'
)
}
})
bodyScrollLock
.
enableBodyScroll
(
el
)
}
const
directive
=
{
mounted
:
(
el
,
binding
)
=>
{
if
(
binding
.
value
)
{
disableBodyScroll
(
el
)
}
},
updated
:
(
el
,
binding
)
=>
{
if
(
binding
.
oldValue
===
binding
.
value
)
{
return
}
if
(
binding
.
value
)
{
disableBodyScroll
(
el
)
}
else
{
enableBodyScroll
(
el
)
}
},
unmounted
:
(
el
)
=>
{
enableBodyScroll
(
el
)
}
}
export
default
(
Vue
)
=>
{
Vue
.
directive
(
'body-scroll-lock'
,
directive
)
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Feb 21, 5:40 PM (13 h, 4 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
66775
Default Alt Text
body_scroll_lock.js (2 KB)
Attached To
Mode
rPUFE pleroma-fe-upstream
Attached
Detach File
Event Timeline
Log In to Comment