@lemonadejs/modal 2.5.0 → 2.6.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/dist/index.d.ts +2 -2
- package/dist/index.js +120 -63
- package/dist/style.css +6 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -22,8 +22,8 @@ declare namespace Modal {
|
|
|
22
22
|
resizable?: boolean;
|
|
23
23
|
/** Modal can be moved from its original position. Default: false */
|
|
24
24
|
draggable?: boolean;
|
|
25
|
-
/** Modal is automatic align during initialization */
|
|
26
|
-
position?: 'center' | 'left' | 'right' | 'bottom' | undefined;
|
|
25
|
+
/** Modal is automatic align during initialization. Absolute change the CSS position to absolute position to respect the screen position */
|
|
26
|
+
position?: 'center' | 'left' | 'right' | 'bottom' | 'absolute' |undefined;
|
|
27
27
|
/** Title of the modal */
|
|
28
28
|
title?: string;
|
|
29
29
|
/** Width of the modal */
|
package/dist/index.js
CHANGED
|
@@ -168,13 +168,13 @@ if (!lemonade && typeof (require) === 'function') {
|
|
|
168
168
|
let items = minimizedModals;
|
|
169
169
|
let numOfItems = items.length;
|
|
170
170
|
let width = 10;
|
|
171
|
-
let height =
|
|
172
|
-
let offsetWidth =
|
|
173
|
-
let offsetHeight =
|
|
171
|
+
let height = 55;
|
|
172
|
+
let offsetWidth = window.innerWidth;
|
|
173
|
+
let offsetHeight = window.innerHeight;
|
|
174
174
|
for (let i = 0; i < numOfItems; i++) {
|
|
175
175
|
let item = items[i];
|
|
176
176
|
item.el.style.left = width + 'px';
|
|
177
|
-
item.el.style.top = offsetHeight -
|
|
177
|
+
item.el.style.top = offsetHeight - height + 'px';
|
|
178
178
|
width += 205;
|
|
179
179
|
|
|
180
180
|
if (offsetWidth - width < 205) {
|
|
@@ -187,45 +187,96 @@ if (!lemonade && typeof (require) === 'function') {
|
|
|
187
187
|
const setMini = function(self) {
|
|
188
188
|
// Minimize modals
|
|
189
189
|
minimizedModals.push(self);
|
|
190
|
+
let rect = self.el.getBoundingClientRect();
|
|
191
|
+
self.minimized = true;
|
|
192
|
+
self.el.top = rect.top;
|
|
193
|
+
self.el.left = rect.left;
|
|
194
|
+
if (! self.el.style.top) {
|
|
195
|
+
self.el.style.top = self.el.top + 'px';
|
|
196
|
+
}
|
|
197
|
+
if (! self.el.style.left) {
|
|
198
|
+
self.el.style.left = self.el.left + 'px';
|
|
199
|
+
}
|
|
190
200
|
// Refresh positions
|
|
191
|
-
|
|
201
|
+
setTimeout(() => {
|
|
202
|
+
refreshMinimized();
|
|
203
|
+
}, 10);
|
|
192
204
|
}
|
|
193
205
|
|
|
194
206
|
const removeMini = function(self) {
|
|
195
207
|
minimizedModals.splice(minimizedModals.indexOf(self), 1);
|
|
196
|
-
self.
|
|
197
|
-
self.el.style.
|
|
208
|
+
self.minimized = false;
|
|
209
|
+
self.el.style.top = self.el.top + 'px';
|
|
210
|
+
self.el.style.left = self.el.left + 'px';
|
|
198
211
|
// Refresh positions
|
|
199
|
-
|
|
212
|
+
setTimeout(() => {
|
|
213
|
+
refreshMinimized();
|
|
214
|
+
}, 10);
|
|
215
|
+
// Refresh positions
|
|
216
|
+
setTimeout(() => {
|
|
217
|
+
if (self.top === '') {
|
|
218
|
+
self.el.style.top = '';
|
|
219
|
+
}
|
|
220
|
+
if (self.left === '') {
|
|
221
|
+
self.el.style.left = '';
|
|
222
|
+
}
|
|
223
|
+
}, 400);
|
|
200
224
|
}
|
|
201
225
|
|
|
202
226
|
const adjustVertical = function() {
|
|
203
227
|
let self = this;
|
|
204
228
|
let rect = self.el.getBoundingClientRect();
|
|
205
|
-
let
|
|
229
|
+
let margin = rect.height >= window.innerHeight || self.position ? 0 : 10;
|
|
230
|
+
// Make sure component will be visible on page
|
|
231
|
+
let h = window.innerHeight;
|
|
232
|
+
if (self.position === 'absolute') {
|
|
233
|
+
h = document.body.offsetHeight;
|
|
234
|
+
}
|
|
235
|
+
let limit = h - (rect.top + rect.height);
|
|
206
236
|
if (limit < 0) {
|
|
207
|
-
return rect.top + (limit -
|
|
237
|
+
return rect.top + (limit - margin);
|
|
208
238
|
} else if (rect.top < 0) {
|
|
209
|
-
return
|
|
239
|
+
return margin;
|
|
210
240
|
}
|
|
241
|
+
return false;
|
|
211
242
|
}
|
|
212
243
|
|
|
213
244
|
const adjustHorizontal = function() {
|
|
214
245
|
let self = this;
|
|
215
246
|
let rect = self.el.getBoundingClientRect();
|
|
247
|
+
let margin = rect.width >= window.innerWidth || self.position ? 0 : 10;
|
|
216
248
|
// Make sure component will be visible on page
|
|
217
|
-
let
|
|
249
|
+
let w = window.innerWidth;
|
|
250
|
+
if (self.position === 'absolute') {
|
|
251
|
+
w = document.body.offsetWidth;
|
|
252
|
+
}
|
|
253
|
+
let limit = w - (rect.left + rect.width);
|
|
218
254
|
if (limit < 0) {
|
|
219
|
-
return rect.left + (limit -
|
|
255
|
+
return rect.left + (limit - margin);
|
|
220
256
|
} else if (rect.left < 0) {
|
|
221
|
-
return
|
|
257
|
+
return margin;
|
|
222
258
|
}
|
|
259
|
+
return false;
|
|
223
260
|
}
|
|
224
261
|
|
|
225
262
|
const isTrue = function(e) {
|
|
226
263
|
return e === true || e === 1 || e === 'true';
|
|
227
264
|
}
|
|
228
265
|
|
|
266
|
+
const autoAdjust = function(s) {
|
|
267
|
+
// Adjust position
|
|
268
|
+
if (isTrue(s['auto-adjust'])) {
|
|
269
|
+
let v = adjustVertical.call(s);
|
|
270
|
+
if (v !== false) {
|
|
271
|
+
s.top = v;
|
|
272
|
+
}
|
|
273
|
+
v = adjustHorizontal.call(s);
|
|
274
|
+
if (v !== false) {
|
|
275
|
+
s.left = v;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
229
280
|
const Modal = function (template) {
|
|
230
281
|
let self = this;
|
|
231
282
|
let backdrop = null;
|
|
@@ -266,30 +317,46 @@ if (!lemonade && typeof (require) === 'function') {
|
|
|
266
317
|
if (self.height) {
|
|
267
318
|
self.el.style.height = self.height + 'px';
|
|
268
319
|
}
|
|
320
|
+
// Position
|
|
321
|
+
if (self.top) {
|
|
322
|
+
self.el.style.top = self.top + 'px';
|
|
323
|
+
}
|
|
324
|
+
if (self.left) {
|
|
325
|
+
self.el.style.left = self.left + 'px';
|
|
326
|
+
}
|
|
269
327
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
328
|
+
if (self.position === 'absolute' || self.position === 'right' || self.position === 'bottom' || self.position === 'left') {
|
|
329
|
+
|
|
330
|
+
} else {
|
|
331
|
+
if (!self.width && self.el.offsetWidth) {
|
|
273
332
|
self.width = self.el.offsetWidth;
|
|
274
333
|
}
|
|
275
|
-
if (!
|
|
334
|
+
if (!self.height && self.el.offsetHeight) {
|
|
276
335
|
self.height = self.el.offsetHeight;
|
|
277
336
|
}
|
|
278
|
-
} else if (self.position === 'center') {
|
|
279
|
-
self.top = (window.innerHeight - self.height) / 2;
|
|
280
|
-
self.left = (window.innerWidth - self.width) / 2;
|
|
281
|
-
}
|
|
282
337
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
338
|
+
// Initial centralize
|
|
339
|
+
if (self.position === 'center' || !self.top) {
|
|
340
|
+
self.top = (window.innerHeight - self.height) / 2;
|
|
341
|
+
}
|
|
342
|
+
if (self.position === 'center' || !self.left) {
|
|
343
|
+
self.left = (window.innerWidth - self.width) / 2;
|
|
344
|
+
}
|
|
287
345
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
346
|
+
// Responsive
|
|
347
|
+
if (document.documentElement.clientWidth < 800) {
|
|
348
|
+
if (self.responsive !== false) {
|
|
349
|
+
self.el.setAttribute('data-responsive', true);
|
|
350
|
+
}
|
|
351
|
+
// Full screen
|
|
352
|
+
if (self.height > 300) {
|
|
353
|
+
self.el.classList.add('fullscreen');
|
|
354
|
+
}
|
|
355
|
+
}
|
|
291
356
|
}
|
|
292
357
|
|
|
358
|
+
autoAdjust(self);
|
|
359
|
+
|
|
293
360
|
// Backdrop
|
|
294
361
|
if (self.backdrop === true) {
|
|
295
362
|
backdrop = document.createElement('div');
|
|
@@ -299,18 +366,6 @@ if (!lemonade && typeof (require) === 'function') {
|
|
|
299
366
|
})
|
|
300
367
|
}
|
|
301
368
|
|
|
302
|
-
// Adjust position
|
|
303
|
-
if (isTrue(self['auto-adjust'])) {
|
|
304
|
-
let v = adjustVertical.call(self);
|
|
305
|
-
if (v) {
|
|
306
|
-
self.top = v;
|
|
307
|
-
}
|
|
308
|
-
v = adjustHorizontal.call(self);
|
|
309
|
-
if (v) {
|
|
310
|
-
self.left = v;
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
|
|
314
369
|
// Bring to front on focus
|
|
315
370
|
if (self.layers !== false) {
|
|
316
371
|
self.el.classList.add('lm-modal-layers');
|
|
@@ -326,7 +381,7 @@ if (!lemonade && typeof (require) === 'function') {
|
|
|
326
381
|
});
|
|
327
382
|
|
|
328
383
|
// Close and stop propagation
|
|
329
|
-
|
|
384
|
+
self.el.addEventListener('keydown', (e) => {
|
|
330
385
|
if (e.key === 'Escape' && self.closed === false) {
|
|
331
386
|
self.closed = true;
|
|
332
387
|
e.preventDefault();
|
|
@@ -356,6 +411,8 @@ if (!lemonade && typeof (require) === 'function') {
|
|
|
356
411
|
if (backdrop) {
|
|
357
412
|
self.el.parentNode.insertBefore(backdrop, self.el);
|
|
358
413
|
}
|
|
414
|
+
// Auto adjust
|
|
415
|
+
autoAdjust(self);
|
|
359
416
|
} else {
|
|
360
417
|
// Hide backdrop
|
|
361
418
|
if (backdrop) {
|
|
@@ -372,13 +429,15 @@ if (!lemonade && typeof (require) === 'function') {
|
|
|
372
429
|
self.el.style[property] = '';
|
|
373
430
|
}
|
|
374
431
|
} else if (property === 'position') {
|
|
375
|
-
if (self.position) {
|
|
376
|
-
|
|
432
|
+
if (self.position && self.position !== 'center') {
|
|
433
|
+
self.top = '';
|
|
434
|
+
self.left = '';
|
|
435
|
+
} else {
|
|
436
|
+
if (! self.top) {
|
|
377
437
|
self.top = (window.innerHeight - self.el.offsetHeight) / 2;
|
|
438
|
+
}
|
|
439
|
+
if (! self.left) {
|
|
378
440
|
self.left = (window.innerWidth - self.el.offsetWidth) / 2;
|
|
379
|
-
} else {
|
|
380
|
-
self.top = '';
|
|
381
|
-
self.left = '';
|
|
382
441
|
}
|
|
383
442
|
}
|
|
384
443
|
}
|
|
@@ -444,6 +503,7 @@ if (!lemonade && typeof (require) === 'function') {
|
|
|
444
503
|
if (isTrue(self.closable)) {
|
|
445
504
|
if (corner) {
|
|
446
505
|
self.closed = true;
|
|
506
|
+
|
|
447
507
|
if (isTrue(self.minimizable)) {
|
|
448
508
|
removeMini(self);
|
|
449
509
|
}
|
|
@@ -456,20 +516,11 @@ if (!lemonade && typeof (require) === 'function') {
|
|
|
456
516
|
// Check if the click in on minimize
|
|
457
517
|
if (isTrue(self.minimizable)) {
|
|
458
518
|
if (corner) {
|
|
459
|
-
// Minimize
|
|
460
|
-
self.minimized = ! self.minimized;
|
|
461
519
|
// Handles minimized modal positioning
|
|
462
|
-
if (self.minimized) {
|
|
463
|
-
if (! self.top) {
|
|
464
|
-
self.top = self.el.offsetTop;
|
|
465
|
-
}
|
|
466
|
-
if (! self.left) {
|
|
467
|
-
self.left = self.el.offsetLeft;
|
|
468
|
-
}
|
|
469
|
-
|
|
470
|
-
setMini(self);
|
|
471
|
-
} else {
|
|
520
|
+
if (self.minimized === true) {
|
|
472
521
|
removeMini(self);
|
|
522
|
+
} else {
|
|
523
|
+
setMini(self);
|
|
473
524
|
}
|
|
474
525
|
|
|
475
526
|
return;
|
|
@@ -498,10 +549,16 @@ if (!lemonade && typeof (require) === 'function') {
|
|
|
498
549
|
controls.type = 'move';
|
|
499
550
|
// Callback
|
|
500
551
|
controls.action = function () {
|
|
501
|
-
let v = adjustVertical.call(self)
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
552
|
+
let v = adjustVertical.call(self);
|
|
553
|
+
if (v === false) {
|
|
554
|
+
v = parseInt(item.style.top);
|
|
555
|
+
}
|
|
556
|
+
let h = adjustHorizontal.call(self);
|
|
557
|
+
if (v === false) {
|
|
558
|
+
h = parseInt(item.style.left);
|
|
559
|
+
}
|
|
560
|
+
self.top = v;
|
|
561
|
+
self.left = h;
|
|
505
562
|
controls.e.classList.remove('moving');
|
|
506
563
|
}
|
|
507
564
|
controls.e.classList.add('moving');
|
package/dist/style.css
CHANGED
|
@@ -135,6 +135,10 @@
|
|
|
135
135
|
background: #888;
|
|
136
136
|
}
|
|
137
137
|
|
|
138
|
+
.lm-modal[position="absolute"] {
|
|
139
|
+
position: absolute;
|
|
140
|
+
}
|
|
141
|
+
|
|
138
142
|
.lm-modal[position="left"] {
|
|
139
143
|
top: 0;
|
|
140
144
|
left: 0;
|
|
@@ -155,7 +159,7 @@
|
|
|
155
159
|
}
|
|
156
160
|
|
|
157
161
|
.lm-modal[position="bottom"] {
|
|
158
|
-
top:
|
|
162
|
+
top: initial;
|
|
159
163
|
left: 0;
|
|
160
164
|
bottom: 0;
|
|
161
165
|
width: 100vw !important;
|
|
@@ -165,6 +169,7 @@
|
|
|
165
169
|
}
|
|
166
170
|
|
|
167
171
|
.lm-modal[minimized="true"] {
|
|
172
|
+
position: fixed;
|
|
168
173
|
width: 200px !important;
|
|
169
174
|
height: 45px !important;
|
|
170
175
|
min-width: initial;
|
package/package.json
CHANGED