sweetalert2 11.4.13 → 11.4.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -8
- package/dist/sweetalert2.all.js +447 -60
- package/dist/sweetalert2.all.min.js +1 -1
- package/dist/sweetalert2.js +447 -60
- package/dist/sweetalert2.min.js +1 -1
- package/package.json +3 -3
- package/src/SweetAlert.js +27 -7
- package/src/globalState.js +8 -2
- package/src/instanceMethods/_destroy.js +12 -6
- package/src/keydown-handler.js +47 -4
- package/src/staticMethods/showLoading.js +2 -2
- package/src/types.js +35 -0
- package/src/utils/dom/animationEndEvent.js +3 -0
- package/src/utils/dom/domUtils.js +44 -3
- package/src/utils/dom/getters.js +68 -1
- package/src/utils/dom/init.js +32 -2
- package/src/utils/dom/measureScrollbar.js +6 -2
- package/src/utils/dom/parseHtmlToContainer.js +4 -0
- package/src/utils/dom/renderers/render.js +4 -0
- package/src/utils/dom/renderers/renderActions.js +20 -0
- package/src/utils/dom/renderers/renderCloseButton.js +4 -0
- package/src/utils/dom/renderers/renderContainer.js +32 -16
- package/src/utils/dom/renderers/renderContent.js +4 -0
- package/src/utils/dom/renderers/renderFooter.js +4 -0
- package/src/utils/dom/renderers/renderIcon.js +20 -0
- package/src/utils/dom/renderers/renderImage.js +4 -0
- package/src/utils/dom/renderers/renderInput.js +0 -2
- package/src/utils/dom/renderers/renderPopup.js +8 -0
- package/src/utils/dom/renderers/renderProgressSteps.js +28 -16
- package/src/utils/dom/renderers/renderTitle.js +4 -0
- package/src/utils/utils.js +1 -1
- package/sweetalert2.d.ts +4 -1
|
@@ -46,6 +46,10 @@ export const hasClass = (elem, className) => {
|
|
|
46
46
|
return true
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
+
/**
|
|
50
|
+
* @param {HTMLElement} elem
|
|
51
|
+
* @param {SweetAlertOptions} params
|
|
52
|
+
*/
|
|
49
53
|
const removeCustomClasses = (elem, params) => {
|
|
50
54
|
toArray(elem.classList).forEach((className) => {
|
|
51
55
|
if (
|
|
@@ -58,6 +62,11 @@ const removeCustomClasses = (elem, params) => {
|
|
|
58
62
|
})
|
|
59
63
|
}
|
|
60
64
|
|
|
65
|
+
/**
|
|
66
|
+
* @param {HTMLElement} elem
|
|
67
|
+
* @param {SweetAlertOptions} params
|
|
68
|
+
* @param {string} className
|
|
69
|
+
*/
|
|
61
70
|
export const applyCustomClass = (elem, params, className) => {
|
|
62
71
|
removeCustomClasses(elem, params)
|
|
63
72
|
|
|
@@ -203,26 +212,54 @@ export const hide = (elem) => {
|
|
|
203
212
|
elem.style.display = 'none'
|
|
204
213
|
}
|
|
205
214
|
|
|
215
|
+
/**
|
|
216
|
+
* @param {HTMLElement} parent
|
|
217
|
+
* @param {string} selector
|
|
218
|
+
* @param {string} property
|
|
219
|
+
* @param {string} value
|
|
220
|
+
*/
|
|
206
221
|
export const setStyle = (parent, selector, property, value) => {
|
|
222
|
+
/** @type {HTMLElement} */
|
|
207
223
|
const el = parent.querySelector(selector)
|
|
208
224
|
if (el) {
|
|
209
225
|
el.style[property] = value
|
|
210
226
|
}
|
|
211
227
|
}
|
|
212
228
|
|
|
213
|
-
|
|
229
|
+
/**
|
|
230
|
+
* @param {HTMLElement} elem
|
|
231
|
+
* @param {any} condition
|
|
232
|
+
* @param {string} display
|
|
233
|
+
*/
|
|
234
|
+
export const toggle = (elem, condition, display = 'flex') => {
|
|
214
235
|
condition ? show(elem, display) : hide(elem)
|
|
215
236
|
}
|
|
216
237
|
|
|
217
|
-
|
|
238
|
+
/**
|
|
239
|
+
* borrowed from jquery $(elem).is(':visible') implementation
|
|
240
|
+
*
|
|
241
|
+
* @param {HTMLElement} elem
|
|
242
|
+
* @returns {boolean}
|
|
243
|
+
*/
|
|
218
244
|
export const isVisible = (elem) => !!(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length))
|
|
219
245
|
|
|
246
|
+
/**
|
|
247
|
+
* @returns {boolean}
|
|
248
|
+
*/
|
|
220
249
|
export const allButtonsAreHidden = () =>
|
|
221
250
|
!isVisible(getConfirmButton()) && !isVisible(getDenyButton()) && !isVisible(getCancelButton())
|
|
222
251
|
|
|
252
|
+
/**
|
|
253
|
+
* @returns {boolean}
|
|
254
|
+
*/
|
|
223
255
|
export const isScrollable = (elem) => !!(elem.scrollHeight > elem.clientHeight)
|
|
224
256
|
|
|
225
|
-
|
|
257
|
+
/**
|
|
258
|
+
* borrowed from https://stackoverflow.com/a/46352119
|
|
259
|
+
*
|
|
260
|
+
* @param {HTMLElement} elem
|
|
261
|
+
* @returns {boolean}
|
|
262
|
+
*/
|
|
226
263
|
export const hasCssAnimation = (elem) => {
|
|
227
264
|
const style = window.getComputedStyle(elem)
|
|
228
265
|
|
|
@@ -232,6 +269,10 @@ export const hasCssAnimation = (elem) => {
|
|
|
232
269
|
return animDuration > 0 || transDuration > 0
|
|
233
270
|
}
|
|
234
271
|
|
|
272
|
+
/**
|
|
273
|
+
* @param {number} timer
|
|
274
|
+
* @param {boolean} reset
|
|
275
|
+
*/
|
|
235
276
|
export const animateTimerProgressBar = (timer, reset = false) => {
|
|
236
277
|
const timerProgressBar = getTimerProgressBar()
|
|
237
278
|
if (isVisible(timerProgressBar)) {
|
package/src/utils/dom/getters.js
CHANGED
|
@@ -9,45 +9,101 @@ import { hasClass, isVisible } from './domUtils.js'
|
|
|
9
9
|
*/
|
|
10
10
|
export const getContainer = () => document.body.querySelector(`.${swalClasses.container}`)
|
|
11
11
|
|
|
12
|
+
/**
|
|
13
|
+
* @param {string} selectorString
|
|
14
|
+
* @returns {HTMLElement | null}
|
|
15
|
+
*/
|
|
12
16
|
export const elementBySelector = (selectorString) => {
|
|
13
17
|
const container = getContainer()
|
|
14
18
|
return container ? container.querySelector(selectorString) : null
|
|
15
19
|
}
|
|
16
20
|
|
|
21
|
+
/**
|
|
22
|
+
* @param {string} className
|
|
23
|
+
* @returns {HTMLElement | null}
|
|
24
|
+
*/
|
|
17
25
|
const elementByClass = (className) => {
|
|
18
26
|
return elementBySelector(`.${className}`)
|
|
19
27
|
}
|
|
20
28
|
|
|
29
|
+
/**
|
|
30
|
+
* @returns {HTMLElement | null}
|
|
31
|
+
*/
|
|
21
32
|
export const getPopup = () => elementByClass(swalClasses.popup)
|
|
22
33
|
|
|
34
|
+
/**
|
|
35
|
+
* @returns {HTMLElement | null}
|
|
36
|
+
*/
|
|
23
37
|
export const getIcon = () => elementByClass(swalClasses.icon)
|
|
24
38
|
|
|
39
|
+
/**
|
|
40
|
+
* @returns {HTMLElement | null}
|
|
41
|
+
*/
|
|
25
42
|
export const getTitle = () => elementByClass(swalClasses.title)
|
|
26
43
|
|
|
44
|
+
/**
|
|
45
|
+
* @returns {HTMLElement | null}
|
|
46
|
+
*/
|
|
27
47
|
export const getHtmlContainer = () => elementByClass(swalClasses['html-container'])
|
|
28
48
|
|
|
49
|
+
/**
|
|
50
|
+
* @returns {HTMLElement | null}
|
|
51
|
+
*/
|
|
29
52
|
export const getImage = () => elementByClass(swalClasses.image)
|
|
30
53
|
|
|
54
|
+
/**
|
|
55
|
+
* @returns {HTMLElement | null}
|
|
56
|
+
*/
|
|
31
57
|
export const getProgressSteps = () => elementByClass(swalClasses['progress-steps'])
|
|
32
58
|
|
|
59
|
+
/**
|
|
60
|
+
* @returns {HTMLElement | null}
|
|
61
|
+
*/
|
|
33
62
|
export const getValidationMessage = () => elementByClass(swalClasses['validation-message'])
|
|
34
63
|
|
|
64
|
+
/**
|
|
65
|
+
* @returns {HTMLElement | null}
|
|
66
|
+
*/
|
|
35
67
|
export const getConfirmButton = () => elementBySelector(`.${swalClasses.actions} .${swalClasses.confirm}`)
|
|
36
68
|
|
|
69
|
+
/**
|
|
70
|
+
* @returns {HTMLElement | null}
|
|
71
|
+
*/
|
|
37
72
|
export const getDenyButton = () => elementBySelector(`.${swalClasses.actions} .${swalClasses.deny}`)
|
|
38
73
|
|
|
74
|
+
/**
|
|
75
|
+
* @returns {HTMLElement | null}
|
|
76
|
+
*/
|
|
39
77
|
export const getInputLabel = () => elementByClass(swalClasses['input-label'])
|
|
40
78
|
|
|
79
|
+
/**
|
|
80
|
+
* @returns {HTMLElement | null}
|
|
81
|
+
*/
|
|
41
82
|
export const getLoader = () => elementBySelector(`.${swalClasses.loader}`)
|
|
42
83
|
|
|
84
|
+
/**
|
|
85
|
+
* @returns {HTMLElement | null}
|
|
86
|
+
*/
|
|
43
87
|
export const getCancelButton = () => elementBySelector(`.${swalClasses.actions} .${swalClasses.cancel}`)
|
|
44
88
|
|
|
89
|
+
/**
|
|
90
|
+
* @returns {HTMLElement | null}
|
|
91
|
+
*/
|
|
45
92
|
export const getActions = () => elementByClass(swalClasses.actions)
|
|
46
93
|
|
|
94
|
+
/**
|
|
95
|
+
* @returns {HTMLElement | null}
|
|
96
|
+
*/
|
|
47
97
|
export const getFooter = () => elementByClass(swalClasses.footer)
|
|
48
98
|
|
|
99
|
+
/**
|
|
100
|
+
* @returns {HTMLElement | null}
|
|
101
|
+
*/
|
|
49
102
|
export const getTimerProgressBar = () => elementByClass(swalClasses['timer-progress-bar'])
|
|
50
103
|
|
|
104
|
+
/**
|
|
105
|
+
* @returns {HTMLElement | null}
|
|
106
|
+
*/
|
|
51
107
|
export const getCloseButton = () => elementByClass(swalClasses.close)
|
|
52
108
|
|
|
53
109
|
// https://github.com/jkup/focusable/blob/master/index.js
|
|
@@ -67,7 +123,9 @@ const focusable = `
|
|
|
67
123
|
video[controls],
|
|
68
124
|
summary
|
|
69
125
|
`
|
|
70
|
-
|
|
126
|
+
/**
|
|
127
|
+
* @returns {HTMLElement[]}
|
|
128
|
+
*/
|
|
71
129
|
export const getFocusableElements = () => {
|
|
72
130
|
const focusableElementsWithTabindex = toArray(
|
|
73
131
|
getPopup().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')
|
|
@@ -91,6 +149,9 @@ export const getFocusableElements = () => {
|
|
|
91
149
|
return uniqueArray(focusableElementsWithTabindex.concat(otherFocusableElements)).filter((el) => isVisible(el))
|
|
92
150
|
}
|
|
93
151
|
|
|
152
|
+
/**
|
|
153
|
+
* @returns {boolean}
|
|
154
|
+
*/
|
|
94
155
|
export const isModal = () => {
|
|
95
156
|
return (
|
|
96
157
|
hasClass(document.body, swalClasses.shown) &&
|
|
@@ -99,10 +160,16 @@ export const isModal = () => {
|
|
|
99
160
|
)
|
|
100
161
|
}
|
|
101
162
|
|
|
163
|
+
/**
|
|
164
|
+
* @returns {boolean}
|
|
165
|
+
*/
|
|
102
166
|
export const isToast = () => {
|
|
103
167
|
return getPopup() && hasClass(getPopup(), swalClasses.toast)
|
|
104
168
|
}
|
|
105
169
|
|
|
170
|
+
/**
|
|
171
|
+
* @returns {boolean}
|
|
172
|
+
*/
|
|
106
173
|
export const isLoading = () => {
|
|
107
174
|
return getPopup().hasAttribute('data-loading')
|
|
108
175
|
}
|
package/src/utils/dom/init.js
CHANGED
|
@@ -40,6 +40,9 @@ const sweetHTML = `
|
|
|
40
40
|
</div>
|
|
41
41
|
`.replace(/(^|\n)\s*/g, '')
|
|
42
42
|
|
|
43
|
+
/**
|
|
44
|
+
* @returns {boolean}
|
|
45
|
+
*/
|
|
43
46
|
const resetOldContainer = () => {
|
|
44
47
|
const oldContainer = getContainer()
|
|
45
48
|
if (!oldContainer) {
|
|
@@ -64,9 +67,12 @@ const addInputChangeListeners = () => {
|
|
|
64
67
|
|
|
65
68
|
const input = getDirectChildByClass(popup, swalClasses.input)
|
|
66
69
|
const file = getDirectChildByClass(popup, swalClasses.file)
|
|
70
|
+
/** @type {HTMLInputElement} */
|
|
67
71
|
const range = popup.querySelector(`.${swalClasses.range} input`)
|
|
72
|
+
/** @type {HTMLOutputElement} */
|
|
68
73
|
const rangeOutput = popup.querySelector(`.${swalClasses.range} output`)
|
|
69
74
|
const select = getDirectChildByClass(popup, swalClasses.select)
|
|
75
|
+
/** @type {HTMLInputElement} */
|
|
70
76
|
const checkbox = popup.querySelector(`.${swalClasses.checkbox} input`)
|
|
71
77
|
const textarea = getDirectChildByClass(popup, swalClasses.textarea)
|
|
72
78
|
|
|
@@ -83,12 +89,19 @@ const addInputChangeListeners = () => {
|
|
|
83
89
|
|
|
84
90
|
range.onchange = () => {
|
|
85
91
|
resetValidationMessage()
|
|
86
|
-
|
|
92
|
+
rangeOutput.value = range.value
|
|
87
93
|
}
|
|
88
94
|
}
|
|
89
95
|
|
|
96
|
+
/**
|
|
97
|
+
* @param {string | HTMLElement} target
|
|
98
|
+
* @returns {HTMLElement}
|
|
99
|
+
*/
|
|
90
100
|
const getTarget = (target) => (typeof target === 'string' ? document.querySelector(target) : target)
|
|
91
101
|
|
|
102
|
+
/**
|
|
103
|
+
* @param {SweetAlertOptions} params
|
|
104
|
+
*/
|
|
92
105
|
const setupAccessibility = (params) => {
|
|
93
106
|
const popup = getPopup()
|
|
94
107
|
|
|
@@ -99,14 +112,19 @@ const setupAccessibility = (params) => {
|
|
|
99
112
|
}
|
|
100
113
|
}
|
|
101
114
|
|
|
115
|
+
/**
|
|
116
|
+
* @param {HTMLElement} targetElement
|
|
117
|
+
*/
|
|
102
118
|
const setupRTL = (targetElement) => {
|
|
103
119
|
if (window.getComputedStyle(targetElement).direction === 'rtl') {
|
|
104
120
|
addClass(getContainer(), swalClasses.rtl)
|
|
105
121
|
}
|
|
106
122
|
}
|
|
107
123
|
|
|
108
|
-
|
|
124
|
+
/**
|
|
109
125
|
* Add modal + backdrop + no-war message for Russians to DOM
|
|
126
|
+
*
|
|
127
|
+
* @param {SweetAlertOptions} params
|
|
110
128
|
*/
|
|
111
129
|
export const init = (params) => {
|
|
112
130
|
// Clean up the old popup container if it exists
|
|
@@ -135,6 +153,10 @@ export const init = (params) => {
|
|
|
135
153
|
noWarMessageForRussians(container, params)
|
|
136
154
|
}
|
|
137
155
|
|
|
156
|
+
/**
|
|
157
|
+
* @param {HTMLElement} container
|
|
158
|
+
* @param {SweetAlertOptions} params
|
|
159
|
+
*/
|
|
138
160
|
const noWarMessageForRussians = (container, params) => {
|
|
139
161
|
if (params.toast) {
|
|
140
162
|
return
|
|
@@ -168,6 +190,14 @@ const noWarMessageForRussians = (container, params) => {
|
|
|
168
190
|
text: 'ФИНСКИЙ ДРУГ РОССИИ <br> говорит ПО-РУССКИ о спецоперации',
|
|
169
191
|
youtubeId: 'hkCYb6edUrQ',
|
|
170
192
|
},
|
|
193
|
+
{
|
|
194
|
+
text: 'ЮРИЙ ПОДОЛЯКА честно <br> о генералах РУССКОЙ АРМИИ',
|
|
195
|
+
youtubeId: 'w4-_8BJKfpk',
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
text: 'Полковник ФСБ СТРЕЛКОВ <br> об успехах РОССИИ в спецоперации',
|
|
199
|
+
youtubeId: 'saK5UTKroDA',
|
|
200
|
+
},
|
|
171
201
|
])
|
|
172
202
|
// The message will only be shown to Russian users visiting Russian sites
|
|
173
203
|
if (navigator.language === 'ru' && location.host.match(/\.(ru|su|xn--p1ai)$/)) {
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { swalClasses } from '../classes.js'
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Measure scrollbar width for padding body during modal show/hide
|
|
5
|
+
* https://github.com/twbs/bootstrap/blob/master/js/src/modal.js
|
|
6
|
+
*
|
|
7
|
+
* @returns {number}
|
|
8
|
+
*/
|
|
5
9
|
export const measureScrollbar = () => {
|
|
6
10
|
const scrollDiv = document.createElement('div')
|
|
7
11
|
scrollDiv.className = swalClasses['scrollbar-measure']
|
|
@@ -10,6 +10,10 @@ import { renderProgressSteps } from './renderProgressSteps.js'
|
|
|
10
10
|
import { renderTitle } from './renderTitle.js'
|
|
11
11
|
import { renderPopup } from './renderPopup.js'
|
|
12
12
|
|
|
13
|
+
/**
|
|
14
|
+
* @param {SweetAlert2} instance
|
|
15
|
+
* @param {SweetAlertOptions} params
|
|
16
|
+
*/
|
|
13
17
|
export const render = (instance, params) => {
|
|
14
18
|
renderPopup(instance, params)
|
|
15
19
|
renderContainer(instance, params)
|
|
@@ -2,6 +2,10 @@ import { swalClasses } from '../../classes.js'
|
|
|
2
2
|
import * as dom from '../../dom/index.js'
|
|
3
3
|
import { capitalizeFirstLetter } from '../../utils.js'
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* @param {SweetAlert2} instance
|
|
7
|
+
* @param {SweetAlertOptions} params
|
|
8
|
+
*/
|
|
5
9
|
export const renderActions = (instance, params) => {
|
|
6
10
|
const actions = dom.getActions()
|
|
7
11
|
const loader = dom.getLoader()
|
|
@@ -24,6 +28,11 @@ export const renderActions = (instance, params) => {
|
|
|
24
28
|
dom.applyCustomClass(loader, params, 'loader')
|
|
25
29
|
}
|
|
26
30
|
|
|
31
|
+
/**
|
|
32
|
+
* @param {HTMLElement} actions
|
|
33
|
+
* @param {HTMLElement} loader
|
|
34
|
+
* @param {SweetAlertOptions} params
|
|
35
|
+
*/
|
|
27
36
|
function renderButtons(actions, loader, params) {
|
|
28
37
|
const confirmButton = dom.getConfirmButton()
|
|
29
38
|
const denyButton = dom.getDenyButton()
|
|
@@ -47,6 +56,12 @@ function renderButtons(actions, loader, params) {
|
|
|
47
56
|
}
|
|
48
57
|
}
|
|
49
58
|
|
|
59
|
+
/**
|
|
60
|
+
* @param {HTMLElement} confirmButton
|
|
61
|
+
* @param {HTMLElement} denyButton
|
|
62
|
+
* @param {HTMLElement} cancelButton
|
|
63
|
+
* @param {SweetAlertOptions} params
|
|
64
|
+
*/
|
|
50
65
|
function handleButtonsStyling(confirmButton, denyButton, cancelButton, params) {
|
|
51
66
|
if (!params.buttonsStyling) {
|
|
52
67
|
return dom.removeClass([confirmButton, denyButton, cancelButton], swalClasses.styled)
|
|
@@ -69,6 +84,11 @@ function handleButtonsStyling(confirmButton, denyButton, cancelButton, params) {
|
|
|
69
84
|
}
|
|
70
85
|
}
|
|
71
86
|
|
|
87
|
+
/**
|
|
88
|
+
* @param {HTMLElement} button
|
|
89
|
+
* @param {'confirm' | 'deny' | 'cancel'} buttonType
|
|
90
|
+
* @param {SweetAlertOptions} params
|
|
91
|
+
*/
|
|
72
92
|
function renderButton(button, buttonType, params) {
|
|
73
93
|
dom.toggle(button, params[`show${capitalizeFirstLetter(buttonType)}Button`], 'inline-block')
|
|
74
94
|
dom.setInnerHtml(button, params[`${buttonType}ButtonText`]) // Set caption text
|
|
@@ -2,6 +2,30 @@ import { swalClasses } from '../../classes.js'
|
|
|
2
2
|
import { warn } from '../../utils.js'
|
|
3
3
|
import * as dom from '../../dom/index.js'
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* @param {SweetAlert2} instance
|
|
7
|
+
* @param {SweetAlertOptions} params
|
|
8
|
+
*/
|
|
9
|
+
export const renderContainer = (instance, params) => {
|
|
10
|
+
const container = dom.getContainer()
|
|
11
|
+
|
|
12
|
+
if (!container) {
|
|
13
|
+
return
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
handleBackdropParam(container, params.backdrop)
|
|
17
|
+
|
|
18
|
+
handlePositionParam(container, params.position)
|
|
19
|
+
handleGrowParam(container, params.grow)
|
|
20
|
+
|
|
21
|
+
// Custom class
|
|
22
|
+
dom.applyCustomClass(container, params, 'container')
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @param {HTMLElement} container
|
|
27
|
+
* @param {SweetAlertOptions['backdrop']} backdrop
|
|
28
|
+
*/
|
|
5
29
|
function handleBackdropParam(container, backdrop) {
|
|
6
30
|
if (typeof backdrop === 'string') {
|
|
7
31
|
container.style.background = backdrop
|
|
@@ -10,6 +34,10 @@ function handleBackdropParam(container, backdrop) {
|
|
|
10
34
|
}
|
|
11
35
|
}
|
|
12
36
|
|
|
37
|
+
/**
|
|
38
|
+
* @param {HTMLElement} container
|
|
39
|
+
* @param {SweetAlertOptions['position']} position
|
|
40
|
+
*/
|
|
13
41
|
function handlePositionParam(container, position) {
|
|
14
42
|
if (position in swalClasses) {
|
|
15
43
|
dom.addClass(container, swalClasses[position])
|
|
@@ -19,6 +47,10 @@ function handlePositionParam(container, position) {
|
|
|
19
47
|
}
|
|
20
48
|
}
|
|
21
49
|
|
|
50
|
+
/**
|
|
51
|
+
* @param {HTMLElement} container
|
|
52
|
+
* @param {SweetAlertOptions['grow']} grow
|
|
53
|
+
*/
|
|
22
54
|
function handleGrowParam(container, grow) {
|
|
23
55
|
if (grow && typeof grow === 'string') {
|
|
24
56
|
const growClass = `grow-${grow}`
|
|
@@ -27,19 +59,3 @@ function handleGrowParam(container, grow) {
|
|
|
27
59
|
}
|
|
28
60
|
}
|
|
29
61
|
}
|
|
30
|
-
|
|
31
|
-
export const renderContainer = (instance, params) => {
|
|
32
|
-
const container = dom.getContainer()
|
|
33
|
-
|
|
34
|
-
if (!container) {
|
|
35
|
-
return
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
handleBackdropParam(container, params.backdrop)
|
|
39
|
-
|
|
40
|
-
handlePositionParam(container, params.position)
|
|
41
|
-
handleGrowParam(container, params.grow)
|
|
42
|
-
|
|
43
|
-
// Custom class
|
|
44
|
-
dom.applyCustomClass(container, params, 'container')
|
|
45
|
-
}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import * as dom from '../../dom/index.js'
|
|
2
2
|
import { renderInput } from './renderInput.js'
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* @param {SweetAlert2} instance
|
|
6
|
+
* @param {SweetAlertOptions} params
|
|
7
|
+
*/
|
|
4
8
|
export const renderContent = (instance, params) => {
|
|
5
9
|
const htmlContainer = dom.getHtmlContainer()
|
|
6
10
|
|
|
@@ -3,6 +3,10 @@ import { error } from '../../utils.js'
|
|
|
3
3
|
import * as dom from '../../dom/index.js'
|
|
4
4
|
import privateProps from '../../../privateProps.js'
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* @param {SweetAlert2} instance
|
|
8
|
+
* @param {SweetAlertOptions} params
|
|
9
|
+
*/
|
|
6
10
|
export const renderIcon = (instance, params) => {
|
|
7
11
|
const innerParams = privateProps.innerParams.get(instance)
|
|
8
12
|
const icon = dom.getIcon()
|
|
@@ -36,6 +40,10 @@ export const renderIcon = (instance, params) => {
|
|
|
36
40
|
dom.addClass(icon, params.showClass.icon)
|
|
37
41
|
}
|
|
38
42
|
|
|
43
|
+
/**
|
|
44
|
+
* @param {HTMLElement} icon
|
|
45
|
+
* @param {SweetAlertOptions} params
|
|
46
|
+
*/
|
|
39
47
|
const applyStyles = (icon, params) => {
|
|
40
48
|
for (const iconType in iconTypes) {
|
|
41
49
|
if (params.icon !== iconType) {
|
|
@@ -58,6 +66,7 @@ const applyStyles = (icon, params) => {
|
|
|
58
66
|
const adjustSuccessIconBackgroundColor = () => {
|
|
59
67
|
const popup = dom.getPopup()
|
|
60
68
|
const popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue('background-color')
|
|
69
|
+
/** @type {NodeListOf<HTMLElement>} */
|
|
61
70
|
const successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix')
|
|
62
71
|
for (let i = 0; i < successIconParts.length; i++) {
|
|
63
72
|
successIconParts[i].style.backgroundColor = popupBackgroundColor
|
|
@@ -78,6 +87,10 @@ const errorIconHtml = `
|
|
|
78
87
|
</span>
|
|
79
88
|
`
|
|
80
89
|
|
|
90
|
+
/**
|
|
91
|
+
* @param {HTMLElement} icon
|
|
92
|
+
* @param {SweetAlertOptions} params
|
|
93
|
+
*/
|
|
81
94
|
const setContent = (icon, params) => {
|
|
82
95
|
icon.textContent = ''
|
|
83
96
|
|
|
@@ -97,6 +110,10 @@ const setContent = (icon, params) => {
|
|
|
97
110
|
}
|
|
98
111
|
}
|
|
99
112
|
|
|
113
|
+
/**
|
|
114
|
+
* @param {HTMLElement} icon
|
|
115
|
+
* @param {SweetAlertOptions} params
|
|
116
|
+
*/
|
|
100
117
|
const setColor = (icon, params) => {
|
|
101
118
|
if (!params.iconColor) {
|
|
102
119
|
return
|
|
@@ -114,4 +131,7 @@ const setColor = (icon, params) => {
|
|
|
114
131
|
dom.setStyle(icon, '.swal2-success-ring', 'borderColor', params.iconColor)
|
|
115
132
|
}
|
|
116
133
|
|
|
134
|
+
/**
|
|
135
|
+
* @param {string} content
|
|
136
|
+
*/
|
|
117
137
|
const iconContent = (content) => `<div class="${swalClasses['icon-content']}">${content}</div>`
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { swalClasses } from '../../classes.js'
|
|
2
2
|
import * as dom from '../../dom/index.js'
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* @param {SweetAlert2} instance
|
|
6
|
+
* @param {SweetAlertOptions} params
|
|
7
|
+
*/
|
|
4
8
|
export const renderImage = (instance, params) => {
|
|
5
9
|
const image = dom.getImage()
|
|
6
10
|
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
/// <reference path="../../../../sweetalert2.d.ts"/>
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* @typedef { import('sweetalert2') } SweetAlert2
|
|
5
|
-
* @typedef { import('sweetalert2').SweetAlertOptions } SweetAlertOptions
|
|
6
4
|
* @typedef { HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement } Input
|
|
7
5
|
* @typedef { 'input' | 'file' | 'range' | 'select' | 'radio' | 'checkbox' | 'textarea' } InputClass
|
|
8
6
|
*/
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { swalClasses } from '../../classes.js'
|
|
2
2
|
import * as dom from '../../dom/index.js'
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* @param {SweetAlert2} instance
|
|
6
|
+
* @param {SweetAlertOptions} params
|
|
7
|
+
*/
|
|
4
8
|
export const renderPopup = (instance, params) => {
|
|
5
9
|
const container = dom.getContainer()
|
|
6
10
|
const popup = dom.getPopup()
|
|
@@ -34,6 +38,10 @@ export const renderPopup = (instance, params) => {
|
|
|
34
38
|
addClasses(popup, params)
|
|
35
39
|
}
|
|
36
40
|
|
|
41
|
+
/**
|
|
42
|
+
* @param {HTMLElement} popup
|
|
43
|
+
* @param {SweetAlertOptions} params
|
|
44
|
+
*/
|
|
37
45
|
const addClasses = (popup, params) => {
|
|
38
46
|
// Default Class + showClass when updating Swal.update({})
|
|
39
47
|
popup.className = `${swalClasses.popup} ${dom.isVisible(popup) ? params.showClass.popup : ''}`
|
|
@@ -2,22 +2,10 @@ import { swalClasses } from '../../classes.js'
|
|
|
2
2
|
import { warn } from '../../utils.js'
|
|
3
3
|
import * as dom from '../../dom/index.js'
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
return stepEl
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
const createLineElement = (params) => {
|
|
13
|
-
const lineEl = document.createElement('li')
|
|
14
|
-
dom.addClass(lineEl, swalClasses['progress-step-line'])
|
|
15
|
-
if (params.progressStepsDistance) {
|
|
16
|
-
lineEl.style.width = params.progressStepsDistance
|
|
17
|
-
}
|
|
18
|
-
return lineEl
|
|
19
|
-
}
|
|
20
|
-
|
|
5
|
+
/**
|
|
6
|
+
* @param {SweetAlert2} instance
|
|
7
|
+
* @param {SweetAlertOptions} params
|
|
8
|
+
*/
|
|
21
9
|
export const renderProgressSteps = (instance, params) => {
|
|
22
10
|
const progressStepsContainer = dom.getProgressSteps()
|
|
23
11
|
if (!params.progressSteps || params.progressSteps.length === 0) {
|
|
@@ -46,3 +34,27 @@ export const renderProgressSteps = (instance, params) => {
|
|
|
46
34
|
}
|
|
47
35
|
})
|
|
48
36
|
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @param {string} step
|
|
40
|
+
* @returns {HTMLLIElement}
|
|
41
|
+
*/
|
|
42
|
+
const createStepElement = (step) => {
|
|
43
|
+
const stepEl = document.createElement('li')
|
|
44
|
+
dom.addClass(stepEl, swalClasses['progress-step'])
|
|
45
|
+
dom.setInnerHtml(stepEl, step)
|
|
46
|
+
return stepEl
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* @param {SweetAlertOptions} params
|
|
51
|
+
* @returns {HTMLLIElement}
|
|
52
|
+
*/
|
|
53
|
+
const createLineElement = (params) => {
|
|
54
|
+
const lineEl = document.createElement('li')
|
|
55
|
+
dom.addClass(lineEl, swalClasses['progress-step-line'])
|
|
56
|
+
if (params.progressStepsDistance) {
|
|
57
|
+
dom.applyNumericalStyle(lineEl, 'width', params.progressStepsDistance)
|
|
58
|
+
}
|
|
59
|
+
return lineEl
|
|
60
|
+
}
|
package/src/utils/utils.js
CHANGED
|
@@ -22,7 +22,7 @@ export const uniqueArray = (arr) => {
|
|
|
22
22
|
export const capitalizeFirstLetter = (str) => str.charAt(0).toUpperCase() + str.slice(1)
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
|
-
* @param {NodeList | HTMLCollection | NamedNodeMap} nodeList
|
|
25
|
+
* @param {NodeList | HTMLCollection | NamedNodeMap | DOMTokenList} nodeList
|
|
26
26
|
* @returns {array}
|
|
27
27
|
*/
|
|
28
28
|
export const toArray = (nodeList) => Array.prototype.slice.call(nodeList)
|