Skip to content

Commit

Permalink
fix: do not fix scrollbar padding in case body has overflow-y: hidden (
Browse files Browse the repository at this point in the history
  • Loading branch information
limonte committed Jun 23, 2020
1 parent 99a0e31 commit bc90d3c
Show file tree
Hide file tree
Showing 4 changed files with 418 additions and 501 deletions.
27 changes: 22 additions & 5 deletions cypress/integration/scrollbar.spec.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Swal, SwalWithoutAnimation } from '../utils'
import { Swal, SwalWithoutAnimation, ensureClosed } from '../utils'
import { measureScrollbar } from '../../src/utils/dom/measureScrollbar'

describe('Vertical scrollbar', () => {
Expand All @@ -10,12 +10,14 @@ describe('Vertical scrollbar', () => {
onOpen: () => {
expect(Swal.getContainer().scrollTop).to.equal(0)
expect(Swal.getContainer().style.overflowY).to.equal('auto')
Swal.close()
done()
}
})
})

it('should be hidden and the according padding-right should be set', (done) => {
ensureClosed()
const talltDiv = document.createElement('div')
talltDiv.innerHTML = Array(100).join('<div>lorem ipsum</div>')
document.body.appendChild(talltDiv)
Expand All @@ -31,11 +33,11 @@ describe('Vertical scrollbar', () => {
done()
}
})
const bodyStyles = window.getComputedStyle(document.body)

const bodyStyles = window.getComputedStyle(document.body)
expect(bodyStyles.paddingRight).to.equal(`${scrollbarWidth + 30}px`)
expect(bodyStyles.overflow).to.equal('hidden')
Swal.clickConfirm()
Swal.close()
})

it('scrollbarPadding disabled', () => {
Expand All @@ -54,7 +56,7 @@ describe('Vertical scrollbar', () => {

const bodyStyles = window.getComputedStyle(document.body)
expect(bodyStyles.paddingRight).to.equal('30px')
Swal.clickConfirm()
Swal.close()
})

it('should be restored before a toast is fired after a modal', (done) => {
Expand All @@ -78,6 +80,21 @@ describe('Vertical scrollbar', () => {
})

const bodyStyles = window.getComputedStyle(document.body)
Swal.clickConfirm()
Swal.close()
})

it('should not add body padding if body has overflow-y: hidden', () => {
const talltDiv = document.createElement('div')
talltDiv.innerHTML = Array(100).join('<div>lorem ipsum</div>')
document.body.appendChild(talltDiv)
document.body.style.paddingRight = '0px'
document.body.style.overflowY = 'hidden'

SwalWithoutAnimation.fire()

const bodyStyles = window.getComputedStyle(document.body)
expect(bodyStyles.paddingRight).to.equal('0px')
document.body.removeChild(talltDiv)
Swal.close()
})
})
10 changes: 6 additions & 4 deletions src/utils/openPopup.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,16 @@ export const openPopup = (params) => {
params.onBeforeOpen(popup)
}

const bodyStyles = window.getComputedStyle(document.body)
const initialBodyOverflow = bodyStyles.overflowY
addClasses(container, popup, params)

// scrolling is 'hidden' until animation is done, after that 'auto'
setScrollingVisibility(container, popup)

if (dom.isModal()) {
fixScrollContainer(container, params.scrollbarPadding)
fixScrollContainer(container, params.scrollbarPadding, initialBodyOverflow)
setAriaHidden()
}

if (!dom.isToast() && !globalState.previousActiveElement) {
Expand Down Expand Up @@ -56,12 +59,11 @@ const setScrollingVisibility = (container, popup) => {
}
}

const fixScrollContainer = (container, scrollbarPadding) => {
const fixScrollContainer = (container, scrollbarPadding, initialBodyOverflow) => {
iOSfix()
IEfix()
setAriaHidden()

if (scrollbarPadding) {
if (scrollbarPadding && initialBodyOverflow !== 'hidden') {
fixScrollbar()
}

Expand Down
26 changes: 21 additions & 5 deletions test/qunit/tests.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const { $, Swal, SwalWithoutAnimation, triggerKeydownEvent, isVisible, isHidden, TIMEOUT } = require('./helpers')
const { $, Swal, SwalWithoutAnimation, triggerKeydownEvent, isVisible, isHidden, ensureClosed, TIMEOUT } = require('./helpers')
const { toArray } = require('../../src/utils/utils')
const { measureScrollbar } = require('../../src/utils/dom/measureScrollbar')
const sinon = require('sinon/pkg/sinon')
Expand Down Expand Up @@ -86,6 +86,7 @@ QUnit.test('should show the popup with OK button in case of empty object passed

QUnit.test('the vertical scrollbar should be hidden and the according padding-right should be set', (assert) => {
const done = assert.async()
ensureClosed()
const talltDiv = document.createElement('div')
talltDiv.innerHTML = Array(100).join('<div>lorem ipsum</div>')
document.body.appendChild(talltDiv)
Expand All @@ -101,11 +102,11 @@ QUnit.test('the vertical scrollbar should be hidden and the according padding-ri
done()
}
})
const bodyStyles = window.getComputedStyle(document.body)

const bodyStyles = window.getComputedStyle(document.body)
assert.equal(bodyStyles.paddingRight, `${scrollbarWidth + 30}px`)
assert.equal(bodyStyles.overflow, 'hidden')
Swal.clickConfirm()
Swal.close()
})

QUnit.test('scrollbarPadding disabled', (assert) => {
Expand All @@ -124,7 +125,7 @@ QUnit.test('scrollbarPadding disabled', (assert) => {

const bodyStyles = window.getComputedStyle(document.body)
assert.equal(bodyStyles.paddingRight, '30px')
Swal.clickConfirm()
Swal.close()
})

QUnit.test('the vertical scrollbar should be restored before a toast is fired after a modal', (assert) => {
Expand All @@ -149,7 +150,22 @@ QUnit.test('the vertical scrollbar should be restored before a toast is fired af
})

const bodyStyles = window.getComputedStyle(document.body)
Swal.clickConfirm()
Swal.close()
})

QUnit.test('should not add body padding if body has overflow-y: hidden', (assert) => {
const talltDiv = document.createElement('div')
talltDiv.innerHTML = Array(100).join('<div>lorem ipsum</div>')
document.body.appendChild(talltDiv)
document.body.style.paddingRight = '0px'
document.body.style.overflowY = 'hidden'

SwalWithoutAnimation.fire()

const bodyStyles = window.getComputedStyle(document.body)
assert.equal(bodyStyles.paddingRight, '0px')
document.body.removeChild(talltDiv)
Swal.close()
})

QUnit.test('modal width', (assert) => {
Expand Down

0 comments on commit bc90d3c

Please sign in to comment.