izitoast 1.1.1 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 459868307a4489ece61211b3137bd9c78c81c88a
4
- data.tar.gz: 33c8b5aea7e02eb7fd81dbcd3d4e24aabf27792c
3
+ metadata.gz: 21e2c9991adaafe4f9aa92bf1d3bad62a94dd48a
4
+ data.tar.gz: 48f3507dd14d5eb13a8cf6e1b9a950d8597152f9
5
5
  SHA512:
6
- metadata.gz: b61d837ca40732ec100d4da9b40a3d667e070278e4784ba3426c4e4f1165e6ca667a6c8d91fe88bdbad2578a91d088f06b43455f31d00a6ca7203e07c77d340c
7
- data.tar.gz: 70810c709c4f98787857ee7cc47bc17212887982f9e2cbb06c10c820b4c8b3753559df1202901f2243be67f7c728235b019ed23adebdbe757ccfa9d7191bb83e
6
+ metadata.gz: 49b942abd214ae947fda56ebc2b233fa37fc313ca245776f813856967aabec92ba966b750f670fb2009aa88a037283551173633e292a600da955f2d1d3833779
7
+ data.tar.gz: 50448bde1f7a9cead6089f1cf6f82c97b87ae45fe26b65cce9ec0933372191c26e608d5cf6a6a7eccbd876b40c6e66741527d0430e3eec15f462647e58491a11
data/.gitignore CHANGED
File without changes
File without changes
data/Gemfile CHANGED
File without changes
File without changes
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Izitoast
2
2
 
