webcimes-modal 1.0.1
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/.eslintrc.json +15 -0
- package/LICENSE.md +21 -0
- package/README.md +247 -0
- package/demo.html +102 -0
- package/demo_test.html +0 -0
- package/images/times.svg +1 -0
- package/package.json +28 -0
- package/tsconfig.json +13 -0
- package/webcimes-modal.css +415 -0
- package/webcimes-modal.js +353 -0
- package/webcimes-modal.js.map +1 -0
- package/webcimes-modal.ts +502 -0
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2023 WebCimes - RICHARD Florian (https://webcimes.com)
|
|
3
|
+
* MIT License - https://choosealicense.com/licenses/mit/
|
|
4
|
+
* Date: 2023-03-25
|
|
5
|
+
*/
|
|
6
|
+
"use strict";
|
|
7
|
+
/**
|
|
8
|
+
* Class WebcimesModal
|
|
9
|
+
*/
|
|
10
|
+
export class WebcimesModal {
|
|
11
|
+
/**
|
|
12
|
+
* Create modal
|
|
13
|
+
* @param {Object} options
|
|
14
|
+
* @param {string | null} options.setId - set a specific id on the modal. default "null"
|
|
15
|
+
* @param {string | null} options.setClass - set a specific class on the modal, default "null"
|
|
16
|
+
* @param {string} options.width - width (specify unit), default "auto"
|
|
17
|
+
* @param {string} options.height - height (specify unit), default "auto"
|
|
18
|
+
* @param {string | null} options.titleHtml - html for title, default "null"
|
|
19
|
+
* @param {string | null} options.bodyHtml - html for body, default "null"
|
|
20
|
+
* @param {string | null} options.buttonCancelHtml - html for cancel button, default "null"
|
|
21
|
+
* @param {string | null} options.buttonConfirmHtml - html for confirm button, default "null"
|
|
22
|
+
* @param {boolean} options.closeOnCancelButton - close modal after trigger cancel button, default "true"
|
|
23
|
+
* @param {boolean} options.closeOnConfirmButton - close modal after trigger confirm button, default "true"
|
|
24
|
+
* @param {boolean} options.showCloseButton - show close button, default "true"
|
|
25
|
+
* @param {boolean} options.allowCloseOutside - allow the modal to close when clicked outside, default "true"
|
|
26
|
+
* @param {boolean} options.allowMovement - ability to move modal, default "true"
|
|
27
|
+
* @param {boolean} options.moveFromHeader - if allowMovement is set to "true", ability to move modal from header, default "true"
|
|
28
|
+
* @param {boolean} options.moveFromBody - if allowMovement is set to "true", ability to move modal from body, default "false"
|
|
29
|
+
* @param {boolean} options.moveFromFooter - if allowMovement is set to "true", ability to move modal from footer, default "true"
|
|
30
|
+
* @param {boolean} options.stickyHeader - keep header sticky (visible) when scrolling, default "true"
|
|
31
|
+
* @param {boolean} options.stickyFooter - keep footer sticky (visible) when scrolling, default "true"
|
|
32
|
+
* @param {string | null} options.style - add extra css style to modal, default null
|
|
33
|
+
* @param {"animDropDown" | "animFadeIn"} options.animationOnShow - "animDropDown" or "animFadeIn" for show animation, default "animDropDown"
|
|
34
|
+
* @param {"animDropUp" | "animFadeOut"} options.animationOnDestroy - "animDropUp" or "animFadeOut" for destroy animation, default "animDropUp"
|
|
35
|
+
* @param {number} options.animationDuration - animation duration in ms, default "500"
|
|
36
|
+
* @param {() => void} options.beforeShow - callback before show modal
|
|
37
|
+
* @param {() => void} options.afterShow - callback after show modal
|
|
38
|
+
* @param {() => void} options.beforeDestroy - callback before destroy modal
|
|
39
|
+
* @param {() => void} options.afterDestroy - callback after destroy modal
|
|
40
|
+
* @param {() => void} options.onCancelButton - callback after triggering cancel button
|
|
41
|
+
* @param {() => void} options.onConfirmButton - callback after triggering confirm button
|
|
42
|
+
*/
|
|
43
|
+
constructor(options) {
|
|
44
|
+
this.eventCancelButton = () => {
|
|
45
|
+
// Callback on cancel button
|
|
46
|
+
if (typeof this.options.onCancelButton === 'function') {
|
|
47
|
+
this.options.onCancelButton();
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
this.eventConfirmButton = () => {
|
|
51
|
+
// Callback on confirm button
|
|
52
|
+
if (typeof this.options.onConfirmButton === 'function') {
|
|
53
|
+
this.options.onConfirmButton();
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
this.eventClickOutside = (e) => {
|
|
57
|
+
if (e.target == this.webcimesModals) {
|
|
58
|
+
if (this.options.allowCloseOutside) {
|
|
59
|
+
// Destroy modal
|
|
60
|
+
this.destroy();
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
// Add animation for show modal who can't be close
|
|
64
|
+
this.modal.classList.add("animGrowShrink");
|
|
65
|
+
// Delete animation after the animation delay
|
|
66
|
+
setTimeout(() => {
|
|
67
|
+
this.modal.classList.remove("animGrowShrink");
|
|
68
|
+
}, this.options.animationDuration);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
this.eventClickCloseButton = () => {
|
|
73
|
+
// Destroy modal
|
|
74
|
+
this.destroy();
|
|
75
|
+
};
|
|
76
|
+
this.eventDragModalOnTop = (e) => {
|
|
77
|
+
// Only if target is not close button (for bug in chrome)
|
|
78
|
+
if (!e.target.closest(".close")) {
|
|
79
|
+
// If multiple modal, and modal not already on top (no next sibling), we place the current modal on the top
|
|
80
|
+
if (document.querySelectorAll(".modal").length > 1 && this.modal.nextElementSibling !== null) {
|
|
81
|
+
let oldScrollTop = this.modal.scrollTop;
|
|
82
|
+
this.webcimesModals.insertAdjacentElement("beforeend", this.modal);
|
|
83
|
+
this.modal.scrollTop = oldScrollTop;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
this.isDragging = false;
|
|
88
|
+
this.moveFromElements = [];
|
|
89
|
+
this.eventDragStart = (e) => {
|
|
90
|
+
// Start drag only if it's not a button
|
|
91
|
+
if (!e.target.closest("button")) {
|
|
92
|
+
this.isDragging = true;
|
|
93
|
+
// Mouse
|
|
94
|
+
if (e.clientX) {
|
|
95
|
+
this.offset = {
|
|
96
|
+
x: this.modal.offsetLeft - e.clientX,
|
|
97
|
+
y: this.modal.offsetTop - e.clientY
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
// Touch device (use the first touch only)
|
|
101
|
+
else if (e.touches) {
|
|
102
|
+
this.offset = {
|
|
103
|
+
x: this.modal.offsetLeft - e.touches[0].clientX,
|
|
104
|
+
y: this.modal.offsetTop - e.touches[0].clientY
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
this.eventMove = (e) => {
|
|
110
|
+
if (this.isDragging) {
|
|
111
|
+
// Mouse
|
|
112
|
+
if (e.clientX) {
|
|
113
|
+
this.position = {
|
|
114
|
+
x: e.clientX,
|
|
115
|
+
y: e.clientY
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
// Touch device (use the first touch only)
|
|
119
|
+
else if (e.touches) {
|
|
120
|
+
this.position = {
|
|
121
|
+
x: e.touches[0].clientX,
|
|
122
|
+
y: e.touches[0].clientY
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
this.modal.style.left = (this.position.x + this.offset.x) + 'px';
|
|
126
|
+
this.modal.style.top = (this.position.y + this.offset.y) + 'px';
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
this.eventDragStop = () => {
|
|
130
|
+
this.isDragging = false;
|
|
131
|
+
};
|
|
132
|
+
this.eventPreventSelectText = (e) => {
|
|
133
|
+
if (this.isDragging) {
|
|
134
|
+
e.preventDefault();
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
// Defaults
|
|
138
|
+
const defaults = {
|
|
139
|
+
setId: null,
|
|
140
|
+
setClass: null,
|
|
141
|
+
width: 'auto',
|
|
142
|
+
height: 'auto',
|
|
143
|
+
titleHtml: null,
|
|
144
|
+
bodyHtml: null,
|
|
145
|
+
buttonCancelHtml: null,
|
|
146
|
+
buttonConfirmHtml: null,
|
|
147
|
+
closeOnCancelButton: true,
|
|
148
|
+
closeOnConfirmButton: true,
|
|
149
|
+
showCloseButton: true,
|
|
150
|
+
allowCloseOutside: true,
|
|
151
|
+
allowMovement: true,
|
|
152
|
+
moveFromHeader: true,
|
|
153
|
+
moveFromBody: false,
|
|
154
|
+
moveFromFooter: true,
|
|
155
|
+
stickyHeader: true,
|
|
156
|
+
stickyFooter: true,
|
|
157
|
+
style: null,
|
|
158
|
+
animationOnShow: 'animDropDown',
|
|
159
|
+
animationOnDestroy: 'animDropUp',
|
|
160
|
+
animationDuration: 500,
|
|
161
|
+
beforeShow: () => { },
|
|
162
|
+
afterShow: () => { },
|
|
163
|
+
beforeDestroy: () => { },
|
|
164
|
+
afterDestroy: () => { },
|
|
165
|
+
onCancelButton: () => { },
|
|
166
|
+
onConfirmButton: () => { },
|
|
167
|
+
};
|
|
168
|
+
this.options = Object.assign(Object.assign({}, defaults), options);
|
|
169
|
+
// Call init method
|
|
170
|
+
this.init();
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Init modal
|
|
174
|
+
*/
|
|
175
|
+
init() {
|
|
176
|
+
var _a, _b;
|
|
177
|
+
// Create webcimesModals
|
|
178
|
+
if (!document.querySelector(".webcimesModals")) {
|
|
179
|
+
// Create webcimesModals
|
|
180
|
+
document.body.insertAdjacentHTML("beforeend", '<div class="webcimesModals animFadeIn"></div>');
|
|
181
|
+
this.webcimesModals = document.querySelector(".webcimesModals");
|
|
182
|
+
// Set animation duration for webcimesModals
|
|
183
|
+
this.webcimesModals.style.setProperty("animation-duration", this.options.animationDuration + "ms");
|
|
184
|
+
// Delete enter animation after animation delay
|
|
185
|
+
setTimeout(() => {
|
|
186
|
+
this.webcimesModals.classList.remove("animFadeIn");
|
|
187
|
+
}, this.options.animationDuration);
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
this.webcimesModals = document.querySelector(".webcimesModals");
|
|
191
|
+
}
|
|
192
|
+
// Callback before show modal
|
|
193
|
+
if (typeof this.options.beforeShow === 'function') {
|
|
194
|
+
this.options.beforeShow();
|
|
195
|
+
}
|
|
196
|
+
// Create modal
|
|
197
|
+
this.webcimesModals.insertAdjacentHTML("beforeend", `<div class="modal ` + (this.options.setClass ? this.options.setClass : '') + ` ` + this.options.animationOnShow + `" ` + (this.options.setClass ? 'id="' + this.options.setId + '"' : '') + `>
|
|
198
|
+
` + (this.options.titleHtml || this.options.showCloseButton ?
|
|
199
|
+
`<div class="modalHeader ` + (this.options.stickyHeader ? 'sticky' : '') + ` ` + (this.options.moveFromHeader ? 'movable' : '') + `">
|
|
200
|
+
` + (this.options.titleHtml ? '<div class="title">' + this.options.titleHtml + '</div>' : '') + `
|
|
201
|
+
` + (this.options.showCloseButton ? '<button class="close"></button>' : '') + `
|
|
202
|
+
</div>`
|
|
203
|
+
: '') + `
|
|
204
|
+
` + (this.options.bodyHtml ?
|
|
205
|
+
`<div class="modalBody ` + (this.options.moveFromBody ? 'movable' : '') + `">
|
|
206
|
+
` + this.options.bodyHtml + `
|
|
207
|
+
</div>`
|
|
208
|
+
: '') + `
|
|
209
|
+
` + (this.options.buttonCancelHtml || this.options.buttonConfirmHtml ?
|
|
210
|
+
`<div class="modalFooter ` + (this.options.stickyFooter ? 'sticky' : '') + ` ` + (this.options.moveFromFooter ? 'movable' : '') + `">
|
|
211
|
+
` + (this.options.buttonCancelHtml ? '<button class="cancel ' + (this.options.closeOnCancelButton ? 'close' : '') + '">' + this.options.buttonCancelHtml + '</button>' : '') + `
|
|
212
|
+
` + (this.options.buttonConfirmHtml ? '<button class="confirm ' + (this.options.closeOnConfirmButton ? 'close' : '') + '">' + this.options.buttonConfirmHtml + '</button>' : '') + `
|
|
213
|
+
</div>`
|
|
214
|
+
: '') + `
|
|
215
|
+
</div>`);
|
|
216
|
+
this.modal = this.webcimesModals.lastElementChild;
|
|
217
|
+
// Set animation duration for modal
|
|
218
|
+
this.modal.style.setProperty("animation-duration", this.options.animationDuration + "ms");
|
|
219
|
+
// Delete animation of enter after the animation delay
|
|
220
|
+
setTimeout(() => {
|
|
221
|
+
this.modal.classList.remove(this.options.animationOnShow);
|
|
222
|
+
// Callback after show modal
|
|
223
|
+
if (typeof this.options.afterShow === 'function') {
|
|
224
|
+
this.options.afterShow();
|
|
225
|
+
}
|
|
226
|
+
}, this.options.animationDuration);
|
|
227
|
+
// Width of modal
|
|
228
|
+
this.modal.style.setProperty("max-width", "90%");
|
|
229
|
+
if (this.options.width != "auto" && this.options.width) {
|
|
230
|
+
this.modal.style.setProperty("width", this.options.width);
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
// "max-content" is for keep size in "auto" and for maximum to max-width
|
|
234
|
+
this.modal.style.setProperty("width", "max-content");
|
|
235
|
+
}
|
|
236
|
+
// Height of modal
|
|
237
|
+
this.modal.style.setProperty("max-height", "90%");
|
|
238
|
+
if (this.options.height != "auto" && this.options.height) {
|
|
239
|
+
this.modal.style.setProperty("height", this.options.height);
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
// "max-content" is for keep size in "auto" and for maximum to max-height
|
|
243
|
+
this.modal.style.setProperty("height", "max-content");
|
|
244
|
+
}
|
|
245
|
+
// Style
|
|
246
|
+
if (this.options.style) {
|
|
247
|
+
let oldStyle = this.modal.getAttribute("style");
|
|
248
|
+
this.modal.setAttribute("style", oldStyle + this.options.style);
|
|
249
|
+
}
|
|
250
|
+
// Event on cancel button
|
|
251
|
+
if (this.options.buttonCancelHtml) {
|
|
252
|
+
(_a = this.modal.querySelector(".cancel")) === null || _a === void 0 ? void 0 : _a.addEventListener("click", this.eventCancelButton);
|
|
253
|
+
}
|
|
254
|
+
// Event on confirm button
|
|
255
|
+
if (this.options.buttonConfirmHtml) {
|
|
256
|
+
(_b = this.modal.querySelector(".confirm")) === null || _b === void 0 ? void 0 : _b.addEventListener("click", this.eventConfirmButton);
|
|
257
|
+
}
|
|
258
|
+
// Event click outside (on webcimesModals)
|
|
259
|
+
this.webcimesModals.addEventListener("click", this.eventClickOutside);
|
|
260
|
+
// Event close modal when click on close button
|
|
261
|
+
this.modal.querySelectorAll(".close").forEach((el) => {
|
|
262
|
+
el.addEventListener("click", this.eventClickCloseButton);
|
|
263
|
+
});
|
|
264
|
+
// Place selected modal on top
|
|
265
|
+
['mousedown', 'touchstart'].forEach((typeEvent) => {
|
|
266
|
+
this.modal.addEventListener(typeEvent, this.eventDragModalOnTop);
|
|
267
|
+
});
|
|
268
|
+
// Move modal
|
|
269
|
+
if (this.options.allowMovement && (this.options.moveFromHeader || this.options.moveFromBody || this.options.moveFromFooter)) {
|
|
270
|
+
if (this.options.moveFromHeader && this.modal.querySelector(".modalHeader")) {
|
|
271
|
+
this.moveFromElements.push(this.modal.querySelector(".modalHeader"));
|
|
272
|
+
}
|
|
273
|
+
if (this.options.moveFromBody && this.modal.querySelector(".modalBody")) {
|
|
274
|
+
this.moveFromElements.push(this.modal.querySelector(".modalBody"));
|
|
275
|
+
}
|
|
276
|
+
if (this.options.moveFromFooter && this.modal.querySelector(".modalFooter")) {
|
|
277
|
+
this.moveFromElements.push(this.modal.querySelector(".modalFooter"));
|
|
278
|
+
}
|
|
279
|
+
['mousedown', 'touchstart'].forEach((typeEvent) => {
|
|
280
|
+
this.moveFromElements.forEach((el) => {
|
|
281
|
+
el.addEventListener(typeEvent, this.eventDragStart);
|
|
282
|
+
});
|
|
283
|
+
});
|
|
284
|
+
['mousemove', 'touchmove'].forEach((typeEvent) => {
|
|
285
|
+
document.addEventListener(typeEvent, this.eventMove);
|
|
286
|
+
});
|
|
287
|
+
['mouseup', 'touchend'].forEach((typeEvent) => {
|
|
288
|
+
document.addEventListener(typeEvent, this.eventDragStop);
|
|
289
|
+
});
|
|
290
|
+
document.addEventListener("selectstart", this.eventPreventSelectText);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Destroy modal
|
|
295
|
+
*/
|
|
296
|
+
destroy() {
|
|
297
|
+
// If modal is not already destroying
|
|
298
|
+
if (!this.modal.getAttribute("data-destroying")) {
|
|
299
|
+
// Callback before destroy modal
|
|
300
|
+
if (typeof this.options.beforeDestroy === 'function') {
|
|
301
|
+
this.options.beforeDestroy();
|
|
302
|
+
}
|
|
303
|
+
// Close webcimesModals (according the number of modal not already destroying)
|
|
304
|
+
if (document.querySelectorAll(".modal:not([data-destroying])").length == 1) {
|
|
305
|
+
this.webcimesModals.classList.add("animFadeOut");
|
|
306
|
+
}
|
|
307
|
+
// Close modal
|
|
308
|
+
this.modal.setAttribute("data-destroying", "1");
|
|
309
|
+
this.modal.classList.add(this.options.animationOnDestroy);
|
|
310
|
+
// Destroy all events from modal and remove webcimesModals or modal after animation duration
|
|
311
|
+
setTimeout(() => {
|
|
312
|
+
var _a, _b;
|
|
313
|
+
if (typeof this.modal !== 'undefined') {
|
|
314
|
+
// Destroy all events from modal
|
|
315
|
+
if (this.options.buttonCancelHtml) {
|
|
316
|
+
(_a = this.modal.querySelector(".cancel")) === null || _a === void 0 ? void 0 : _a.removeEventListener("click", this.eventCancelButton);
|
|
317
|
+
}
|
|
318
|
+
if (this.options.buttonConfirmHtml) {
|
|
319
|
+
(_b = this.modal.querySelector(".confirm")) === null || _b === void 0 ? void 0 : _b.removeEventListener("click", this.eventConfirmButton);
|
|
320
|
+
}
|
|
321
|
+
this.webcimesModals.removeEventListener("click", this.eventClickOutside);
|
|
322
|
+
this.modal.querySelectorAll(".close").forEach((el) => {
|
|
323
|
+
el.removeEventListener("click", this.eventClickCloseButton);
|
|
324
|
+
});
|
|
325
|
+
['mousedown', 'touchstart'].forEach((typeEvent) => {
|
|
326
|
+
this.modal.removeEventListener(typeEvent, this.eventDragModalOnTop);
|
|
327
|
+
});
|
|
328
|
+
if (this.options.allowMovement && (this.options.moveFromHeader || this.options.moveFromBody || this.options.moveFromFooter)) {
|
|
329
|
+
['mousedown', 'touchstart'].forEach((typeEvent) => {
|
|
330
|
+
this.moveFromElements.forEach((el) => {
|
|
331
|
+
el.removeEventListener(typeEvent, this.eventDragStart);
|
|
332
|
+
});
|
|
333
|
+
});
|
|
334
|
+
['mousemove', 'touchmove'].forEach((typeEvent) => {
|
|
335
|
+
document.removeEventListener(typeEvent, this.eventMove);
|
|
336
|
+
});
|
|
337
|
+
['mouseup', 'touchend'].forEach((typeEvent) => {
|
|
338
|
+
document.removeEventListener(typeEvent, this.eventDragStop);
|
|
339
|
+
});
|
|
340
|
+
document.removeEventListener("selectstart", this.eventPreventSelectText);
|
|
341
|
+
}
|
|
342
|
+
// Remove webcimesModals or modal according the number of modal
|
|
343
|
+
(document.querySelectorAll(".modal").length > 1 ? this.modal : this.webcimesModals).remove();
|
|
344
|
+
}
|
|
345
|
+
// Callback after destroy modal
|
|
346
|
+
if (typeof this.options.afterDestroy === 'function') {
|
|
347
|
+
this.options.afterDestroy();
|
|
348
|
+
}
|
|
349
|
+
}, this.options.animationDuration);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
//# sourceMappingURL=webcimes-modal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webcimes-modal.js","sourceRoot":"","sources":["webcimes-modal.ts"],"names":[],"mappings":"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"}
|