webcimes-modal 1.0.2 → 1.1.2

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/webcimes-modal.js DELETED
@@ -1,363 +0,0 @@
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
- this.eventResize = () => {
138
- this.modal.style.removeProperty("left");
139
- this.modal.style.removeProperty("top");
140
- };
141
- // Defaults
142
- const defaults = {
143
- setId: null,
144
- setClass: null,
145
- width: 'auto',
146
- height: 'auto',
147
- titleHtml: null,
148
- bodyHtml: null,
149
- buttonCancelHtml: null,
150
- buttonConfirmHtml: null,
151
- closeOnCancelButton: true,
152
- closeOnConfirmButton: true,
153
- showCloseButton: true,
154
- allowCloseOutside: true,
155
- allowMovement: true,
156
- moveFromHeader: true,
157
- moveFromBody: false,
158
- moveFromFooter: true,
159
- stickyHeader: true,
160
- stickyFooter: true,
161
- style: null,
162
- animationOnShow: 'animDropDown',
163
- animationOnDestroy: 'animDropUp',
164
- animationDuration: 500,
165
- beforeShow: () => { },
166
- afterShow: () => { },
167
- beforeDestroy: () => { },
168
- afterDestroy: () => { },
169
- onCancelButton: () => { },
170
- onConfirmButton: () => { },
171
- };
172
- this.options = Object.assign(Object.assign({}, defaults), options);
173
- // Call init method
174
- this.init();
175
- }
176
- /**
177
- * Init modal
178
- */
179
- init() {
180
- var _a, _b;
181
- // Create webcimesModals
182
- if (!document.querySelector(".webcimesModals")) {
183
- // Create webcimesModals
184
- document.body.insertAdjacentHTML("beforeend", '<div class="webcimesModals animFadeIn"></div>');
185
- this.webcimesModals = document.querySelector(".webcimesModals");
186
- // Set animation duration for webcimesModals
187
- this.webcimesModals.style.setProperty("animation-duration", this.options.animationDuration + "ms");
188
- // Delete enter animation after animation delay
189
- setTimeout(() => {
190
- this.webcimesModals.classList.remove("animFadeIn");
191
- }, this.options.animationDuration);
192
- }
193
- else {
194
- this.webcimesModals = document.querySelector(".webcimesModals");
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
- // Callback before show modal
218
- if (typeof this.options.beforeShow === 'function') {
219
- // Set a timeout of zero, to wait for some dom to load
220
- setTimeout(() => {
221
- this.options.beforeShow();
222
- }, 0);
223
- }
224
- // Set animation duration for modal
225
- this.modal.style.setProperty("animation-duration", this.options.animationDuration + "ms");
226
- // Delete animation of enter after the animation delay
227
- setTimeout(() => {
228
- this.modal.classList.remove(this.options.animationOnShow);
229
- // Callback after show modal
230
- if (typeof this.options.afterShow === 'function') {
231
- this.options.afterShow();
232
- }
233
- }, this.options.animationDuration);
234
- // Width of modal
235
- this.modal.style.setProperty("max-width", "90%");
236
- if (this.options.width != "auto" && this.options.width) {
237
- this.modal.style.setProperty("width", this.options.width);
238
- }
239
- else {
240
- // "max-content" is for keep size in "auto" and for maximum to max-width
241
- this.modal.style.setProperty("width", "max-content");
242
- }
243
- // Height of modal
244
- this.modal.style.setProperty("max-height", "90%");
245
- if (this.options.height != "auto" && this.options.height) {
246
- this.modal.style.setProperty("height", this.options.height);
247
- }
248
- else {
249
- // "max-content" is for keep size in "auto" and for maximum to max-height
250
- this.modal.style.setProperty("height", "max-content");
251
- }
252
- // Style
253
- if (this.options.style) {
254
- let oldStyle = this.modal.getAttribute("style");
255
- this.modal.setAttribute("style", oldStyle + this.options.style);
256
- }
257
- // Event on cancel button
258
- if (this.options.buttonCancelHtml) {
259
- (_a = this.modal.querySelector(".cancel")) === null || _a === void 0 ? void 0 : _a.addEventListener("click", this.eventCancelButton);
260
- }
261
- // Event on confirm button
262
- if (this.options.buttonConfirmHtml) {
263
- (_b = this.modal.querySelector(".confirm")) === null || _b === void 0 ? void 0 : _b.addEventListener("click", this.eventConfirmButton);
264
- }
265
- // Event click outside (on webcimesModals)
266
- this.webcimesModals.addEventListener("click", this.eventClickOutside);
267
- // Event close modal when click on close button
268
- this.modal.querySelectorAll(".close").forEach((el) => {
269
- el.addEventListener("click", this.eventClickCloseButton);
270
- });
271
- // Place selected modal on top
272
- ['mousedown', 'touchstart'].forEach((typeEvent) => {
273
- this.modal.addEventListener(typeEvent, this.eventDragModalOnTop);
274
- });
275
- // Move modal
276
- if (this.options.allowMovement && (this.options.moveFromHeader || this.options.moveFromBody || this.options.moveFromFooter)) {
277
- if (this.options.moveFromHeader && this.modal.querySelector(".modalHeader")) {
278
- this.moveFromElements.push(this.modal.querySelector(".modalHeader"));
279
- }
280
- if (this.options.moveFromBody && this.modal.querySelector(".modalBody")) {
281
- this.moveFromElements.push(this.modal.querySelector(".modalBody"));
282
- }
283
- if (this.options.moveFromFooter && this.modal.querySelector(".modalFooter")) {
284
- this.moveFromElements.push(this.modal.querySelector(".modalFooter"));
285
- }
286
- ['mousedown', 'touchstart'].forEach((typeEvent) => {
287
- this.moveFromElements.forEach((el) => {
288
- el.addEventListener(typeEvent, this.eventDragStart);
289
- });
290
- });
291
- ['mousemove', 'touchmove'].forEach((typeEvent) => {
292
- document.addEventListener(typeEvent, this.eventMove);
293
- });
294
- ['mouseup', 'touchend'].forEach((typeEvent) => {
295
- document.addEventListener(typeEvent, this.eventDragStop);
296
- });
297
- document.addEventListener("selectstart", this.eventPreventSelectText);
298
- }
299
- // When resizing window, reset modal position to center
300
- window.addEventListener("resize", this.eventResize);
301
- }
302
- /**
303
- * Destroy modal
304
- */
305
- destroy() {
306
- // If modal is not already destroying
307
- if (!this.modal.getAttribute("data-destroying")) {
308
- // Callback before destroy modal
309
- if (typeof this.options.beforeDestroy === 'function') {
310
- this.options.beforeDestroy();
311
- }
312
- // Close webcimesModals (according the number of modal not already destroying)
313
- if (document.querySelectorAll(".modal:not([data-destroying])").length == 1) {
314
- this.webcimesModals.classList.add("animFadeOut");
315
- }
316
- // Close modal
317
- this.modal.setAttribute("data-destroying", "1");
318
- this.modal.classList.add(this.options.animationOnDestroy);
319
- // Destroy all events from modal and remove webcimesModals or modal after animation duration
320
- setTimeout(() => {
321
- var _a, _b;
322
- if (typeof this.modal !== 'undefined') {
323
- // Destroy all events from modal
324
- if (this.options.buttonCancelHtml) {
325
- (_a = this.modal.querySelector(".cancel")) === null || _a === void 0 ? void 0 : _a.removeEventListener("click", this.eventCancelButton);
326
- }
327
- if (this.options.buttonConfirmHtml) {
328
- (_b = this.modal.querySelector(".confirm")) === null || _b === void 0 ? void 0 : _b.removeEventListener("click", this.eventConfirmButton);
329
- }
330
- this.webcimesModals.removeEventListener("click", this.eventClickOutside);
331
- this.modal.querySelectorAll(".close").forEach((el) => {
332
- el.removeEventListener("click", this.eventClickCloseButton);
333
- });
334
- ['mousedown', 'touchstart'].forEach((typeEvent) => {
335
- this.modal.removeEventListener(typeEvent, this.eventDragModalOnTop);
336
- });
337
- if (this.options.allowMovement && (this.options.moveFromHeader || this.options.moveFromBody || this.options.moveFromFooter)) {
338
- ['mousedown', 'touchstart'].forEach((typeEvent) => {
339
- this.moveFromElements.forEach((el) => {
340
- el.removeEventListener(typeEvent, this.eventDragStart);
341
- });
342
- });
343
- ['mousemove', 'touchmove'].forEach((typeEvent) => {
344
- document.removeEventListener(typeEvent, this.eventMove);
345
- });
346
- ['mouseup', 'touchend'].forEach((typeEvent) => {
347
- document.removeEventListener(typeEvent, this.eventDragStop);
348
- });
349
- document.removeEventListener("selectstart", this.eventPreventSelectText);
350
- }
351
- window.removeEventListener("resize", this.eventResize);
352
- // Remove webcimesModals or modal according the number of modal
353
- (document.querySelectorAll(".modal").length > 1 ? this.modal : this.webcimesModals).remove();
354
- }
355
- // Callback after destroy modal
356
- if (typeof this.options.afterDestroy === 'function') {
357
- this.options.afterDestroy();
358
- }
359
- }, this.options.animationDuration);
360
- }
361
- }
362
- }
363
- //# sourceMappingURL=webcimes-modal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"webcimes-modal.js","sourceRoot":"","sources":["webcimes-modal.ts"],"names":[],"mappings":"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"}