@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 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 = 10;
172
- let offsetWidth = document.body.offsetWidth;
173
- let offsetHeight = document.body.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 - 30 - height + 'px';
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
- refreshMinimized();
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.el.style.top = self.top + 'px';
197
- self.el.style.left = self.left + 'px';
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
- refreshMinimized();
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 limit = document.documentElement.clientHeight + window.scrollY - (rect.top + rect.height);
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 - 10);
237
+ return rect.top + (limit - margin);
208
238
  } else if (rect.top < 0) {
209
- return 10;
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 limit = document.documentElement.clientWidth - (rect.left + rect.width);
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 - 10);
255
+ return rect.left + (limit - margin);
220
256
  } else if (rect.left < 0) {
221
- return 10;
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
- // Initial centralize
271
- if (! self.position) {
272
- if (! self.width && self.el.offsetWidth) {
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 (! self.height && self.el.offsetHeight) {
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
- // Full screen
284
- if (self.height > 300) {
285
- self.el.classList.add('fullscreen');
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
- // Responsive
289
- if (document.documentElement.clientWidth < 800 && self.responsive !== false) {
290
- self.el.setAttribute('data-responsive', true);
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
- document.addEventListener('keydown', (e) => {
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
- if (self.position === 'center') {
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) || item.style.top;
502
- let h = adjustHorizontal.call(self) || item.style.left;
503
- self.top = parseInt(v);
504
- self.left = parseInt(h);
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: auto;
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
@@ -17,5 +17,5 @@
17
17
  },
18
18
  "main": "dist/index.js",
19
19
  "types": "dist/index.d.ts",
20
- "version": "2.5.0"
20
+ "version": "2.6.1"
21
21
  }