@lemonadejs/modal 2.5.0 → 2.6.0

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.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,39 +187,68 @@ 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 limit = window.innerHeight + window.scrollY - (rect.top + rect.height);
206
232
  if (limit < 0) {
207
- return rect.top + (limit - 10);
233
+ return rect.top + (limit - margin);
208
234
  } else if (rect.top < 0) {
209
- return 10;
235
+ return margin;
210
236
  }
237
+ return false;
211
238
  }
212
239
 
213
240
  const adjustHorizontal = function() {
214
241
  let self = this;
215
242
  let rect = self.el.getBoundingClientRect();
243
+ let margin = rect.width >= window.innerWidth || self.position ? 0 : 10;
216
244
  // Make sure component will be visible on page
217
- let limit = document.documentElement.clientWidth - (rect.left + rect.width);
245
+ let limit = window.innerWidth - (rect.left + rect.width);
218
246
  if (limit < 0) {
219
- return rect.left + (limit - 10);
247
+ return rect.left + (limit - margin);
220
248
  } else if (rect.left < 0) {
221
- return 10;
249
+ return margin;
222
250
  }
251
+ return false;
223
252
  }
224
253
 
225
254
  const isTrue = function(e) {
@@ -266,28 +295,54 @@ if (!lemonade && typeof (require) === 'function') {
266
295
  if (self.height) {
267
296
  self.el.style.height = self.height + 'px';
268
297
  }
298
+ // Position
299
+ if (self.top) {
300
+ self.el.style.top = self.top + 'px';
301
+ }
302
+ if (self.left) {
303
+ self.el.style.left = self.left + 'px';
304
+ }
269
305
 
270
- // Initial centralize
271
- if (! self.position) {
272
- if (! self.width && self.el.offsetWidth) {
306
+ if (self.position === 'right' || self.position === 'bottom' || self.position === 'left') {
307
+
308
+ } else {
309
+ if (!self.width && self.el.offsetWidth) {
273
310
  self.width = self.el.offsetWidth;
274
311
  }
275
- if (! self.height && self.el.offsetHeight) {
312
+ if (!self.height && self.el.offsetHeight) {
276
313
  self.height = self.el.offsetHeight;
277
314
  }
278
- } else if (self.position === 'center') {
279
- self.top = (window.innerHeight - self.height) / 2;
280
- self.left = (window.innerWidth - self.width) / 2;
281
- }
282
315
 
283
- // Full screen
284
- if (self.height > 300) {
285
- self.el.classList.add('fullscreen');
286
- }
316
+ // Initial centralize
317
+ if (self.position === 'center' || !self.top) {
318
+ self.top = (window.innerHeight - self.height) / 2;
319
+ }
320
+ if (self.position === 'center' || !self.left) {
321
+ self.left = (window.innerWidth - self.width) / 2;
322
+ }
323
+
324
+ // Responsive
325
+ if (document.documentElement.clientWidth < 800) {
326
+ if (self.responsive !== false) {
327
+ self.el.setAttribute('data-responsive', true);
328
+ }
329
+ // Full screen
330
+ if (self.height > 300) {
331
+ self.el.classList.add('fullscreen');
332
+ }
333
+ }
287
334
 
288
- // Responsive
289
- if (document.documentElement.clientWidth < 800 && self.responsive !== false) {
290
- self.el.setAttribute('data-responsive', true);
335
+ // Adjust position
336
+ if (isTrue(self['auto-adjust'])) {
337
+ let v = adjustVertical.call(self);
338
+ if (v !== false) {
339
+ self.top = v;
340
+ }
341
+ v = adjustHorizontal.call(self);
342
+ if (v !== false) {
343
+ self.left = v;
344
+ }
345
+ }
291
346
  }
292
347
 
293
348
  // Backdrop
@@ -299,18 +354,6 @@ if (!lemonade && typeof (require) === 'function') {
299
354
  })
300
355
  }
301
356
 
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
357
  // Bring to front on focus
315
358
  if (self.layers !== false) {
316
359
  self.el.classList.add('lm-modal-layers');
@@ -326,7 +369,7 @@ if (!lemonade && typeof (require) === 'function') {
326
369
  });
327
370
 
328
371
  // Close and stop propagation
329
- document.addEventListener('keydown', (e) => {
372
+ self.el.addEventListener('keydown', (e) => {
330
373
  if (e.key === 'Escape' && self.closed === false) {
331
374
  self.closed = true;
332
375
  e.preventDefault();
@@ -444,6 +487,7 @@ if (!lemonade && typeof (require) === 'function') {
444
487
  if (isTrue(self.closable)) {
445
488
  if (corner) {
446
489
  self.closed = true;
490
+
447
491
  if (isTrue(self.minimizable)) {
448
492
  removeMini(self);
449
493
  }
@@ -456,20 +500,11 @@ if (!lemonade && typeof (require) === 'function') {
456
500
  // Check if the click in on minimize
457
501
  if (isTrue(self.minimizable)) {
458
502
  if (corner) {
459
- // Minimize
460
- self.minimized = ! self.minimized;
461
503
  // 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 {
504
+ if (self.minimized === true) {
472
505
  removeMini(self);
506
+ } else {
507
+ setMini(self);
473
508
  }
474
509
 
475
510
  return;
@@ -498,10 +533,16 @@ if (!lemonade && typeof (require) === 'function') {
498
533
  controls.type = 'move';
499
534
  // Callback
500
535
  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);
536
+ let v = adjustVertical.call(self);
537
+ if (v === false) {
538
+ v = parseInt(item.style.top);
539
+ }
540
+ let h = adjustHorizontal.call(self);
541
+ if (v === false) {
542
+ h = parseInt(item.style.left);
543
+ }
544
+ self.top = v;
545
+ self.left = h;
505
546
  controls.e.classList.remove('moving');
506
547
  }
507
548
  controls.e.classList.add('moving');
package/dist/style.css CHANGED
@@ -155,7 +155,7 @@
155
155
  }
156
156
 
157
157
  .lm-modal[position="bottom"] {
158
- top: auto;
158
+ top: initial;
159
159
  left: 0;
160
160
  bottom: 0;
161
161
  width: 100vw !important;
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.0"
21
21
  }