3
- Simple wrapper around [IZITOAST](http://izitoast.marcelodolce.com) js notification plugin [visit Authors website.](https://www.google.com "Marcelo Dolce")
3
+ Simple wrapper around [IZITOAST](https://github.com/dolce/iziToast) js notification plugin [visit Authors website.](http://izitoast.marcelodolce.com)
4
4
 
5
5
 
6
6
  ## Installation
@@ -41,11 +41,11 @@ iziToast.success({
41
41
 
42
42
  You will see notification in the bottom-right corner of your browser.
43
43
 
44
- To find more about usage options, please [visit Authors website.](https://www.google.com "Marcelo Dolce")
44
+ To find more about usage options, please [visit Authors website.](http://izitoast.marcelodolce.com)
45
45
 
46
46
  ## Contributing
47
47
 
48
- Bug reports and pull requests are welcome on GitHub at https://github.com/BadAllOff/izitoast. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
48
+ Bug reports and pull requests are welcome on GitHub at https://github.com/BadAllOff/iziToast-rails. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
49
49
 
50
50
 
51
51
  ## License
data/Rakefile CHANGED
File without changes
File without changes
data/bin/setup CHANGED
File without changes
File without changes
File without changes
@@ -1,3 +1,3 @@
1
1
  module Izitoast
2
- VERSION = "1.1.1"
2
+ VERSION = "1.2.0"
3
3
  end
@@ -1,17 +1,17 @@
1
1
  /*
2
- * iziToast | v1.1.1
2
+ * iziToast | v1.2.0
3
3
  * http://izitoast.marcelodolce.com
4
4
  * by Marcelo Dolce.
5
5
  */
6
6
  (function (root, factory) {
7
- if (typeof define === 'function' && define.amd) {
7
+ if(typeof define === 'function' && define.amd) {
8
8
  define([], factory(root));
9
- } else if (typeof exports === 'object') {
9
+ } else if(typeof exports === 'object') {
10
10
  module.exports = factory(root);
11
11
  } else {
12
12
  root.iziToast = factory(root);
13
13
  }
14
- })(typeof global !== "undefined" ? global : this.window || this.global, function (root) {
14
+ })(typeof global !== 'undefined' ? global : window || this.window || this.global, function (root) {
15
15
 
16
16
  'use strict';
17
17
 
@@ -28,61 +28,81 @@
28
28
  POSITIONS = ['bottomRight','bottomLeft','bottomCenter','topRight','topLeft','topCenter','center'],
29
29
  THEMES = {
30
30
  info: {
31
- color: "blue",
32
- icon: "ico-info"
31
+ color: 'blue',
32
+ icon: 'ico-info'
33
33
  },
34
34
  success: {
35
- color: "green",
36
- icon: "ico-check",
35
+ color: 'green',
36
+ icon: 'ico-success'
37
37
  },
38
38
  warning: {
39
- color: "yellow",
40
- icon: "ico-warning",
39
+ color: 'orange',
40
+ icon: 'ico-warning'
41
41
  },
42
42
  error: {
43
- color: "red",
44
- icon: "ico-error",
43
+ color: 'red',
44
+ icon: 'ico-error'
45
+ },
46
+ question: {
47
+ color: 'yellow',
48
+ icon: 'ico-question'
45
49
  }
46
50
  },
47
51
  MOBILEWIDTH = 568,
48
52
  CONFIG = {};
49
53
 
54
+
50
55
  // Default settings
51
56
  var defaults = {
57
+ id: null,
52
58
  class: '',
53
59
  title: '',
54
60
  titleColor: '',
61
+ titleSize: '',
62
+ titleLineHeight: '',
55
63
  message: '',
56
64
  messageColor: '',
65
+ messageSize: '',
66
+ messageLineHeight: '',
57
67
  backgroundColor: '',
68
+ theme: 'light', // dark
58
69
  color: '', // blue, red, green, yellow
59
70
  icon: '',
60
71
  iconText: '',
61
72
  iconColor: '',
62
73
  image: '',
63
74
  imageWidth: 50,
64
- zindex: 99999,
75
+ maxWidth: null,
76
+ zindex: null,
65
77
  layout: 1,
66
78
  balloon: false,
67
79
  close: true,
80
+ closeOnEscape: false,
68
81
  rtl: false,
69
82
  position: 'bottomRight', // bottomRight, bottomLeft, topRight, topLeft, topCenter, bottomCenter, center
70
83
  target: '',
71
84
  targetFirst: true,
85
+ toastOnce: false,
72
86
  timeout: 5000,
87
+ animateInside: true,
73
88
  drag: true,
74
89
  pauseOnHover: true,
75
90
  resetOnHover: false,
76
91
  progressBar: true,
77
92
  progressBarColor: '',
78
- animateInside: true,
79
- buttons: {},
93
+ progressBarEasing: 'linear',
94
+ overlay: false,
95
+ overlayClose: false,
96
+ overlayColor: 'rgba(0, 0, 0, 0.6)',
80
97
  transitionIn: 'fadeInUp', // bounceInLeft, bounceInRight, bounceInUp, bounceInDown, fadeIn, fadeInDown, fadeInUp, fadeInLeft, fadeInRight, flipInX
81
98
  transitionOut: 'fadeOut', // fadeOut, fadeOutUp, fadeOutDown, fadeOutLeft, fadeOutRight, flipOutX
82
99
  transitionInMobile: 'fadeInUp',
83
100
  transitionOutMobile: 'fadeOutDown',
84
- onOpen: function () {},
85
- onClose: function () {}
101
+ buttons: {},
102
+ onOpening: function () {},
103
+ onOpened: function () {},
104
+ onClosing: function () {},
105
+ onClosed: function () {}
86
106
  };
87
107
 
88
108
  //
@@ -93,14 +113,31 @@
93
113
  /**
94
114
  * Polyfill for remove() method
95
115
  */
96
- if (!('remove' in Element.prototype)) {
116
+ if(!('remove' in Element.prototype)) {
97
117
  Element.prototype.remove = function() {
98
- if (this.parentNode) {
118
+ if(this.parentNode) {
99
119
  this.parentNode.removeChild(this);
100
120
  }
101
121
  };
102
122
  }
103
123
 
124
+ /*
125
+ * Polyfill for CustomEvent for IE >= 9
126
+ * https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent#Polyfill
127
+ */
128
+ if(typeof window.CustomEvent !== 'function') {
129
+ var CustomEventPolyfill = function (event, params) {
130
+ params = params || { bubbles: false, cancelable: false, detail: undefined };
131
+ var evt = document.createEvent('CustomEvent');
132
+ evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
133
+ return evt;
134
+ };
135
+
136
+ CustomEventPolyfill.prototype = window.Event.prototype;
137
+
138
+ window.CustomEvent = CustomEventPolyfill;
139
+ }
140
+
104
141
  /**
105
142
  * A simple forEach() implementation for Arrays, Objects and NodeLists
106
143
  * @private
@@ -109,9 +146,9 @@
109
146
  * @param {Array|Object|NodeList} scope Object/NodeList/Array that forEach is iterating over (aka `this`)
110
147
  */
111
148
  var forEach = function (collection, callback, scope) {
112
- if (Object.prototype.toString.call(collection) === '[object Object]') {
149
+ if(Object.prototype.toString.call(collection) === '[object Object]') {
113
150
  for (var prop in collection) {
114
- if (Object.prototype.hasOwnProperty.call(collection, prop)) {
151
+ if(Object.prototype.hasOwnProperty.call(collection, prop)) {
115
152
  callback.call(scope, collection[prop], prop, collection);
116
153
  }
117
154
  }
@@ -163,7 +200,7 @@
163
200
  * @private
164
201
  */
165
202
  var isColor = function(color){
166
- if( color.substring(0,1) == "#" || color.substring(0,3) == "rgb" || color.substring(0,3) == "hsl" ){
203
+ if( color.substring(0,1) == '#' || color.substring(0,3) == 'rgb' || color.substring(0,3) == 'hsl' ){
167
204
  return true;
168
205
  } else {
169
206
  return false;
@@ -171,6 +208,19 @@
171
208
  };
172
209
 
173
210
 
211
+ /**
212
+ * Check if is a Base64 string
213
+ * @private
214
+ */
215
+ var isBase64 = function(str) {
216
+ try {
217
+ return btoa(atob(str)) == str;
218
+ } catch (err) {
219
+ return false;
220
+ }
221
+ };
222
+
223
+
174
224
  /**
175
225
  * Drag method of toasts
176
226
  * @private
@@ -184,30 +234,36 @@
184
234
  opacityRange = 0.3,
185
235
  distance = 180;
186
236
 
187
- toast.style.transform = 'translateX('+xpos + 'px)';
237
+ if(xpos !== 0){
238
+
239
+ toast.classList.add(PLUGIN_NAME+'-dragged');
240
+
241
+ toast.style.transform = 'translateX('+xpos + 'px)';
242
+
243
+ if(xpos > 0){
244
+ opacity = (distance-xpos) / distance;
245
+ if(opacity < opacityRange){
246
+ instance.hide(toast, extend(settings, { transitionOut: 'fadeOutRight', transitionOutMobile: 'fadeOutRight' }), 'drag');
247
+ }
248
+ } else {
249
+ opacity = (distance+xpos) / distance;
250
+ if(opacity < opacityRange){
251
+ instance.hide(toast, extend(settings, { transitionOut: 'fadeOutLeft', transitionOutMobile: 'fadeOutLeft' }), 'drag');
252
+ }
253
+ }
254
+ toast.style.opacity = opacity;
255
+
256
+ if(opacity < opacityRange){
188
257
 
189
- if(xpos > 0){
190
- opacity = (distance-xpos) / distance;
191
- if(opacity < opacityRange){
192
- instance.hide(extend(settings, { transitionOut: 'fadeOutRight', transitionOutMobile: 'fadeOutRight' }), toast, 'drag');
193
- }
194
- } else {
195
- opacity = (distance+xpos) / distance;
196
- if(opacity < opacityRange){
197
- instance.hide(extend(settings, { transitionOut: 'fadeOutLeft', transitionOutMobile: 'fadeOutLeft' }), toast, 'drag');
198
- }
199
- }
200
- toast.style.opacity = opacity;
201
-
202
- if(opacity < opacityRange){
258
+ if(ISCHROME || ISFIREFOX)
259
+ toast.style.left = xpos+'px';
203
260
 
204
- if(ISCHROME || ISFIREFOX)
205
- toast.style.left = xpos+'px';
261
+ toast.parentNode.style.opacity = opacityRange;
206
262
 
207
- toast.parentNode.style.opacity = opacityRange;
263
+ this.stopMoving(toast, null);
264
+ }
265
+ }
208
266
 
209
- this.stopMoving(toast, null);
210
- }
211
267
 
212
268
  },
213
269
  startMoving: function(toast, instance, settings, e) {
@@ -220,9 +276,9 @@
220
276
 
221
277
  toast.classList.remove(settings.transitionIn);
222
278
  toast.classList.remove(settings.transitionInMobile);
223
- toast.style.transition = "";
279
+ toast.style.transition = '';
224
280
 
225
- if (ACCEPTSTOUCH) {
281
+ if(ACCEPTSTOUCH) {
226
282
  document.ontouchmove = function(e) {
227
283
  e.preventDefault();
228
284
  e = e || window.event;
@@ -243,75 +299,31 @@
243
299
  },
244
300
  stopMoving: function(toast, e) {
245
301
 
246
- if (ACCEPTSTOUCH) {
302
+ if(ACCEPTSTOUCH) {
247
303
  document.ontouchmove = function() {};
248
304
  } else {
249
305
  document.onmousemove = function() {};
250
306
  }
251
- toast.style.transition = "transform 0.4s ease, opacity 0.4s ease";
252
- toast.style.opacity = "";
253
- toast.style.transform = "";
254
- window.setTimeout(function() {
255
- toast.style.transition = "";
256
- }, 400);
307
+
308
+ toast.style.opacity = '';
309
+ toast.style.transform = '';
310
+
311
+ if(toast.classList.contains(PLUGIN_NAME+'-dragged')){
312
+
313
+ toast.classList.remove(PLUGIN_NAME+'-dragged');
314
+
315
+ toast.style.transition = 'transform 0.4s ease, opacity 0.4s ease';
316
+ setTimeout(function() {
317
+ toast.style.transition = '';
318
+ }, 400);
319
+ }
320
+
257
321
  }
258
322
  };
259
323
 
260
324
  }();
261
325
 
262
326
 
263
- /**
264
- * Do the calculation to move the progress bar
265
- * @private
266
- */
267
- var moveProgress = function(toast, settings, callback){
268
-
269
- var isPaused = false;
270
- var isReseted = false;
271
- var isClosed = false;
272
- var timerTimeout = null;
273
- var elem = toast.querySelector("."+PLUGIN_NAME+"-progressbar div");
274
- var progressBar = {
275
- hideEta: null,
276
- maxHideTime: null,
277
- currentTime: new Date().getTime(),
278
- updateProgress: function()
279
- {
280
- isPaused = toast.classList.contains(PLUGIN_NAME+'-paused') ? true : false;
281
- isReseted = toast.classList.contains(PLUGIN_NAME+'-reseted') ? true : false;
282
- isClosed = toast.classList.contains(PLUGIN_NAME+'-closed') ? true : false;
283
-
284
- if(isReseted){
285
- clearTimeout(timerTimeout);
286
- elem.style.width = '100%';
287
- moveProgress(toast, settings, callback);
288
- toast.classList.remove(PLUGIN_NAME+'-reseted');
289
- }
290
- if(isClosed){
291
- clearTimeout(timerTimeout);
292
- toast.classList.remove(PLUGIN_NAME+'-closed');
293
- }
294
-
295
- if(!isPaused && !isReseted && !isClosed){
296
- progressBar.currentTime = progressBar.currentTime+10;
297
- var percentage = ((progressBar.hideEta - (progressBar.currentTime)) / progressBar.maxHideTime) * 100;
298
- elem.style.width = percentage + '%';
299
-
300
- if(Math.round(percentage) < 0 || typeof toast != 'object'){
301
- clearTimeout(timerTimeout);
302
- callback.apply();
303
- }
304
- }
305
-
306
- }
307
- };
308
- if (settings.timeout > 0) {
309
- progressBar.maxHideTime = parseFloat(settings.timeout);
310
- progressBar.hideEta = new Date().getTime() + progressBar.maxHideTime;
311
- timerTimeout = setInterval(progressBar.updateProgress, 10);
312
- }
313
- };
314
-
315
327
  /**
316
328
  * Destroy the current initialization.
317
329
  * @public
@@ -327,8 +339,11 @@
327
339
  });
328
340
 
329
341
  // Remove event listeners
330
- document.removeEventListener(PLUGIN_NAME+'-open', {}, false);
331
- document.removeEventListener(PLUGIN_NAME+'-close', {}, false);
342
+ document.removeEventListener(PLUGIN_NAME+'-opened', {}, false);
343
+ document.removeEventListener(PLUGIN_NAME+'-opening', {}, false);
344
+ document.removeEventListener(PLUGIN_NAME+'-closing', {}, false);
345
+ document.removeEventListener(PLUGIN_NAME+'-closed', {}, false);
346
+ document.removeEventListener('keyup', {}, false);
332
347
 
333
348
  // Reset variables
334
349
  CONFIG = {};
@@ -367,20 +382,151 @@
367
382
  });
368
383
 
369
384
 
385
+ /**
386
+ * Do the calculation to move the progress bar
387
+ * @private
388
+ */
389
+ $iziToast.progress = function ($toast, options, callback) {
390
+
391
+ var that = this,
392
+ settings = extend(that.settings, options || {}),
393
+ $elem = $toast.querySelector('.'+PLUGIN_NAME+'-progressbar div');
394
+
395
+ return {
396
+ start: function() {
397
+
398
+ if($elem !== null){
399
+ $elem.style.transition = 'width '+ settings.timeout +'ms '+settings.progressBarEasing;
400
+ $elem.style.width = '0%';
401
+ }
402
+ settings.TIME.START = new Date().getTime();
403
+ settings.TIME.END = settings.TIME.START + settings.timeout;
404
+ settings.TIME.TIMER = setTimeout(function() {
405
+
406
+ clearTimeout(settings.TIME.TIMER);
407
+
408
+ if(!$toast.classList.contains(PLUGIN_NAME+'-closing')){
409
+
410
+ that.hide($toast, settings, 'timeout');
411
+
412
+ if(typeof callback === 'function'){
413
+ callback.apply(that);
414
+ }
415
+ }
416
+
417
+ }, settings.timeout);
418
+
419
+ },
420
+ pause: function() {
421
+
422
+ settings.TIME.REMAINING = settings.TIME.END - new Date().getTime();
423
+
424
+ clearTimeout(settings.TIME.TIMER);
425
+
426
+ if($elem !== null){
427
+ var computedStyle = window.getComputedStyle($elem),
428
+ propertyWidth = computedStyle.getPropertyValue('width');
429
+
430
+ $elem.style.transition = 'none';
431
+ $elem.style.width = propertyWidth;
432
+ }
433
+
434
+ if(typeof callback === 'function'){
435
+ setTimeout(function() {
436
+ callback.apply(that);
437
+ }, 10);
438
+ }
439
+
440
+ },
441
+ resume: function() {
442
+
443
+ if($elem !== null){
444
+ $elem.style.transition = 'width '+ settings.TIME.REMAINING +'ms '+settings.progressBarEasing;
445
+ $elem.style.width = '0%';
446
+ }
447
+
448
+ settings.TIME.END = new Date().getTime() + settings.TIME.REMAINING;
449
+ settings.TIME.TIMER = setTimeout(function() {
450
+
451
+ clearTimeout(settings.TIME.TIMER);
452
+
453
+ if(!$toast.classList.contains(PLUGIN_NAME+'-closing')){
454
+
455
+ that.hide($toast, settings, 'timeout');
456
+
457
+ if(typeof callback === 'function'){
458
+ callback.apply(that);
459
+ }
460
+ }
461
+
462
+
463
+ }, settings.TIME.REMAINING);
464
+
465
+ },
466
+ reset: function(){
467
+
468
+ clearTimeout(settings.TIME.TIMER);
469
+
470
+ if($elem !== null){
471
+ $elem.style.transition = 'none';
472
+ $elem.style.width = '100%';
473
+ }
474
+
475
+ if(typeof callback === 'function'){
476
+ setTimeout(function() {
477
+ callback.apply(that);
478
+ }, 10);
479
+ }
480
+
481
+ }
482
+ };
483
+
484
+ };
485
+
486
+
370
487
  /**
371
488
  * Close the specific Toast
372
489
  * @public
373
490
  * @param {Object} options User settings
374
491
  */
375
- $iziToast.hide = function (options, $toast, closedBy) {
492
+ $iziToast.hide = function ($toast, options, closedBy) {
376
493
 
377
- var settings = extend(defaults, options || {});
378
- closedBy = closedBy || false;
494
+ var settings = extend(this.settings, options || {});
495
+ closedBy = closedBy || null;
379
496
 
380
497
  if(typeof $toast != 'object'){
381
498
  $toast = document.querySelector($toast);
382
499
  }
383
- $toast.classList.add(PLUGIN_NAME+'-closed');
500
+
501
+ $toast.classList.add(PLUGIN_NAME+'-closing');
502
+
503
+ settings.closedBy = closedBy;
504
+ settings.REF = $toast.getAttribute('data-iziToast-ref');
505
+
506
+ // Overlay
507
+ (function(){
508
+
509
+ var $overlay = document.querySelector('.'+PLUGIN_NAME+'-overlay');
510
+ if($overlay !== null){
511
+ var refs = $overlay.getAttribute('data-iziToast-ref');
512
+ refs = refs.split(',');
513
+ var index = refs.indexOf(settings.REF);
514
+
515
+ if(index !== -1){
516
+ refs.splice(index, 1);
517
+ }
518
+ $overlay.setAttribute('data-iziToast-ref', refs.join());
519
+
520
+ if(refs.length === 0){
521
+ $overlay.classList.remove('fadeIn');
522
+ $overlay.classList.add('fadeOut');
523
+ setTimeout(function() {
524
+ $overlay.remove();
525
+ }, 700);
526
+ }
527
+ }
528
+
529
+ })();
384
530
 
385
531
  if(settings.transitionIn || settings.transitionInMobile){
386
532
  $toast.classList.remove(settings.transitionIn);
@@ -390,7 +536,7 @@
390
536
  if(ISMOBILE || window.innerWidth <= MOBILEWIDTH){
391
537
  if(settings.transitionOutMobile)
392
538
  $toast.classList.add(settings.transitionOutMobile);
393
- } else{
539
+ } else {
394
540
  if(settings.transitionOut)
395
541
  $toast.classList.add(settings.transitionOut);
396
542
  }
@@ -402,31 +548,40 @@
402
548
  $toast.parentNode.style.transitionDelay = '0.2s';
403
549
  }
404
550
 
551
+ try {
552
+ settings.closedBy = closedBy;
553
+ var event = new CustomEvent(PLUGIN_NAME+'-closing', {detail: settings, bubbles: true, cancelable: true});
554
+ document.dispatchEvent(event);
555
+ } catch(ex){
556
+ console.warn(ex);
557
+ }
558
+
405
559
  setTimeout(function() {
560
+
406
561
  $toast.parentNode.style.height = '0px';
407
562
  $toast.parentNode.style.overflow = '';
408
- window.setTimeout(function(){
563
+
564
+ setTimeout(function(){
565
+
409
566
  $toast.parentNode.remove();
410
- },1000);
411
- },200);
567
+ try {
568
+ settings.closedBy = closedBy;
569
+ var event = new CustomEvent(PLUGIN_NAME+'-closed', {detail: settings, bubbles: true, cancelable: true});
570
+ document.dispatchEvent(event);
571
+ } catch(ex){
572
+ console.warn(ex);
573
+ }
412
574
 
413
- if (settings.class){
414
- try {
415
- var event;
416
- if (window.CustomEvent) {
417
- event = new CustomEvent(PLUGIN_NAME+'-close', {detail: {class: settings.class}});
418
- } else {
419
- event = document.createEvent('CustomEvent');
420
- event.initCustomEvent(PLUGIN_NAME+'-close', true, true, {class: settings.class});
575
+ if(typeof settings.onClosed !== 'undefined'){
576
+ settings.onClosed.apply(null, [settings, $toast, closedBy]);
421
577
  }
422
- document.dispatchEvent(event);
423
- } catch(ex){
424
- console.warn(ex);
425
- }
426
- }
427
578
 
428
- if(typeof settings.onClose !== "undefined"){
429
- settings.onClose.apply(null, [settings, $toast, closedBy]);
579
+ }, 1000);
580
+ }, 200);
581
+
582
+
583
+ if(typeof settings.onClosing !== 'undefined'){
584
+ settings.onClosing.apply(null, [settings, $toast, closedBy]);
430
585
  }
431
586
  };
432
587
 
@@ -443,349 +598,542 @@
443
598
  var settings = extend(CONFIG, options || {});
444
599
  settings = extend(defaults, settings);
445
600
 
446
- var $toastCapsule = document.createElement("div");
447
- $toastCapsule.classList.add(PLUGIN_NAME+"-capsule");
448
-
449
- var $toast = document.createElement("div");
450
- $toast.classList.add(PLUGIN_NAME);
601
+ settings.TIME = {};
451
602
 
452
- if(ISMOBILE || window.innerWidth <= MOBILEWIDTH){
453
- if(settings.transitionInMobile.length>0)
454
- $toast.classList.add(settings.transitionInMobile);
455
- } else {
456
- if(settings.transitionIn.length>0)
457
- $toast.classList.add(settings.transitionIn);
603
+ if(settings.toastOnce && settings.id && document.querySelectorAll('.'+PLUGIN_NAME+'#'+settings.id).length > 0){
604
+ return false;
458
605
  }
459
606
 
460
- if(settings.rtl){
461
- $toast.classList.add(PLUGIN_NAME + '-rtl');
462
- }
607
+ settings.REF = new Date().getTime() + Math.floor((Math.random() * 10000000) + 1);
608
+
609
+ var $DOM = {
610
+ body: document.querySelector('body'),
611
+ overlay: document.createElement('div'),
612
+ toast: document.createElement('div'),
613
+ toastBody: document.createElement('div'),
614
+ toastTexts: document.createElement('div'),
615
+ toastCapsule: document.createElement('div'),
616
+ icon: document.createElement('i'),
617
+ cover: document.createElement('div'),
618
+ buttons: document.createElement('div'),
619
+ wrapper: null
620
+ };
463
621
 
464
- if (settings.color.length > 0) { //#, rgb, rgba, hsl
465
-
466
- if( isColor(settings.color) ){
467
- $toast.style.background = settings.color;
468
- } else {
469
- $toast.classList.add(PLUGIN_NAME+'-color-'+settings.color);
470
- }
471
- }
472
- if (settings.backgroundColor.length > 0) {
473
- $toast.style.background = settings.backgroundColor;
474
- }
622
+ $DOM.toast.setAttribute('data-iziToast-ref', settings.REF);
623
+ $DOM.toast.appendChild($DOM.toastBody);
624
+ $DOM.toastCapsule.appendChild($DOM.toast);
475
625
 
476
- if (settings.class){
477
- $toast.classList.add(settings.class);
478
- }
626
+ // CSS Settings
627
+ (function(){
479
628
 
480
- if (settings.image) {
481
- var $cover = document.createElement("div");
482
- $cover.classList.add(PLUGIN_NAME + '-cover');
483
- $cover.style.width = settings.imageWidth + "px";
484
- $cover.style.backgroundImage = 'url(' + settings.image + ')';
485
- $toast.appendChild($cover);
486
- }
629
+ $DOM.toast.classList.add(PLUGIN_NAME);
630
+ $DOM.toast.classList.add(PLUGIN_NAME+'-opening');
631
+ $DOM.toastCapsule.classList.add(PLUGIN_NAME+'-capsule');
632
+ $DOM.toastBody.classList.add(PLUGIN_NAME + '-body');
633
+ $DOM.toastTexts.classList.add(PLUGIN_NAME + '-texts');
487
634
 
488
- var $buttonClose;
489
- if(settings.close){
490
- $buttonClose = document.createElement("button");
491
- $buttonClose.classList.add(PLUGIN_NAME + '-close');
492
- $toast.appendChild($buttonClose);
493
- } else {
494
- if(settings.rtl){
495
- $toast.style.paddingLeft = "30px";
635
+ if(ISMOBILE || window.innerWidth <= MOBILEWIDTH){
636
+ if(settings.transitionInMobile)
637
+ $DOM.toast.classList.add(settings.transitionInMobile);
496
638
  } else {
497
- $toast.style.paddingRight = "30px";
639
+ if(settings.transitionIn)
640
+ $DOM.toast.classList.add(settings.transitionIn);
498
641
  }
499
- }
500
642
 
501
- if (settings.progressBar) {
643
+ if(settings.class){
644
+ var classes = settings.class.split(' ');
645
+ forEach(classes, function (value, index) {
646
+ $DOM.toast.classList.add(value);
647
+ });
648
+ }
502
649
 
503
- var $progressBar = document.createElement("div");
504
- $progressBar.classList.add(PLUGIN_NAME + '-progressbar');
650
+ if(settings.id){ $DOM.toast.id = settings.id; }
505
651
 
506
- var $progressBarDiv = document.createElement("div");
507
- $progressBarDiv.style.background = settings.progressBarColor;
652
+ if(settings.rtl){ $DOM.toast.classList.add(PLUGIN_NAME + '-rtl'); }
508
653
 
509
- $progressBar.appendChild($progressBarDiv);
510
- $toast.appendChild($progressBar);
511
-
512
- setTimeout(function() {
513
- moveProgress($toast, settings, function(){
514
- that.hide(settings, $toast);
515
- });
516
- },300);
517
- }
518
- else if( settings.progressBar === false && settings.timeout > 0){
519
- setTimeout(function() {
520
- that.hide(settings, $toast);
521
- }, settings.timeout);
522
- }
654
+ if(settings.layout > 1){ $DOM.toast.classList.add(PLUGIN_NAME+'-layout'+settings.layout); }
523
655
 
524
- var $toastBody = document.createElement("div");
525
- $toastBody.classList.add(PLUGIN_NAME + '-body');
656
+ if(settings.balloon){ $DOM.toast.classList.add(PLUGIN_NAME+'-balloon'); }
526
657
 
527
- if (settings.image) {
528
- if(settings.rtl){
529
- $toastBody.style.marginRight = (settings.imageWidth + 10) + 'px';
530
- } else {
531
- $toastBody.style.marginLeft = (settings.imageWidth + 10) + 'px';
658
+ if(settings.maxWidth){
659
+ if( !isNaN(settings.maxWidth) ){
660
+ $DOM.toast.style.maxWidth = settings.maxWidth+'px';
661
+ } else {
662
+ $DOM.toast.style.maxWidth = settings.maxWidth;
663
+ }
532
664
  }
533
- }
534
665
 
535
- if (settings.icon) {
536
- var $icon = document.createElement("i");
537
- $icon.setAttribute("class", PLUGIN_NAME + '-icon ' + settings.icon);
538
-
539
- if (settings.iconText){
540
- $icon.appendChild(document.createTextNode(settings.iconText));
666
+ if(settings.theme !== '' || settings.theme !== 'light') {
667
+
668
+ $DOM.toast.classList.add(PLUGIN_NAME+'-theme-'+settings.theme);
541
669
  }
542
670
 
543
- if(settings.rtl){
544
- $toastBody.style.paddingRight = '33px';
671
+ if(settings.color) { //#, rgb, rgba, hsl
672
+
673
+ if( isColor(settings.color) ){
674
+ $DOM.toast.style.background = settings.color;
675
+ } else {
676
+ $DOM.toast.classList.add(PLUGIN_NAME+'-color-'+settings.color);
677
+ }
678
+ }
679
+
680
+ if(settings.backgroundColor) {
681
+ $DOM.toast.style.background = settings.backgroundColor;
682
+ if(settings.balloon){
683
+ $DOM.toast.style.borderColor = settings.backgroundColor;
684
+ }
685
+ }
686
+ })();
687
+
688
+ // Cover image
689
+ (function(){
690
+ if(settings.image) {
691
+ $DOM.cover.classList.add(PLUGIN_NAME + '-cover');
692
+ $DOM.cover.style.width = settings.imageWidth + 'px';
693
+
694
+ if(isBase64(settings.image.replace(/ /g,''))){
695
+ $DOM.cover.style.backgroundImage = 'url(data:image/png;base64,' + settings.image.replace(/ /g,'') + ')';
696
+ } else {
697
+ $DOM.cover.style.backgroundImage = 'url(' + settings.image + ')';
698
+ }
699
+
700
+ if(settings.rtl){
701
+ $DOM.toastBody.style.marginRight = (settings.imageWidth + 10) + 'px';
702
+ } else {
703
+ $DOM.toastBody.style.marginLeft = (settings.imageWidth + 10) + 'px';
704
+ }
705
+ $DOM.toast.appendChild($DOM.cover);
706
+ }
707
+ })();
708
+
709
+ // Button close
710
+ (function(){
711
+ if(settings.close){
712
+
713
+ $DOM.buttonClose = document.createElement('button');
714
+
715
+ $DOM.buttonClose.classList.add(PLUGIN_NAME + '-close');
716
+ $DOM.buttonClose.addEventListener('click', function (e) {
717
+ var button = e.target;
718
+ that.hide($DOM.toast, settings, 'button');
719
+ });
720
+ $DOM.toast.appendChild($DOM.buttonClose);
545
721
  } else {
546
- $toastBody.style.paddingLeft = '33px';
722
+ if(settings.rtl){
723
+ $DOM.toast.style.paddingLeft = '20px';
724
+ } else {
725
+ $DOM.toast.style.paddingRight = '20px';
726
+ }
547
727
  }
548
-
549
- if (settings.iconColor){
550
- $icon.style.color = settings.iconColor;
728
+ })();
729
+
730
+ // Progress Bar & Timeout
731
+ (function(){
732
+ if(settings.timeout) {
733
+
734
+ if(settings.progressBar){
735
+ $DOM.progressBar = document.createElement('div');
736
+ $DOM.progressBarDiv = document.createElement('div');
737
+ $DOM.progressBar.classList.add(PLUGIN_NAME + '-progressbar');
738
+ $DOM.progressBarDiv.style.background = settings.progressBarColor;
739
+ $DOM.progressBar.appendChild($DOM.progressBarDiv);
740
+ $DOM.toast.appendChild($DOM.progressBar);
741
+ }
742
+
743
+ if(settings.pauseOnHover && !settings.resetOnHover){
744
+
745
+ $DOM.toast.addEventListener('mouseenter', function (e) {
746
+ this.classList.add(PLUGIN_NAME+'-paused');
747
+
748
+ that.progress($DOM.toast, settings).pause();
749
+ });
750
+ $DOM.toast.addEventListener('mouseleave', function (e) {
751
+ this.classList.remove(PLUGIN_NAME+'-paused');
752
+
753
+ that.progress($DOM.toast, settings).resume();
754
+ });
755
+ }
756
+
757
+ if(settings.resetOnHover){
758
+
759
+ $DOM.toast.addEventListener('mouseenter', function (e) {
760
+ this.classList.add(PLUGIN_NAME+'-reseted');
761
+
762
+ that.progress($DOM.toast, settings).reset();
763
+ });
764
+ $DOM.toast.addEventListener('mouseleave', function (e) {
765
+ this.classList.remove(PLUGIN_NAME+'-reseted');
766
+
767
+ that.progress($DOM.toast, settings).start();
768
+ });
769
+ }
551
770
  }
552
- $toastBody.appendChild($icon);
553
- }
771
+ })();
554
772
 
555
- var $strong = document.createElement("strong");
556
- if (settings.titleColor.length > 0) {
557
- $strong.style.color = settings.titleColor;
558
- }
559
- $strong.appendChild(createFragElem(settings.title));
773
+ // Icon
774
+ (function(){
775
+ if(settings.icon) {
776
+ $DOM.icon.setAttribute('class', PLUGIN_NAME + '-icon ' + settings.icon);
777
+
778
+ if(settings.iconText){
779
+ $DOM.icon.appendChild(document.createTextNode(settings.iconText));
780
+ }
560
781
 
561
- var $p = document.createElement("p");
562
- if (settings.messageColor.length > 0) {
563
- $p.style.color = settings.messageColor;
564
- }
565
- $p.appendChild(createFragElem(settings.message));
782
+ if(settings.rtl){
783
+ $DOM.toastBody.style.paddingRight = '33px';
784
+ } else {
785
+ $DOM.toastBody.style.paddingLeft = '33px';
786
+ }
787
+
788
+ if(settings.iconColor){
789
+ $DOM.icon.style.color = settings.iconColor;
790
+ }
791
+ $DOM.toastBody.appendChild($DOM.icon);
792
+ }
793
+ })();
566
794
 
567
- if(settings.layout > 1){
568
- $toast.classList.add(PLUGIN_NAME+"-layout"+settings.layout);
569
- }
795
+ // Title
796
+ (function(){
797
+ if(settings.title.length > 0) {
798
+
799
+ $DOM.strong = document.createElement('strong');
800
+ $DOM.strong.classList.add(PLUGIN_NAME + '-title');
801
+ $DOM.strong.appendChild(createFragElem(settings.title));
802
+ $DOM.toastTexts.appendChild($DOM.strong);
803
+
804
+ if(settings.titleColor) {
805
+ $DOM.strong.style.color = settings.titleColor;
806
+ }
807
+ if(settings.titleSize) {
808
+ if( !isNaN(settings.titleSize) ){
809
+ $DOM.strong.style.fontSize = settings.titleSize+'px';
810
+ } else {
811
+ $DOM.strong.style.fontSize = settings.titleSize;
812
+ }
813
+ }
814
+ if(settings.titleLineHeight) {
815
+ if( !isNaN(settings.titleSize) ){
816
+ $DOM.strong.style.lineHeight = settings.titleLineHeight+'px';
817
+ } else {
818
+ $DOM.strong.style.lineHeight = settings.titleLineHeight;
819
+ }
820
+ }
821
+ }
822
+ })();
823
+
824
+ // Message
825
+ (function(){
826
+ if(settings.message.length > 0) {
827
+
828
+ $DOM.p = document.createElement('p');
829
+ $DOM.p.classList.add(PLUGIN_NAME + '-message');
830
+ $DOM.p.appendChild(createFragElem(settings.message));
831
+ $DOM.toastTexts.appendChild($DOM.p);
832
+
833
+ if(settings.messageColor) {
834
+ $DOM.p.style.color = settings.messageColor;
835
+ }
836
+ if(settings.messageSize) {
837
+ if( !isNaN(settings.titleSize) ){
838
+ $DOM.p.style.fontSize = settings.messageSize+'px';
839
+ } else {
840
+ $DOM.p.style.fontSize = settings.messageSize;
841
+ }
842
+ }
843
+ if(settings.messageLineHeight) {
844
+
845
+ if( !isNaN(settings.titleSize) ){
846
+ $DOM.p.style.lineHeight = settings.messageLineHeight+'px';
847
+ } else {
848
+ $DOM.p.style.lineHeight = settings.messageLineHeight;
849
+ }
850
+ }
851
+ }
852
+ })();
570
853
 
571
- if(settings.balloon){
572
- $toast.classList.add(PLUGIN_NAME+"-balloon");
854
+ if(settings.title.length > 0 && settings.message.length > 0) {
855
+ if(settings.rtl){
856
+ $DOM.strong.style.marginLeft = '10px';
857
+ } else if(settings.layout !== 2 && !settings.rtl) {
858
+ $DOM.strong.style.marginRight = '10px';
859
+ }
573
860
  }
574
861
 
575
- $toastBody.appendChild($strong);
576
- $toastBody.appendChild($p);
862
+ $DOM.toastBody.appendChild($DOM.toastTexts);
577
863
 
578
- var $buttons;
579
- if (settings.buttons.length > 0) {
864
+ // Buttons
865
+ (function(){
866
+ if(settings.buttons.length > 0) {
580
867
 
581
- $buttons = document.createElement("div");
582
- $buttons.classList.add(PLUGIN_NAME + '-buttons');
868
+ $DOM.buttons.classList.add(PLUGIN_NAME + '-buttons');
583
869
 
584
- $p.style.marginRight = '15px';
870
+ if(settings.title.length > 0 && settings.message.length === 0) {
871
+ if(settings.rtl){
872
+ $DOM.strong.style.marginLeft = '15px';
873
+ } else {
874
+ $DOM.strong.style.marginRight = '15px';
875
+ }
876
+ }
877
+ if(settings.message.length > 0) {
878
+ if(settings.rtl){
879
+ $DOM.p.style.marginLeft = '15px';
880
+ } else {
881
+ $DOM.p.style.marginRight = '15px';
882
+ }
883
+ $DOM.p.style.marginBottom = '0';
884
+ }
585
885
 
586
- var i = 0;
587
- forEach(settings.buttons, function (value, index) {
588
- $buttons.appendChild(createFragElem(value[0]));
886
+ forEach(settings.buttons, function (value, index) {
887
+ $DOM.buttons.appendChild(createFragElem(value[0]));
589
888
 
590
- var $btns = $buttons.childNodes;
889
+ var $btns = $DOM.buttons.childNodes;
591
890
 
592
- $btns[i].addEventListener('click', function (e) {
593
- e.preventDefault();
594
- var ts = value[1];
595
- return new ts(that, $toast);
596
- });
891
+ $btns[index].classList.add(PLUGIN_NAME + '-buttons-child');
597
892
 
598
- i++;
599
- });
600
- $toastBody.appendChild($buttons);
601
- }
893
+ if(value[2]){
894
+ setTimeout(function() {
895
+ $btns[index].focus();
896
+ }, 300);
897
+ }
602
898
 
603
- $toast.appendChild($toastBody);
604
- $toastCapsule.style.visibility = 'hidden';
605
- $toastCapsule.appendChild($toast);
899
+ $btns[index].addEventListener('click', function (e) {
900
+ e.preventDefault();
901
+ var ts = value[1];
902
+ return ts(that, $DOM.toast);
903
+ });
904
+ });
905
+ }
906
+ $DOM.toastBody.appendChild($DOM.buttons);
907
+ })();
606
908
 
607
- setTimeout(function() {
608
- var H = $toast.offsetHeight;
609
- var style = $toast.currentStyle || window.getComputedStyle($toast);
610
- var marginTop = style.marginTop;
611
- marginTop = marginTop.split("px");
612
- marginTop = parseInt(marginTop[0]);
613
- var marginBottom = style.marginBottom;
614
- marginBottom = marginBottom.split("px");
615
- marginBottom = parseInt(marginBottom[0]);
616
-
617
- $toastCapsule.style.visibility = '';
618
- $toastCapsule.style.height = (H+marginBottom+marginTop)+'px';
909
+ // Target
910
+ (function(){
911
+ $DOM.toastCapsule.style.visibility = 'hidden';
619
912
  setTimeout(function() {
620
- $toastCapsule.style.height = 'auto';
621
- if(settings.target){
622
- $toastCapsule.style.overflow = 'visible';
913
+ var H = $DOM.toast.offsetHeight;
914
+ var style = $DOM.toast.currentStyle || window.getComputedStyle($DOM.toast);
915
+ var marginTop = style.marginTop;
916
+ marginTop = marginTop.split('px');
917
+ marginTop = parseInt(marginTop[0]);
918
+ var marginBottom = style.marginBottom;
919
+ marginBottom = marginBottom.split('px');
920
+ marginBottom = parseInt(marginBottom[0]);
921
+
922
+ $DOM.toastCapsule.style.visibility = '';
923
+ $DOM.toastCapsule.style.height = (H+marginBottom+marginTop)+'px';
924
+
925
+ setTimeout(function() {
926
+ $DOM.toastCapsule.style.height = 'auto';
927
+ if(settings.target){
928
+ $DOM.toastCapsule.style.overflow = 'visible';
929
+ }
930
+ }, 500);
931
+
932
+ if(settings.timeout) {
933
+ that.progress($DOM.toast, settings).start();
623
934
  }
624
- },1000);
625
- }, 100);
935
+ }, 100);
936
+ })();
626
937
 
627
- var position = settings.position,
628
- $wrapper;
938
+ // Target
939
+ (function(){
940
+ var position = settings.position;
629
941
 
630
- if(settings.target){
942
+ if(settings.target){
631
943
 
632
- $wrapper = document.querySelector(settings.target);
633
- $wrapper.classList.add(PLUGIN_NAME + '-target');
944
+ $DOM.wrapper = document.querySelector(settings.target);
945
+ $DOM.wrapper.classList.add(PLUGIN_NAME + '-target');
634
946
 
635
- if (settings.targetFirst) {
636
- $wrapper.insertBefore($toastCapsule, $wrapper.firstChild);
637
- } else {
638
- $wrapper.appendChild($toastCapsule);
639
- }
947
+ if(settings.targetFirst) {
948
+ $DOM.wrapper.insertBefore($DOM.toastCapsule, $DOM.wrapper.firstChild);
949
+ } else {
950
+ $DOM.wrapper.appendChild($DOM.toastCapsule);
951
+ }
640
952
 
641
- } else {
953
+ } else {
642
954
 
643
- if( POSITIONS.indexOf(settings.position) == -1 ){
644
- console.warn("["+PLUGIN_NAME+"] Incorrect position.\nIt can be › " + POSITIONS);
645
- return;
646
- }
955
+ if( POSITIONS.indexOf(settings.position) == -1 ){
956
+ console.warn('['+PLUGIN_NAME+'] Incorrect position.\nIt can be › ' + POSITIONS);
957
+ return;
958
+ }
647
959
 
648
- if(ISMOBILE || window.innerWidth <= MOBILEWIDTH){
649
- if(settings.position == "bottomLeft" || settings.position == "bottomRight" || settings.position == "bottomCenter"){
650
- position = PLUGIN_NAME+'-wrapper-bottomCenter';
960
+ if(ISMOBILE || window.innerWidth <= MOBILEWIDTH){
961
+ if(settings.position == 'bottomLeft' || settings.position == 'bottomRight' || settings.position == 'bottomCenter'){
962
+ position = PLUGIN_NAME+'-wrapper-bottomCenter';
963
+ }
964
+ else if(settings.position == 'topLeft' || settings.position == 'topRight' || settings.position == 'topCenter'){
965
+ position = PLUGIN_NAME+'-wrapper-topCenter';
966
+ }
967
+ else {
968
+ position = PLUGIN_NAME+'-wrapper-center';
969
+ }
970
+ } else {
971
+ position = PLUGIN_NAME+'-wrapper-'+position;
651
972
  }
652
- else if(settings.position == "topLeft" || settings.position == "topRight" || settings.position == "topCenter"){
653
- position = PLUGIN_NAME+'-wrapper-topCenter';
973
+ $DOM.wrapper = document.querySelector('.' + PLUGIN_NAME + '-wrapper.'+position);
974
+
975
+ if(!$DOM.wrapper) {
976
+ $DOM.wrapper = document.createElement('div');
977
+ $DOM.wrapper.classList.add(PLUGIN_NAME + '-wrapper');
978
+ $DOM.wrapper.classList.add(position);
979
+ document.body.appendChild($DOM.wrapper);
654
980
  }
655
- else{
656
- position = PLUGIN_NAME+'-wrapper-center';
981
+ if(settings.position == 'topLeft' || settings.position == 'topCenter' || settings.position == 'topRight'){
982
+ $DOM.wrapper.insertBefore($DOM.toastCapsule, $DOM.wrapper.firstChild);
983
+ } else {
984
+ $DOM.wrapper.appendChild($DOM.toastCapsule);
657
985
  }
658
- } else {
659
- position = PLUGIN_NAME+'-wrapper-'+position;
660
986
  }
661
- $wrapper = document.querySelector('.' + PLUGIN_NAME + '-wrapper.'+position);
662
987
 
663
- if (!$wrapper) {
664
- $wrapper = document.createElement("div");
665
- $wrapper.classList.add(PLUGIN_NAME + '-wrapper');
666
- $wrapper.classList.add(position);
667
- document.body.appendChild($wrapper);
668
- }
669
- if(settings.position == "topLeft" || settings.position == "topCenter" || settings.position == "topRight"){
670
- $wrapper.insertBefore($toastCapsule, $wrapper.firstChild);
988
+ if(!isNaN(settings.zindex)) {
989
+ $DOM.wrapper.style.zIndex = settings.zindex;
671
990
  } else {
672
- $wrapper.appendChild($toastCapsule);
991
+ console.warn('['+PLUGIN_NAME+'] Invalid zIndex.');
673
992
  }
674
- }
993
+ })();
675
994
 
676
- if (!isNaN(settings.zindex)) {
677
- $wrapper.style.zIndex = settings.zindex;
678
- } else {
679
- console.warn("["+PLUGIN_NAME+"] Invalid zIndex.");
680
- }
995
+ // Overlay
996
+ (function(){
681
997
 
682
- settings.onOpen.apply(null, [settings, $toast]);
998
+ if(settings.overlay) {
683
999
 
684
- try {
685
- var event;
686
- if (window.CustomEvent) {
687
- event = new CustomEvent(PLUGIN_NAME+'-open', {detail: {class: settings.class}});
688
- } else {
689
- event = document.createEvent('CustomEvent');
690
- event.initCustomEvent(PLUGIN_NAME+'-open', true, true, {class: settings.class});
691
- }
692
- document.dispatchEvent(event);
693
- } catch(ex){
694
- console.warn(ex);
695
- }
1000
+ if( document.querySelector('.'+PLUGIN_NAME+'-overlay.fadeIn') !== null ){
696
1001
 
697
- if(settings.animateInside){
698
- $toast.classList.add(PLUGIN_NAME+'-animateInside');
699
-
700
- var timeAnimation1 = 200;
701
- var timeAnimation2 = 100;
702
- var timeAnimation3 = 300;
703
- if(settings.transitionIn == "bounceInLeft"){
704
- timeAnimation1 = 400;
705
- timeAnimation2 = 200;
706
- timeAnimation3 = 400;
707
- }
1002
+ $DOM.overlay = document.querySelector('.'+PLUGIN_NAME+'-overlay');
1003
+ $DOM.overlay.setAttribute('data-iziToast-ref', $DOM.overlay.getAttribute('data-iziToast-ref') + ',' + settings.REF);
708
1004
 
709
- window.setTimeout(function(){
710
- $strong.classList.add('slideIn');
711
- },timeAnimation1);
1005
+ if(!isNaN(settings.zindex) && settings.zindex !== null) {
1006
+ $DOM.overlay.style.zIndex = settings.zindex-1;
1007
+ }
1008
+ } else {
712
1009
 
713
- window.setTimeout(function(){
714
- $p.classList.add('slideIn');
715
- },timeAnimation2);
1010
+ $DOM.overlay.classList.add(PLUGIN_NAME+'-overlay');
1011
+ $DOM.overlay.classList.add('fadeIn');
1012
+ $DOM.overlay.style.background = settings.overlayColor;
1013
+ $DOM.overlay.setAttribute('data-iziToast-ref', settings.REF);
1014
+ if(!isNaN(settings.zindex) && settings.zindex !== null) {
1015
+ $DOM.overlay.style.zIndex = settings.zindex-1;
1016
+ }
1017
+ document.querySelector('body').appendChild($DOM.overlay);
1018
+ }
716
1019
 
717
- if (settings.icon) {
718
- window.setTimeout(function(){
719
- $icon.classList.add('revealIn');
720
- },timeAnimation3);
721
- }
1020
+ if(settings.overlayClose) {
722
1021
 
723
- if (settings.buttons.length > 0 && $buttons) {
724
- var counter = 150;
725
- forEach($buttons.childNodes, function(element, index) {
1022
+ $DOM.overlay.removeEventListener('click', {});
1023
+ $DOM.overlay.addEventListener('click', function (e) {
1024
+ that.hide($DOM.toast, settings, 'overlay');
1025
+ });
1026
+ } else {
1027
+ $DOM.overlay.removeEventListener('click', {});
1028
+ }
726
1029
 
727
- window.setTimeout(function(){
728
- element.classList.add('revealIn');
729
- },counter);
730
- counter = counter + counter;
731
- });
732
1030
  }
733
- }
734
-
735
- if($buttonClose){
736
- $buttonClose.addEventListener('click', function (e) {
737
- var button = e.target;
738
- that.hide(settings, $toast, 'button');
739
- });
740
- }
741
1031
 
742
- if(settings.pauseOnHover){
1032
+ })();
1033
+
1034
+ // Inside animations
1035
+ (function(){
1036
+ if(settings.animateInside){
1037
+ $DOM.toast.classList.add(PLUGIN_NAME+'-animateInside');
743
1038
 
744
- $toast.addEventListener('mouseenter', function (e) {
745
- this.classList.add(PLUGIN_NAME+'-paused');
746
- });
747
- $toast.addEventListener('mouseleave', function (e) {
748
- this.classList.remove(PLUGIN_NAME+'-paused');
749
- });
750
- }
1039
+ var animationTimes = [200, 100, 300];
1040
+ if(settings.transitionIn == 'bounceInLeft'){
1041
+ animationTimes = [400, 200, 400];
1042
+ }
751
1043
 
752
- if(settings.resetOnHover){
1044
+ if(settings.title.length > 0) {
1045
+ setTimeout(function(){
1046
+ $DOM.strong.classList.add('slideIn');
1047
+ }, animationTimes[0]);
1048
+ }
753
1049
 
754
- $toast.addEventListener('mouseenter', function (e) {
755
- this.classList.add(PLUGIN_NAME+'-reseted');
756
- });
757
- $toast.addEventListener('mouseleave', function (e) {
758
- this.classList.remove(PLUGIN_NAME+'-reseted');
759
- });
1050
+ if(settings.message.length > 0) {
1051
+ setTimeout(function(){
1052
+ $DOM.p.classList.add('slideIn');
1053
+ }, animationTimes[1]);
1054
+ }
1055
+
1056
+ if(settings.icon) {
1057
+ setTimeout(function(){
1058
+ $DOM.icon.classList.add('revealIn');
1059
+ }, animationTimes[2]);
1060
+ }
1061
+
1062
+ if(settings.buttons.length > 0 && $DOM.buttons) {
1063
+ var counter = 150;
1064
+ forEach($DOM.buttons.childNodes, function(element, index) {
1065
+
1066
+ setTimeout(function(){
1067
+ element.classList.add('revealIn');
1068
+ }, counter);
1069
+ counter = counter + 150;
1070
+ });
1071
+ }
1072
+ }
1073
+ })();
1074
+
1075
+ settings.onOpening.apply(null, [settings, $DOM.toast]);
1076
+
1077
+ try {
1078
+ var event = new CustomEvent(PLUGIN_NAME + '-opening', {detail: settings, bubbles: true, cancelable: true});
1079
+ document.dispatchEvent(event);
1080
+ } catch(ex){
1081
+ console.warn(ex);
760
1082
  }
761
1083
 
1084
+ setTimeout(function() {
1085
+
1086
+ $DOM.toast.classList.remove(PLUGIN_NAME+'-opening');
1087
+ $DOM.toast.classList.add(PLUGIN_NAME+'-opened');
1088
+
1089
+ try {
1090
+ var event = new CustomEvent(PLUGIN_NAME + '-opened', {detail: settings, bubbles: true, cancelable: true});
1091
+ document.dispatchEvent(event);
1092
+ } catch(ex){
1093
+ console.warn(ex);
1094
+ }
1095
+
1096
+ settings.onOpened.apply(null, [settings, $DOM.toast]);
1097
+ }, 1000);
1098
+
762
1099
  if(settings.drag){
763
1100
 
764
- if (ACCEPTSTOUCH) {
1101
+ if(ACCEPTSTOUCH) {
765
1102
 
766
- $toast.addEventListener('touchstart', function(e) {
1103
+ $DOM.toast.addEventListener('touchstart', function(e) {
767
1104
  drag.startMoving(this, that, settings, e);
768
1105
  }, false);
769
1106
 
770
- $toast.addEventListener('touchend', function(e) {
1107
+ $DOM.toast.addEventListener('touchend', function(e) {
771
1108
  drag.stopMoving(this, e);
772
1109
  }, false);
773
1110
  } else {
774
1111
 
775
- $toast.addEventListener('mousedown', function(e) {
1112
+ $DOM.toast.addEventListener('mousedown', function(e) {
776
1113
  e.preventDefault();
777
1114
  drag.startMoving(this, that, settings, e);
778
1115
  }, false);
779
1116
 
780
- $toast.addEventListener('mouseup', function(e) {
1117
+ $DOM.toast.addEventListener('mouseup', function(e) {
781
1118
  e.preventDefault();
782
1119
  drag.stopMoving(this, e);
783
1120
  }, false);
784
1121
  }
785
1122
  }
786
1123
 
1124
+ if(settings.closeOnEscape) {
1125
+
1126
+ document.addEventListener('keyup', function (evt) {
1127
+ evt = evt || window.event;
1128
+ if(evt.keyCode == 27) {
1129
+ that.hide($DOM.toast, settings, 'esc');
1130
+ }
1131
+ });
1132
+ }
787
1133
 
1134
+ that.toast = $DOM.toast;
788
1135
  };
1136
+
789
1137
 
790
1138
  return $iziToast;
791
- });
1139
+ });